Memcached在windows下的基本使用

1、Memcached是什么

  Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。

2、Memcached集群原理

  Memcache是通过客户端驱动实现集群。Redis、MongoDb是通过服务器端实现集群初始化驱动的时候开业给定一个集合:memcache服务器所在的机器ip和端口。

  Memcache 在添加一个键值对时,

  第一步:把key做一个哈希运算

  第二步:根据哈希值对服务器个数取余。根据取余结果,把数据放到对应机器上去

  Memcache 在获取一个键值对时,

  第一步:根据key做一个哈希运算

  第二步:根据哈希值对服务器个数取余。根据取余结果,从相应服务器上取数据

3、Memcached的优缺点

  (1)       不能作为持久化存储

  (2)       存储数据有限制:最大1M

  (3)       Memcache存储数据只能key-value

  (4)       集群数据没有复制和同步机制

  (5)       内存回收不及时。LRU:未使用内存》过期内存》最近最少使用内存,是一个惰性删除

4、Memcached的安装与卸载

  推荐这篇文章,比较详细的介绍了安装与卸载

  http://blog.csdn.net/zhaotengfei36520/article/details/41315329

  安装成功运行后,可以在服务那里看到Memcached服务正在运行

 

5、C#中Memcached的使用

  通过Nuget安装 EnyimMemcached 

  新建一个MemcacheHelper类

  

public class MemcacheHelper
    {
        public MemcachedClient mc = MemCached.getInstance();
        /// <summary>
        /// 添加缓存
        /// </summary>
        /// <param name="key"></param>
        /// <param name="value"></param>
        /// <returns></returns>
        public bool AddCache(string key, object value)
        {
            return mc.Store(StoreMode.Add, key, value);
        }
        /// <summary>
        /// 添加缓存,并指定过期时间
        /// </summary>
        /// <param name="key"></param>
        /// <param name="value"></param>
        /// <param name="exp"></param>
        /// <returns></returns>
        public bool AddCache(string key, object value, DateTime exp)
        {
            return mc.Store(Enyim.Caching.Memcached.StoreMode.Add, key, value, exp);
        }
        /// <summary>
        /// 修改缓存
        /// </summary>
        /// <param name="key"></param>
        /// <param name="value"></param>
        /// <returns></returns>
        public bool SetCache(string key, object value)
        {
            return mc.Store(Enyim.Caching.Memcached.StoreMode.Set, key, value);
        }
        /// <summary>
        /// 修改缓存并指定过期时间
        /// </summary>
        /// <param name="key"></param>
        /// <param name="value"></param>
        /// <param name="exp"></param>
        /// <returns></returns>
        public bool SetCache(string key, object value, DateTime exp)
        {
            return mc.Store(Enyim.Caching.Memcached.StoreMode.Set, key, value, exp);
        }
        /// <summary>
        /// 通过键获取缓存
        /// </summary>
        /// <param name="key"></param>
        /// <returns></returns>
        public object GetCache(string key)
        {
            return mc.Get(key);
        }
        public T GetCache<T>(string key)
        {
            return mc.Get<T>(key);
        }
        /// <summary>
        /// 通过键删除缓存
        /// </summary>
        /// <param name="key"></param>
        /// <returns></returns>
        public bool DeleteCache(string key)
        {
            return mc.Remove(key);
        }
    }

 

  通过单例模式获取Memcached客户端对象

public sealed class MemCached
    {
        private static MemcachedClient MemClient { get; set; }
        static readonly object padlock = new object();
        //线程安全的单例模式  
        public static MemcachedClient getInstance()
        {
            if (MemClient == null)
            {
                lock (padlock)
                {
                    if (MemClient == null)
                    {
                        MemClientInit();
                    }
                }
            }
            return MemClient;
        }

        private static void MemClientInit()
        {
            string serverList = "127.0.0.1:11211";
            //初始化缓存  
            MemcachedClientConfiguration memConfig = new MemcachedClientConfiguration();
            memConfig.AddServer(serverList);
            memConfig.Protocol = MemcachedProtocol.Binary;
            //下面请根据实例的最大连接数进行设置  
            memConfig.SocketPool.MinPoolSize = 5;
            memConfig.SocketPool.MaxPoolSize = 200;
            MemClient = new MemcachedClient(memConfig);            
        }
    }

 

   最后测试代码

    

  

 

posted @ 2017-06-21 17:43  不懂代码的攻城师  阅读(475)  评论(0编辑  收藏  举报