zoukankan      html  css  js  c++  java
  • .NET分布式缓存Memcached测试体验

    一直在学习关注大访问量网站的缓存是如何实现,之前看过Memcached的资料,忙于没有时间来真正测试一下,今天测试下分布式缓存Memcached
    首先要在缓存服务器上安装安装:memcached(1.2.6 for Win32)
    测试程序部署到本地环境,开发工具VS2008 .NET3.5
    使用到memcached 1.2.6 for Win32下载地址:
    memcached-1.2.6-win32-bin.zip

    好了,下面我们按步骤来测试:
    第一、首先到把下载好的memcached 1.2.6解压到C:\memcached目录,分别复制到两台服务器中。
    第二、安装memcached服务,在命令提示符输入CD c:\memcached进入到memcached目录,如下图:

    之后输入memcached -h 回车,看帮助说明,接下来输入memcached -d install 回车即可自动安装

    memcached服务了,如下图:

    安装好安装memcached服务后,输入memcached -d start 回车启动memcached服务,如下图:

    在两台电脑都按以上操作来安装启动memcached。
    第三、下载.NET版memcached客户端API组件来写测试程序。
    使用memcacheddotnet,下载地址如下:
    http://sourceforge.net/projects/memcacheddotnet/
    下载好之后把这些文件Commons.dll,ICSharpCode.SharpZipLib.dll,log4net.dll,

    Memcached.ClientLibrary.dll放到bin目录(少一个都不行),之后再到测试项目开发环境引用

    Memcached.ClientLibrary.dll,如下图

    第四、测试程序:
    Memcached.cs
    --------------------------------------

      1 using System;
      2 using System.Collections.Generic;
      3 using System.Linq;
      4 using System.Text;
      5 using Memcached.ClientLibrary;
      6 using System.Collections;
      7 
      8 namespace Test {
      9   public partial class Memcached {
     10     private static Memcached _instance = new Memcached();
     11     public static Memcached _ {
     12       get {
     13         return _instance;
     14       }
     15     }
     16 
     17     string[] servers = { "192.168.1.10:11211","192.168.1.11:11211" };
     18     SockIOPool pool;
     19     MemcachedClient mc;
     20 
     21     public Memcached() {
     22       //初始化池
     23       pool = SockIOPool.GetInstance();
     24       pool.SetServers(servers);
     25 
     26       pool.InitConnections = 3;
     27       pool.MinConnections = 3;
     28       pool.MaxConnections = 1000;
     29 
     30       pool.SocketConnectTimeout = 1000;
     31       pool.SocketTimeout = 3000;
     32 
     33       pool.MaintenanceSleep = 30;
     34       pool.Failover = true;
     35 
     36       pool.Nagle = false;
     37       pool.Initialize();
     38 
     39       mc = new MemcachedClient();
     40       mc.EnableCompression = false;
     41     }
     42 
     43     public void Remove(string key) {
     44       mc.Delete(key);
     45     }
     46 
     47     public bool Set(string key, object value) {
     48       return mc.Set(key, value);
     49     }
     50 
     51     public bool Set(string key, object value, int minute) {
     52       return mc.Set(key, value, DateTime.Now.AddMinutes(minute));
     53     }
     54 
     55     public Hashtable Stats() {
     56       return mc.Stats();
     57     }
     58 
     59     public object Get(string key) {
     60       return mc.Get(key);
     61     }
     62 
     63     public bool ContainsKey(string key) {
     64       return mc.KeyExists(key);
     65     }
     66   }
     67   public class MemcachedTest {
     68     /// <summary>
     69     /// 测试缓存
     70     /// </summary>
     71     public void test() {
     72       //写入缓存
     73       Console.WriteLine("写入缓存测试:");
     74       Console.WriteLine("_______________________________________");
     75       if (Memcached._.ContainsKey("cache")) {
     76         Console.WriteLine("缓存cache已存在");
     77       }
     78       else {
     79         Memcached._.Set("cache""写入缓存时间:" + DateTime.Now.ToString());
     80         Console.WriteLine("缓存已成功写入到cache");
     81       }
     82       Console.WriteLine("_______________________________________");
     83       Console.WriteLine("读取缓存内容如下:");
     84       Console.WriteLine(Memcached._.Get("cache").ToString());
     85 
     86       //测试缓存过期
     87       Console.WriteLine("_______________________________________");
     88       if (Memcached._.ContainsKey("endCache")) {
     89         Console.WriteLine("缓存endCache已存在,过期时间为:" + Memcached._.Get
     90 
     91 ("endCache").ToString());
     92       }
     93       else {
     94         Memcached._.Set("endCache", DateTime.Now.AddMinutes(1).ToString(), 1);
     95         Console.WriteLine("缓存已更新写入到endCache"); 
     96      Console.WriteLine("写入时间:" + DateTime.Now.ToString());
     97      Console.WriteLine("过期时间:" + DateTime.Now.AddMinutes(1).ToString());
     98       }
     99 
    100       //分析缓存状态
    101       Hashtable ht = Memcached._.Stats();
    102       Console.WriteLine("_______________________________________");
    103 
    104       Console.WriteLine("Memcached Stats:");
    105       Console.WriteLine("_______________________________________");
    106       foreach (DictionaryEntry de in ht) {
    107         Hashtable info = (Hashtable)de.Value;
    108         foreach (DictionaryEntry de2 in info) {
    109           Console.WriteLine(de2.Key.ToString() + "" + de2.Value.ToString() + " ");
    110         }
    111       }
    112     }
    113   }
    114 }
    115 

    Program.cs
    --------------------------------------

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using System.IO;
     6 
     7 namespace Test {
     8   class Program {
     9     static void Main(string[] args) {
    10       MemcachedTest mt = new MemcachedTest();
    11       mt.test();
    12       Console.ReadLine();
    13     }
    14   }
    15 }

     首次执行效果图:

    第二次便从缓存中读取:

  • 相关阅读:
    vue(5)
    vue(4)
    vue(3)-防止闪烁
    vue(2)
    bootstrap 模态框
    2017年上半年工作总结和计划
    vue(1)
    文本框数量加减功能
    meta 控制移动端页面的缩放
    题解 P1550 【[USACO08OCT]打井Watering Hole】
  • 原文地址:https://www.cnblogs.com/tearer/p/1786364.html
Copyright © 2011-2022 走看看