zoukankan      html  css  js  c++  java
  • memcached 的 SockIOPool 概念

    池的概念

    SockIOPool

    首先来看下属性

      1. SockIOPool属性 
        boolean initialized = false – 初始化是否完成的标志,只有初始化完成后上层才能正常使用池 
        int initConn = 10 – 初始化时对每个服务器建立的连接数目 
        int minConn = 5 – 每个服务器建立最小的连接数,当自查线程发现与某个服务器建立连接数目小于这个数目时 
        会弥补剩下的连接 
        int maxConn = 100 -每个服务器建立最大的连接数,当自查线程发现与某个服务器建立连接数目大于这个数目 
        时就会逐个检查这些连接的空闲时间是否大于maxConn,如果大于会关闭这些连接,直到连接数等于maxConn 
        long maxIdle = 1000 * 60 * 5 – 最大空闲时间 
        long maxBusyTime = 1000 * 30 – 最长租用时间,其使用主要有两点,一是自查线程会检查正在被租用的连接, 
        如果发现已经被租用的时间超过这个值得,会将其从被租用的记录里剔除,并关闭这个连接;另一个应用是 
        上层进行MUTIL操作时,读取所有的数据的时间不能超过这个时间。 
        long maintSleep = 1000 * 30 – 自查线程周期进行工作,其每次休眠时间 
        int socketTO = 1000 * 3 – Socket阻塞读取数据的超时时间 
        int socketConnectTO = 1000 * 3 - Socket阻塞建立连接的等待时间 
        boolean aliveCheck = false -根据key&hashCode获取SockIO时,通过hash bucket得到SockIO后,如果这个值 
        是true会检查Socket是否已经连接,如果连接建立正常还会想服务器发送“version ”的指令,并读取数据,这 
        个过程没有出错才会返回SockIO给上层用,否则返回NULL。所以一般设置为false。 
        boolean nagle = false – Socket的参数,如果是true在写数据时不缓冲,立即发送出去 
        int hashingAlg = NATIVE_HASH – 池的hash bucket方式,主要是分为简单的hashCode取hash bucket数目的模 
        和一致性哈希,前者在扩容时会造成命中率很大程度的下降,后者的好处是扩容时很大程度减少了缓存的重新 
        分布 
        String[] servers – memcached服务器地址配置 
        Integer[] weights – memcached服务器权重配置 
        List buckets - hash bucket,一个服务器地址,其权重是N,则往这个bucket中添加N个服务器地址 
        TreeMap
      2. 其次就是在自己的本地安装一个 memcached
      3. 建立  MemcacheHelper.cs类

        public class MemcacheHelper
        {
        private readonly static MemcachedClient mc = null;
        static MemcacheHelper()
        {
        string[] serverlist = { "填写装了服务IP地址1", "10.0.0.132:11211" };//有几个写几个

        //初始化池
        SockIOPool pool = SockIOPool.GetInstance();
        pool.SetServers(serverlist);

        pool.InitConnections = 3;
        pool.MinConnections = 3;
        pool.MaxConnections = 5;

        pool.SocketConnectTimeout = 1000;
        pool.SocketTimeout = 3000;

        pool.MaintenanceSleep = 30;
        pool.Failover = true;

        pool.Nagle = false;
        pool.Initialize();

        // 获得客户端实例
        mc = new MemcachedClient();
        mc.EnableCompression = false;
        }
        /// <summary>
        /// 向Memcache中添加数据
        /// </summary>
        /// <param name="key"></param>
        /// <param name="value"></param>
        public static bool Set(string key, object value)
        {
        return mc.Set(key, value);
        }
        public static bool Set(string key, object value,DateTime time)
        {
        return mc.Set(key, value,time);
        }
        /// <summary>
        /// 获取数据
        /// </summary>
        /// <param name="key"></param>
        /// <returns></returns>
        public static object Get(string key)
        {
        return mc.Get(key);
        }
        /// <summary>
        /// 删除
        /// </summary>
        /// <param name="key"></param>
        public static bool Delete(string key)
        {
        if (mc.KeyExists(key))
        {
        return mc.Delete(key);
        }
        return false;
        }
        }

      4. 现在就可以调用这个方法了。主要就是一个池的概念。 
        1. string sessionId = Guid.NewGuid().ToString();//必须保证Memcache的key唯一
          Common.MemcacheHelper.Set(sessionId,数据, DateTime.Now.AddMinutes(20));//向Memcache中添加登录用户数据.
          Response.Cookies["sessionId"].Value = sessionId;//将自创的SessionId以Cookie的形式返回给浏览器。

  • 相关阅读:
    Python中os与sys两模块的区别
    单线程爬取图片
    linux下glances服务器监控工具
    python中的join()函数的用法
    python的exec、eval详解
    mongodb启动不了解决方法
    生产者和消费者(.net实现)
    IOS开发--第一阶段--导行(1)(基本概念)
    12.26 linux基本操作指令
    12.25
  • 原文地址:https://www.cnblogs.com/jixinyu12345/p/8213565.html
Copyright © 2011-2022 走看看