.NET中MemCached使用介绍
阅读目录
1.MemCached是什么?
2.Window中MemCached安装
3.MemCached命令
4.简单示例
MemCached是什么
MemCached是一个自由开源,高性能,分布式内存对象缓存系统。Memcached是以LiveJournal旗下Danga Interactive公司的Brad Fitzpatric为首开发的一款软件。现在已成为mixi、hatena、Facebook、Vox、LiveJournal等众多服务中提高Web应用扩展性的重要因素。
MemCached是一种基于内存的key-value存储,用来存储小块的任意数据。实现原理就是,第一次从数据库获取到结果之后,同时将结果保存在内存中,从而简单对数据库的访问次数,以提高Web应用的速度。
Memcached 官网:http://memcached.org/。
Window中MemCached安装
下载地址:http://pan.baidu.com/s/1yVILw 提取密码:5gx9
下载完成后
1、打开SetupFile安装文件夹。
2、以管理员身份打开cmd,输入以下命令
3、安装成功之后,要去服务中启动memcached服务。
MemCached命令
MemCached中有很多命令,大概可分为增加、更新、获取和删除缓存数据,下面简单介绍几种常用的命令;
Set
用于将value(数据值)存储到指定的key(键)中。
如果set的key已经存在,该命令会更新该key所对应的原来的数据,也就是实现了更新的作用。
Add
用于将value(数据值)存储到指定的key(键)中。
如果 Add 的 key 已经存在,则不会更新数据,之前的值将仍然保持相同,并且您将获得响应 NOT_STORED。
Get
Get命令获取存储在 key(键) 中的 value(数据值) ,如果 key 不存在,则返回空。
Delete
用于删除已存在的 key(键)。
flush_all
flush_all 命令用于清理缓存中的所有 key=>value(键=>值) 对。
该命令提供了一个可选参数 time,用于在制定的时间后执行清理缓存操作。
简单示例
新建一个控制台程序,从下载的目录中添加ICSharpCode.SharpZipLib.dll,log4net.dll,Memcached.ClientLibrary.dll三个组件,新建一个MemCached管理类,具体代码如下:
/// <summary> /// 分布式缓存的MemCached管理器 /// </summary> public class MemCachedManager { public static MemcachedClient cache; static MemCachedManager() { string[] servers = { "172.20.61.195:11211" }; //初始化池 SockIOPool pool = SockIOPool.GetInstance(); //设置服务器列表 pool.SetServers(servers); //设置各服务之间负责均衡的权重 pool.SetWeights(new int[] { 1 }); //初始化时创建连接数 pool.InitConnections = 3; //最小连接数 pool.MinConnections = 3; //最大连接数 pool.MaxConnections = 5; //连接的最大空闲时间,下面设置为6个小时(单位为ms),超过这个设置时间,连接会被释放 pool.MaxIdle = 1000 * 60 * 60 * 6; //socket连接的超时时间,为0表示永不超时,即一直保持连接状态 pool.SocketConnectTimeout = 0; //通讯的超时时间,下面设置为3秒,.net版本没有实现 pool.SocketTimeout = 1000 * 3; //维护线程的间隔激活时间,下面设置为30秒(单位s),设置为0时表示不启用维护线程 pool.MaintenanceSleep = 30; //设置SocketIO池的故障标志 pool.Failover = true; //是否对TCP/IP通讯使用nalgle算法,.net版本没有实现 pool.Nagle = false; //socket单次任务的最大时间(单位ms),超过这个时间socket会被强行中断,当前任务失败 pool.MaxBusy = 1000 * 10; pool.Initialize(); cache = new MemcachedClient(); //是否启用压缩数据:如果启用了压缩,数据压缩长于门槛的数据将被储存在压缩的形式 cache.EnableCompression = false; } }
其中IP是本机地址,端口是固定的,如果有多台服务器用于缓存,在数组列出对应的IP即可。
测试代码:
public static void TestMethod() { //清除所有的缓存数据 MemCachedManager.cache.FlushAll(); var v1 = MemCachedManager.cache.Add("a", "123"); var res1 = MemCachedManager.cache.Get("a"); Console.WriteLine("第一次Add返回值{0},结果{1}", v1, res1); var v2 = MemCachedManager.cache.Add("a", "456"); var res2 = MemCachedManager.cache.Get("a"); Console.WriteLine("第二次Add返回值{0},结果{1}", v2, res2); var v3 = MemCachedManager.cache.Set("a", "789"); var res3 = MemCachedManager.cache.Get("a"); Console.WriteLine("Set返回值{0},结果{0}", res3); var v4 = MemCachedManager.cache.Replace("a", "123"); var res4 = MemCachedManager.cache.Get("a"); Console.WriteLine("replace返回值{0},结果{0}", res4); var v5 = MemCachedManager.cache.Replace("b", "123"); Console.WriteLine("replace返回值{0}", v5); MemCachedManager.cache.Set("b","456"); MemCachedManager.cache.Delete("b"); var v6= MemCachedManager.cache.KeyExists("b"); Console.WriteLine("Delete之后返回值{0}", v6); } }
运行结果: