缓存之Memcached

来源:互联网 发布:java编程手册 pdf 编辑:程序博客网 时间:2024/05/07 22:31

          Memcache 的简单介绍

         最近公司在做项目的时候,提到了缓存的概念,由于以前的项目用户的人数很少,所以有写看不出来,但是这个 项目的使用,是有很多人的,那么我们就应该考虑缓存了! 缓存,故名思意,就是可以临时存放东西的地方。因为缓存是内存,所以它的的读写速度,会是很快的!但是上网上查了查资料,有很多的方式,例如有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,还是稍有逊色。说了这么多,结论是,无论你使用哪一个,每秒处理请求的次数都不会成为瓶颈。

        MemCached的设计理念

        1. 简单Key/Value存储(每条记录包括一个key、一个原生value值、一个过期时间、一个可选的flag),并且不关心Value的类型,可以存放任意数据类型;
        2. 逻辑分别放在客户端与服务器端;
        3. 服务器端彼此无感知;
        4 . 所有操作时间复杂度为O(1);
        5. 到期数据自动过期,释放出内存为其它应用使用。

memcached的安装

         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的状态。

         

       Memcached的使用

       首先我们要建立一个项目,然后添加以下四个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。

0 0
原创粉丝点击