位置:海鸟网 > IT > ASP.NET >

原创:.NET版分布式缓存Memcached测试实例

  下面测试下分布式缓存Memcached软件,一直在学习关注大访问量网站的缓存是如何实现,之前看过Memcached的资料,忙于没有时间来真正测试一下,本文测试分布式缓存Memcached的环境如下:(两台电脑作为服务器)

  第一台:

  CPU:Inter(R) Pentium(R) 4 CPU 2.8G

  内存:1G

  系统:windows 7

  IIS: IIS 7

  IP:172.10.1.97

  环境:本地

  安装:memcached 1.2.1 for Win32

  第二台:

  CPU:Inter(R) Pentium(R) 4 CPU 3.0G

  内存:2G

  系统:windows Server 2003

  IIS: IIS 6

  IP:172.10.1.236

  环境:远程

  安装:memcached 1.2.1 for Win32

  测试程序部署到本地环境(172.10.1.97),开发工具VS2008 .NET3.5

  本文使用到memcached 1.2.1 for Win32下载地址:

  

  更多memcached版本大全请进入

  

  好了,下面我们按步骤来测试:

  第一、

  首先到把下载好的memcached 1.2.1解压到C:memcached目录,分别复制到两台服务器中。

  第二、

  安装memcached服务,在命令提示符输入CD c:memcached进入到memcached目录,如下图:

  

  引用Memcached.ClientLibrary.dll图

  第四、

  测试程序:

  C# Code []

  using System;

  using System.Collections;

  using System.Text;

  // 须引用Memcached

  using Memcached.ClientLibrary;

  namespace test

  {

  public partial class _Default : System.Web.UI.Page

  {

  protected void Page_Load(object sender, EventArgs e)

  {

  if (!IsPostBack)

  {

  if (Request["action"] == "clear")

  this.clear();

  else

  this.test();

  }

  }

  /// <summary>

  /// 清空缓存

  /// </summary>

  public void clear()

  {

  string[] servers = { "172.10.1.97:11211", "172.10.1.236:11211" };

  //初始化池

  SockIOPool pool = SockIOPool.GetInstance();

  pool.SetServers(servers);

  pool.InitConnections = 3;

  pool.MinConnections = 3;

  pool.MaxConnections = 5;

  pool.SocketConnectTimeout = 1000;

  pool.SocketTimeout = 3000;

  pool.MaintenanceSleep = 30;

  pool.Failover = true;

  pool.Nagle = false;

  pool.Initialize();

  MemcachedClient mc = new Memcached.ClientLibrary.MemcachedClient();

  mc.EnableCompression = false;

  mc.Delete("cache");

  mc.Delete("endCache");

  Response.Write("清空缓存成功");

  }

  /// <summary>

  /// 测试缓存

  /// </summary>

  public void test()

  {

  //分布Memcachedf服务IP 端口

  string[] servers = { "172.10.1.97:11211","172.10.1.236:11211" };

  //初始化池

  SockIOPool pool = SockIOPool.GetInstance();

  pool.SetServers(servers);

  pool.InitConnections = 3;

  pool.MinConnections = 3;

  pool.MaxConnections = 5;

  pool.SocketConnectTimeout = 1000;

  pool.SocketTimeout = 3000;

  pool.MaintenanceSleep = 30;

  pool.Failover = true;

  pool.Nagle = false;

  pool.Initialize();

  //客户端实例

  MemcachedClient mc = new Memcached.ClientLibrary.MemcachedClient();

  mc.EnableCompression = false;

  StringBuilder sb = new StringBuilder();

  //写入缓存

  sb.AppendLine("写入缓存测试:");

  sb.AppendLine("<br>_______________________________________<br>");

  if (mc.KeyExists("cache"))

  {

  sb.AppendLine("缓存cache已存在");

  }

  else

  {

  mc.Set("cache", "写入缓存时间:" DateTime.Now.ToString());

  sb.AppendLine("缓存已成功写入到cache");

  }

  sb.AppendLine("<br>_______________________________________<br>");

  sb.AppendLine("读取缓存内容如下:<br>");

  sb.AppendLine(mc.Get("cache").ToString());

  //测试缓存过期

  sb.AppendLine("<br>_______________________________________<br>");

  if (mc.KeyExists("endCache"))

  {

  sb.AppendLine("缓存endCache已存在,过期时间为:" mc.Get("endCache").ToString());

  }

  else

  {

  mc.Set("endCache", DateTime.Now.AddMinutes(1).ToString(), DateTime.Now.AddMinutes(1));

  sb.AppendLine("缓存已更新写入到endCache,写入时间:" DateTime.Now.ToString() " 过期时间:" DateTime.Now.AddMinutes(1).ToString());

  }

  //分析缓存状态

  Hashtable ht = mc.Stats();

  sb.AppendLine("<br>_______________________________________<br>");

  sb.AppendLine("Memcached Stats:");

  sb.AppendLine("<br>_______________________________________<br>");

  foreach (DictionaryEntry de in ht)

  {

  Hashtable info = (Hashtable)de.Value;

  foreach (DictionaryEntry de2 in info)

  {

  sb.AppendLine(de2.Key.ToString() ":    " de2.Value.ToString() "<br>");

  }

  }

  Response.Write(sb.ToString());

  }

  }

  }

  第五、

  运行看效果:

  

  缓存效果图

  我在本地172.10.1.97运行memcached -d stop来停止memcached服务,运行上面程序,一样正确,说明缓存也同样保存到远程172.10.1.236这台服务器了。

  这样简单就可以实现分布式缓存,使用缓存又多了一个选择,不必使用.NET自带的Application与cache了,访问量大的网站实现分布式缓存有很多好处。

  有什么问题请指正,下期再出其它教程。

  原文:

  本文版权归学IT网()所有,任何单位与个人转载必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。