分布式缓存方案:Memcached初探
.net 框架中为我们提供了一个Cache对象用来处理系统缓存,Cache对象使用起来非常方便,相信大家对Cache对象应该不会陌生。然而Cache对象缓存的对象存放本机的内存,这样便限制了我们缓存对象的大小和数量。
在这篇文章中我主要想介绍一个开源项目:memcached(一个提供分布式缓存策略的项目)
Memcached在一些大型java与PHP项目中有较广泛的应用(例如FaceBook)。通过memcached建立一个可管理的且相对独立的缓存层,减少应用程序与数据库之间的频繁访问。这正是memcached的魅力所在。
本文不讨论memcached的内部实现机制。主要是讲述一下memcached的具体使用方法(更具体一点应该是memcached在。Net下使用)。
Memcached的使用主要分两部分:memcached服务器端架设与memcached客户端调用。
下面分别讲述一下具体操作。
memcached服务器端架设:我们从网上下载memcached的WIN32服务端安装包。本文中用的是memcached-1.2.1-win32版。
我们解压文件到一个目录memcached。然后打开命令行窗口,用dos命令跳转到memcached目录下,执行如下命令:
C:"memcached>memcached.exe -d install
C:"memcached>memcached.exe -d start
-d参数是开启守护进程。默认开启的是本机的11211端口
其他参数可以用-h查看。
这样我们的服务器端就架好了,很容易。
卸载的命令为:
C:"memcached>memcached.exe -d stop
C:"memcached>memcached.exe -d uninstall
memcached客户端调用:我们也从网上下载memcached的.net(C#)的客户端API包,
本文用的是memcacheddotnet_clientlib-1.1.5.zip版本。
注意:一个客户端可以调用多个memcached服务端。(也就是说一个项目可以架多个memcached服务端)当然这些memcached服务端应该在不同的服务器上,,不然没有任何意义。
下面用一个实例来讲解如何使用memcached的ClientAPI.
新建一个WEBSITE项目。
我们要在项目中引入Commons.dll; ICSharpCode.SharpZipLib.dll; Memcached.ClientLibrary.dll
在default.aspx.cs的代码如下:
Code
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using Memcached.ClientLibrary;
namespace Memcachled
{
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
string[] serverlist = { "127.0.0.1:11211" }; //服务器列表,可多个
SockIOPool pool = SockIOPool.GetInstance();
/**/////根据实际情况修改下面参数
pool.SetServers(serverlist);
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(); // initialize the pool for memcache servers
MemcachedClient mc = new MemcachedClient();//初始化一个客户端
mc.EnableCompression = false;
mc.Add("TestAdd", "增加的数据");//增加一个缓存数据
Response.Write("增加了一个缓存数据:"+"KEY:TestAdd "+ " VALUE:"+mc.Get("TestAdd").ToString());//取出刚才加入的缓存数据
Response.Write("<br />");
mc.Set("TestAdd", "修改了数据");
Response.Write("修改一个缓存数据:" + "KEY:TestAdd " + " VALUE:" + mc.Get("TestAdd").ToString());
Response.Write("<br />");
mc.Delete("TestAdd");//删除一个已存在的缓存
SockIOPool.GetInstance().Shutdown();//关闭
}
}
}
结果我就不贴出来了。
文中的 memcacheddotnet_clientlib-1.1.5.zip与memcached-1.2.1-win32.zip我明天整理下再发上来。很晚啦~.
写的匆忙,有不对之处,还望见谅!
页:
[1]