.net 下分布式缓存(Memcached)实现
准备给一个查询非常平凡的数据加上缓存,综合多种考虑,考虑使用Memcached
Memcached是什么?
Memcached是高性能的,分布式的内存对象缓存,用于动态应用中可减少数据库负载,提升访问速度。
Mencached能缓存什么?
通过在内存里维护一个统一的巨大的hash表,Memcached能缓存各种格式的数据。如:图像、视频、文本以及数据库检索的结果等。
1、服务器端安装方法:
安装Memcached for win64
网络上的地址很多,下载后,在CMD里运行文件夹里的安装程序
memcached.exe -d intall //安装
memcached.exe -d start //开机启动
2、客户端下载地址:
下载文件:https://sourceforge.net/projects/memcacheddotnet/
3、应用:
简单测试一下:
首先封装一个简单工具类
namespace JiKeComponent { /// <summary> /// 分布式缓存 简单使用类 /// by wzx at 2015-05-12 /// </summary> public class MemCachedHelper { private const string poolName = "JKCACHE"; private static MemcachedClient mc; private static MemCachedHelper _instance = null; public static MemCachedHelper Instance { get { if (_instance == null) { _instance = new MemCachedHelper(); } return _instance; } } private MemCachedHelper() { string[] serverList = { "127.0.0.1:11211" }; SockIOPool pool = SockIOPool.GetInstance(poolName); pool.SetServers(serverList); pool.InitConnections = 3;//初始连接数 pool.MinConnections = 3;//最小连接数 pool.MaxConnections = 5;//最大连接数 pool.SocketConnectTimeout = 1000;//设置连接的套接字超时 pool.SocketTimeout = 3000;//设置套接字超时读取 pool.MaintenanceSleep = 30;//设置维护线程运行的睡眠时间。如果设置为0,那么维护线程将不会启动,30就是每隔30秒醒来一次 //获取或设置池的故障标志。 //如果这个标志被设置为true则socket连接失败,将试图从另一台服务器返回一个套接字如果存在的话。 //如果设置为false,则得到一个套接字如果存在的话。否则返回NULL,如果它无法连接到请求的服务器。 pool.Failover = true; pool.Nagle = false;//如果为false,对所有创建的套接字关闭Nagle的算法 pool.Initialize(); mc = new MemcachedClient(); mc.PoolName = poolName; mc.EnableCompression = false; } /// <summary> /// 向Memcached缓存中添加一条数据 /// </summary> /// <param name="key">键</param> /// <param name="value">值</param> /// <param name="expiry">过期时间</param> /// <returns>返回是否添加成功</returns> public bool SetValue(string key, object value, DateTime expiry) { return mc.Set(key, value, expiry); } /// <summary> /// 通过key 来得到一个对象 /// </summary> /// <param name="key">键</param> /// <returns>对象</returns> public object GetValue(string key) { return mc.Get(key); } /// <summary> /// 移除缓存中对象 /// </summary> /// <param name="key">键</param> /// <returns>返回是否移除成功</returns> public bool DelValue(string key) { return mc.Delete(key); } } }
B/S测试结果:
C/S 继续测试:
客户端代码实在是简单的不行,就不贴了。
简单测试就完成。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。