Memcached是一个高性能的不是内存对象缓存系统,用于动态Web应用以减轻数据库负载.Memcached基于一个存储键/值对的HashMap.其客户端可以使用任何语言进行编写,并通过Memcached协议与进行通信
Memcached默认的端口是11211
2 新建测试项目,并且使用Memcached客户端实现缓存
<sectionGroup name="enyim.com"> <section name="log" type="Enyim.Caching.Configuration.LoggerSection, Enyim.Caching" /> <section name="memcached" type="Enyim.Caching.Configuration.MemcachedClientSection, Enyim.Caching" /> </sectionGroup> <enyim.com> <log factory="Enyim.Caching.Log4NetFactory, Enyim.Caching.Log4NetAdapter" /> <memcached> <servers> <add address="192.168.14.172" port="11211" /> <add address="192.168.14.251" port="11211" /> </servers> </memcached> </enyim.com>View Code
Student luge = new Student() { UserId = 1, UserName = "luge" }; var lugeByCache = client.Get<Student>("luge"); if (lugeByCache == null) { client.Store(StoreMode.Add, "luge", luge); } Student pigeon = new Student() { UserId = 2, UserName = "pigeon" }; var pigeonByCache = client.Get<Student>("pigeon"); if (pigeonByCache == null) { client.Store(StoreMode.Add, "pigeon", pigeon); }View Code
分别可以通过telnet 192.168.14.17 11211(默认端口) /telnet 192.168.14.251 11211 键入stats可以查看当前Memcached的版本以及配置信息
对于telnet 未启用的,可以在控制面板--> 程序与功能-->打开与关闭Window功能-->勾取telnet 客户端
分别监听两个服务器中缓存的值,分别键入:get luge; get pigeon;会显示出各自缓存的值
这样一个分布式缓存的例子已经完成.
3 同步Session信息
笔者使用MemcachedProviders(是对EnyimMemcached进行封装,提供客户端执行的Asp.net 站点中的Session同步),其原理是使用EnyimMemcached进行重写了SessionStateStoreProviderBase,使用是只需要在System.Web标签下使用自定义的Session配置项,即可完成替换原有的Session内容
<sessionState cookieless="false" regenerateExpiredSessionId="true" mode="Custom" timeout="1" customProvider="MemcachedSessionProvider"> <providers> <add name="MemcachedSessionProvider" type="MemcachedProviders.Session.SessionStateProvider,MemcachedProviders" connectionStringName="ApplicationServices" dbType="none" writeExceptionsToEventLog="false" /> </providers> </sessionState>View Code
之后使用,跟Asp.Net使用Session一样:Session["UserName"]=luge;测试结果如下:
4 参考
http://www.cnblogs.com/luminji/archive/2011/08/17/2143371.html
http://www.cnblogs.com/edisonchou/p/3855517.html