secce 发表于 2015-8-31 13:27:47

.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 }  首次执行效果图:

  第二次便从缓存中读取:
页: [1]
查看完整版本: .NET分布式缓存Memcached测试体验