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

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

    简单测试就完成。

  • 相关阅读:
    Pwn-level0
    Pwn-level2
    【php】php从多个数组中取出最大的值
    【算法】php计算数字k在一段数字范围出现的次数
    【算法】php计算出丑数
    【php】php常用函数代码封装(一)数组篇
    【Golang】go语言设计模式
    什么是RPC
    【php】 php获取文件路径中的文件名和文件后缀方法
    【php】php目录路径函数系列
  • 原文地址:https://www.cnblogs.com/wzxiang/p/4498777.html
Copyright © 2020-2023  润新知