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); } }
最后测试代码