最近公司在做项目的时候,提到了缓存的概念,由于以前的项目用户的人数很少,所以有写看不出来,但是这个 项目的使用,是有很多人的,那么我们就应该考虑缓存了! 缓存,故名思意,就是可以临时存放东西的地方。因为缓存是内存,所以它的的读写速度,会是很快的!但是上网上查了查资料,有很多的方式,例如有Nginx,Squid,Memcached ,Reedis,eAccelerator ,但是选择哪一种呢!最后经过查资料,我们决定使用Memcached。
Memcached是高性能的,分布式的内存对象缓存系统,用于在动态应用中减少数据库负载,提升访问速度。Memcached由Danga Interactive开发,用于提升LiveJournal.com访问速度的。LJ每秒动态页面访问量几千次,用户700万。Memcached将数据库负载大幅度降低,更好的分配资源,更快速访问。但是为什么不选用比较火的Redis呢,由于Redis只使用单核,而Memcached可以使用多核,所以二者比较起来,平均每一个核上,Redis在存储小数据时比Memcached性能更高。而在100k以上的数据中,Memcached性能要高于Redis。虽然Redis最近也在存储大数据的性能上进行优化,但是比起Memcached,还是稍有逊色。说了这么多,结论是,无论你使用哪一个,每秒处理请求的次数都不会成为瓶颈。
1. 简单Key/Value存储(每条记录包括一个key、一个原生value值、一个过期时间、一个可选的flag),并且不关心Value的类型,可以存放任意数据类型;
2. 逻辑分别放在客户端与服务器端;
3. 服务器端彼此无感知;
4 . 所有操作时间复杂度为O(1);
5. 到期数据自动过期,释放出内存为其它应用使用。
1.下载memcache的windows稳定版,解压放某个盘下面,比如在c:\memcached
2. 在cmd下输入 c:\memcached\memcached.exe -d install 安装(如果你对此有所怀疑的话,请不要怀疑,真的安装完成了!)
3.再输入: c:\memcached\memcached.exe -dstart 启动。
4.在windows控制台中用telnet127.0.0.1 11211这样的命令连接上memcache,然后直接输入stats就可以得到当前memcache的状态。
首先我们要建立一个项目,然后添加以下四个DLL的引用
然后我们就可以在项目中使用了,我建立了一个mvc 的项目,一下的例子为在mvc 中的应用!
usingMemcached.ClientLibrary; using System; usingSystem.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespacememcachedDemo.Controllers { public class HomeController : Controller { public void Memcache() { string[] serverlist = { "127.0.0.1:11211", "127.0.0.1:11211" }; //初始化池 SockIOPool pool = SockIOPool.GetInstance(); pool.SetServers(serverlist); //设置memcached的一些参数 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 MemcachedClient(); mc.EnableCompression = false; Console.WriteLine("------------测 试-----------"); mc.Set("test", "my value"); //存储数据到缓存服务器,这里将字符串"my value"缓存,key 是"test" if (mc.KeyExists("test")) //测试缓存存在key为test的项目 { Console.WriteLine("test isExists"); Console.WriteLine(mc.Get("test").ToString()); //在缓存中获取key为test的项目 } else { Console.WriteLine("test notExists"); } //Console.ReadLine(); mc.Delete("test"); //移除缓存中key为test的项目 if (mc.KeyExists("test")) { Console.WriteLine("test isExists"); Console.WriteLine(mc.Get("test").ToString()); } else { Console.WriteLine("test notExists"); } SockIOPool.GetInstance().Shutdown(); //关闭池,关闭sockets Console.ReadLine(); }
Memcached的方法也很少,所以学习起来,真的很简单,下一篇将为大家介绍一下Redis。