.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 继续测试:

客户端代码实在是简单的不行,就不贴了。

简单测试就完成。

原文地址:https://www.cnblogs.com/wzxiang/p/4498777.html