memcached 配置及使用

1、配置

    <!--memcached 配置-->
    <add key="MemcachedServerlist" value="127.0.0.1:11211"/>
    <add key="InitConnections" value="3"/>
    <add key="MinConnections" value="3"/>
    <add key="MaxConnections" value="5"/>
    <add key="SocketConnectTimeout" value="1000"/>
    <add key="SocketTimeout" value="3000"/>
    <add key="MaintenanceSleep" value="30"/>
    <add key="Failover" value="true"/>
    <add key="Nagle" value="false"/>
    <add key="CacheTimeout" value="10"/>

 

2、memcached 管理类

 

/*
 * Memcache管理类
 * author:domo
 * date:2012-04-17
 
*/

#region 引用

using System;
using System.Configuration;
using Memcached.ClientLibrary;

#endregion

namespace bases.cache
{
    /// <summary>
    
/// Memcache管理类
    
/// </summary>
    public class MemcacheManager
    {
        /// <summary>
        
/// 定义Memcache客户端
        
/// </summary>
        internal MemcachedClient Mc = new MemcachedClient { EnableCompression = false };

        /// <summary>
        
/// 构造 初始化参数
        
/// </summary>
        public MemcacheManager()
        {
            var serverlist = ConfigurationManager.AppSettings["MemcachedServerlist"].Split(',');
            var initConnections = ConfigurationManager.AppSettings["InitConnections"];
            var minConnections = ConfigurationManager.AppSettings["MinConnections"];
            var maxConnections = ConfigurationManager.AppSettings["MaxConnections"];
            var socketConnectTimeout = ConfigurationManager.AppSettings["SocketConnectTimeout"];
            var socketTimeout = ConfigurationManager.AppSettings["SocketTimeout"];
            var maintenanceSleep = ConfigurationManager.AppSettings["MaintenanceSleep"];
            var failover = ConfigurationManager.AppSettings["Failover"];
            var nagle = ConfigurationManager.AppSettings["Nagle"];

            var pool = SockIOPool.GetInstance();

            pool.SetServers(serverlist);

            pool.InitConnections = Convert.ToInt32(initConnections);
            pool.MinConnections = Convert.ToInt32(minConnections);
            pool.MaxConnections = Convert.ToInt32(maxConnections);

            pool.SocketConnectTimeout = Convert.ToInt32(socketConnectTimeout);
            pool.SocketTimeout = Convert.ToInt32(socketTimeout);

            pool.MaintenanceSleep = Convert.ToInt64(maintenanceSleep);
            pool.Failover = Convert.ToBoolean(failover);

            pool.Nagle = Convert.ToBoolean(nagle);
            pool.Initialize();
        }

        /// <summary>
        
/// 添加cache
        
/// </summary>
        
/// <param name="key"></param>
        
/// <param name="value"></param>
        public void Add(string key, object value)
        {
            var cacheTimeout = ConfigurationManager.AppSettings["CacheTimeout"];

            if (!Mc.KeyExists(key))
                Mc.Set(key, value, DateTime.Now.AddMinutes(Convert.ToDouble(cacheTimeout)));
        }

        /// <summary>
        
/// 移除某个cache
        
/// </summary>
        
/// <param name="key"></param>
        public void Delete(string key)
        {
            Mc.Delete(key);
        }

        /// <summary>
        
/// 获取某个cache的值
        
/// </summary>
        
/// <param name="key"></param>
        
/// <returns></returns>
        public object GetValue(string key)
        {
            return Mc.KeyExists(key) ? Mc.Get(key) : null;
        }

        /// <summary>
        
/// 清空所有所有cache
        
/// </summary>
        public void Flush()
        {
            Mc.FlushAll();
        }

        /// <summary>
        
/// 关闭sockets
        
/// </summary>
        public void Shutdown()
        {
            SockIOPool.GetInstance().Shutdown();
        }
    }
}

 3、使用

 

                MemcacheManager memcacheManager = new MemcacheManager();

                if (memcacheManager.GetValue("test") == null)
                    memcacheManager.Add("test","my value");
posted @ 2012-04-17 15:28  domo  阅读(425)  评论(0编辑  收藏  举报