缓存之Memcached

          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。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。