• C#实现Memcached分布式缓存,指定服务器保存变量


    说明:Memcached 分为服务器端和客户端, 客户端有多种实现方式,我这里是选择了这个版本 http://sourceforge.net/projects/memcacheddotnet/?source=dlp

    第 1 步: 配置环境

    1.下载服务器memcached for win32安装。http://www.splinedancer.com/memcached-win32/,www.splinedancer.com/memcached-win32/memcached-1.2.4-Win32-Preview-20080309_bin.zip

      我在源码文件  服务器设置  里面附带了memcached.exe,把memcached.exe这个文件拷贝到C盘新建 文件夹 C:\memcached-1.2.6

    2.用管理员方式开口cmd命令窗口 输入: cd C:\memcached-1.2.6 然后输入memcached.exe -d install 就可以把memcached安装为windows服务了。

    3.启动服务后,memcached服务默认占用的端口是11211,占用的最大内存默认是64M。

    4.可以自己修改端口号,但是需要修改注册表

    打开注册表,找到:
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\memcached Server
    其中的ImagePath项的值为:"c:\memcached-1.2.6\memcached.exe" -d runservice

    改成:"c:\memcached-1.2.6\memcached.exe" -p 12345 -m 1024 -d runservice
    表示可以 缓存 1G数据。端口 12345

    第 2 步: 打开Visual Studio 2010  ,新建项目www.memcached.com,这步我就省略了。

    第 3步:  添加缓存帮组文件

    using System;
    using System.Web;
    using System.Linq;
    using System.Collections;
    using System.Collections.Specialized;
    using System.Collections.Generic;
    using System.Configuration;
    using Memcached.ClientLibrary;
    namespace www.memcached.com
    {
        /// <summary>
        /// 页 面 名:缓存管理类<br/>
        /// 说    明:设置、获取、移除Cache<br/>
        /// 作    者:xxx<br/>
        /// 时    间:2012-12-12(神奇的数字,传说中的12K)<br/>
        /// 修 改 者:<br/>
        /// 修改时间:<br/>
        /// </summary>
        public class CacheHelper
        {
            #region 变量和构造函数
            //缓存服务器地址和端口,这样就实现了分布式缓存。服务器可以多个,用Socket读写数据"127.0.0.1:12345",
            private static Dictionary<string, string> Servers = new Dictionary<string, string>();
            static MemcachedClient mc = null;
            //服务器缓存
            static Dictionary<string, SockIOPool> Servers1 = new Dictionary<string, SockIOPool>();
            static object LOCK_OBJECT = new object();//安全锁定
            /// <summary>
            /// 静态构造函数
            /// </summary>
            static CacheHelper()
            {
                InitServer();
                List<string> keys = Servers.Keys.ToList<string>();
                foreach (var k in Servers.Keys)
                {
                    SockIOPool pool = SockIOPool.GetInstance(k);
                    string[] s = new string[] { Servers[k] };
                    pool.SetServers(s);//设置服务器
                    pool.MaxConnections = 10000;
                    pool.MinConnections = 10;
                    pool.SocketConnectTimeout = 1000;
                    pool.SocketTimeout = 100;
                    pool.Initialize();//初始化缓存线程池
                }
                //默认池
                List<string> defaultServerList=new  List<string>();
                foreach (var k in Servers.Keys) defaultServerList.Add(Servers[k]);
                SockIOPool defaultPool = SockIOPool.GetInstance("DefaultPool");
                defaultPool.SetServers(defaultServerList.ToArray());//设置服务器
                defaultPool.MaxConnections = 10000;
                defaultPool.MinConnections = 10;
                defaultPool.SocketConnectTimeout = 1000;
                defaultPool.SocketTimeout = 100;
                defaultPool.Initialize(); //初始化默认线程池
                mc = new MemcachedClient(); 
                mc.PoolName = "DefaultPool";
            }
            /// <summary>
            /// 初始化服务器列表,这里默认两台服务器. 
            /// </summary>
            static void InitServer(){
                //这里可以写复杂灵活点,动态从配置文件获取,我这里固定了两个
               Servers.Add("Svr1", ConfigurationManager.AppSettings["Svr1"]);
               Servers.Add("Svr2", ConfigurationManager.AppSettings["Svr2"]);
            }
            private CacheHelper() { }
            #endregion
    
            #region 获取客户端
                public static MemcachedClient GetClient(string server)
                {
                    MemcachedClient current = Singleton<MemcachedClient>.Instance;
                    current.PoolName = server;
                    return current;
                }
            #endregion
    
            #region 默认
    
    
                #region 写(Set)
                /// <summary>
                /// 设置数据缓存
                /// </summary>
                /// <param name="key"></param>
                /// <param name="value"></param>
                public static void Set(string key, object value)
                {
                    mc.Set(key, value);
                }
                /// <summary>
                /// 设置数据缓存
                /// </summary>
                /// <param name="key"></param>
                /// <param name="value"></param>
                /// <param name="hashCode">哈希码</param>
                public static void Set(string key, object value, int hashCode)
                {
                    mc.Set(key, value, hashCode);
                }
                /// <summary>
                /// 设置数据缓存
                /// </summary>
                /// <param name="key"></param>
                /// <param name="value"></param>
                /// <param name="expiry">过期时间</param>
                public static void Set(string key, object value, DateTime expiry)
                {
                    mc.Set(key, value, expiry);
                }
                /// <summary>
                /// 设置数据缓存
                /// </summary>
                /// <param name="key"></param>
                /// <param name="value"></param>
                /// <param name="expiry">过期时间</param>
                public static void Set(string key, object value, DateTime expiry, int hashCode)
                {
                    mc.Set(key, value, expiry, hashCode);
                }
                #endregion
    
                #region 读(Get)
    
                #region 返回泛型
                /// <summary>
                /// 读取数据缓存
                /// </summary>
                /// <param name="key"></param>
                public static T Get<T>(string key)
                {
                    return (T)mc.Get(key);
                }
                /// <summary>
                /// 读取数据缓存
                /// </summary>
                /// <param name="key"></param>
                /// <param name="hashCode">哈希码</param>
                public static T Get<T>(string key, int hashCode)
                {
                    return (T)mc.Get(key, hashCode);
                }
                /// <summary>
                /// 读取数据缓存
                /// </summary>
                /// <param name="key"></param>
                /// <param name="asString">是否把值作为字符串返回</param>
                public static T Get<T>(string key, object value, bool asString)
                {
                    return (T)mc.Get(key, value, asString);
                }
                #endregion
    
                /// <summary>
                /// 读取数据缓存
                /// </summary>
                /// <param name="key"></param>
                public static object Get(string key)
                {
                    return mc.Get(key);
                }
                /// <summary>
                /// 读取数据缓存
                /// </summary>
                /// <param name="key"></param>
                /// <param name="hashCode">哈希码</param>
                public static object Get(string key, int hashCode)
                {
                    return mc.Get(key, hashCode);
                }
                /// <summary>
                /// 读取数据缓存
                /// </summary>
                /// <param name="key"></param>
                /// <param name="asString">是否把值作为字符串返回</param>
                public static object Get(string key, object value, bool asString)
                {
                    return mc.Get(key, value, asString);
                }
                #endregion
    
                #region 批量写(Set)
                /// <summary>
                /// 批量设置数据缓存
                /// </summary>
                /// <param name="key"></param>
                /// <param name="value"></param>
                public static void SetMultiple(string[] keys, object[] values)
                {
                    for (int i = 0; i < keys.Length; i++)
                    {
                        mc.Set(keys[i], values[i]);
                    }
                }
                /// <summary>
                /// 批量设置数据缓存
                /// </summary>
                /// <param name="key"></param>
                /// <param name="value"></param>
                /// <param name="hashCode">哈希码</param>
                public static void SetMultiple(string[] keys, object[] values, int[] hashCodes)
                {
                    for (int i = 0; i < keys.Length; i++)
                    {
                        mc.Set(keys[i], values[i], hashCodes[i]);
                    }
                }
                /// <summary>
                /// 批量设置数据缓存
                /// </summary>
                /// <param name="key"></param>
                /// <param name="value"></param>
                /// <param name="expiry">过期时间</param>
                public static void SetMultiple(string[] keys, object[] values, DateTime[] expirys)
                {
                    for (int i = 0; i < keys.Length; i++)
                    {
                        mc.Set(keys[i], values[i], expirys[i]);
                    }
                }
                /// <summary>
                /// 批量设置数据缓存
                /// </summary>
                /// <param name="key"></param>
                /// <param name="value"></param>
                /// <param name="expiry">过期时间</param>
                public static void Set(string[] keys, object[] values, DateTime[] expirys, int[] hashCodes)
                {
                    for (int i = 0; i < keys.Length; i++)
                    {
                        mc.Set(keys[i], values[i], expirys[i], hashCodes[i]);
                    }
                }
                #endregion
    
                #region 批量读取(Multiple),返回哈希表 Hashtable
                /// <summary>
                /// 批量读取数据缓存
                /// </summary>
                /// <param name="keys">键集合</param>
                public static Hashtable GetMultiple(string[] keys)
                {
                    return mc.GetMultiple(keys);
                }
                /// <summary>
                /// 批量读取数据缓存
                /// </summary>
                /// <param name="keys">键集合</param>
                /// <param name="hashCodes">哈希码集合</param>
                public static Hashtable GetMultiple(string[] keys, int[] hashCodes)
                {
                    return mc.GetMultiple(keys, hashCodes);
                }
                /// <summary>
                /// 批量读取数据缓存
                /// </summary>
                /// <param name="keys">键集合</param>
                /// <param name="hashCodes">哈希码集合</param>
                /// <param name="asString">所有值返回字符</param>
                public static Hashtable GetMultiple(string[] keys, int[] hashCodes, bool asString)
                {
                    return mc.GetMultiple(keys, hashCodes, asString);
                }
                #endregion
    
                #region 批量读取(Multiple),返回对象数组object[]
                /// <summary>
                /// 批量读取数据缓存
                /// </summary>
                /// <param name="keys">键集合</param>
                public static object[] GetMultipleArray(string[] keys)
                {
                    return mc.GetMultipleArray(keys);
                }
                /// <summary>
                /// 批量读取数据缓存
                /// </summary>
                /// <param name="keys">键集合</param>
                /// <param name="hashCodes">哈希码集合</param>
                public static object[] GetMultipleArray(string[] keys, int[] hashCodes)
                {
                    return mc.GetMultipleArray(keys, hashCodes);
                }
                /// <summary>
                /// 批量读取数据缓存
                /// </summary>
                /// <param name="keys">键集合</param>
                /// <param name="hashCodes">哈希码集合</param>
                /// <param name="asString">所有值返回字符</param>
                public static object[] GetMultipleArray(string[] keys, int[] hashCodes, bool asString)
                {
                    return mc.GetMultipleArray(keys, hashCodes, asString);
                }
                #endregion
    
                #region 批量读取(Multiple),返回泛型集合List[T]
                /// <summary>
                /// 批量读取数据缓存
                /// </summary>
                /// <param name="keys">键集合</param>
                public static List<T> GetMultipleList<T>(string[] keys)
                {
                    object[] obj = mc.GetMultipleArray(keys);
                    List<T> list = new List<T>();
                    foreach (object o in obj)
                    {
                        list.Add((T)o);
                    }
                    return list;
                }
                /// <summary>
                /// 批量读取数据缓存
                /// </summary>
                /// <param name="keys">键集合</param>
                /// <param name="hashCodes">哈希码集合</param>
                public static List<T> GetMultipleList<T>(string[] keys, int[] hashCodes)
                {
                    object[] obj = mc.GetMultipleArray(keys, hashCodes);
                    List<T> list = new List<T>();
                    foreach (object o in obj)
                    {
                        list.Add((T)o);
                    }
                    return list;
                }
                /// <summary>
                /// 批量读取数据缓存
                /// </summary>
                /// <param name="keys">键集合</param>
                /// <param name="hashCodes">哈希码集合</param>
                /// <param name="asString">所有值返回字符</param>
                public static List<T> GetMultipleList<T>(string[] keys, int[] hashCodes, bool asString)
                {
                    object[] obj = mc.GetMultipleArray(keys, hashCodes, asString);
                    List<T> list = new List<T>();
                    foreach (object o in obj)
                    {
                        list.Add((T)o);
                    }
                    return list;
                }
                #endregion
    
                #region 替换更新(Replace)
                /// <summary>
                /// 替换更新数据缓存
                /// </summary>
                /// <param name="key"></param>
                /// <param name="value"></param>
                public static void Replace(string key, object value)
                {
                    mc.Replace(key, value);
                }
                /// <summary>
                /// 替换更新数据缓存
                /// </summary>
                /// <param name="key"></param>
                /// <param name="value"></param>
                /// <param name="hashCode">哈希码</param>
                public static void Replace(string key, object value, int hashCode)
                {
                    mc.Replace(key, value, hashCode);
                }
                /// <summary>
                /// 替换更新数据缓存
                /// </summary>
                /// <param name="key"></param>
                /// <param name="value"></param>
                /// <param name="expiry">过期时间</param>
                public static void Replace(string key, object value, DateTime expiry)
                {
                    mc.Replace(key, value, expiry);
                }
                /// <summary>
                /// 替换更新数据缓存
                /// </summary>
                /// <param name="key"></param>
                /// <param name="value"></param>
                /// <param name="expiry">过期时间</param>
                public static void Replace(string key, object value, DateTime expiry, int hashCode)
                {
                    mc.Replace(key, value, expiry, hashCode);
                }
                #endregion
    
                #region 删除(Delete)
    
                /// <summary>
                ///删除指定条件缓存
                /// </summary>
                /// <param name="key"></param>
                public static bool Delete(string key)
                {
                    return mc.Delete(key);
                }
                /// <summary>
                /// 删除指定条件缓存
                /// </summary>
                /// <param name="key"></param>
                /// <param name="hashCode">哈希码</param>
                /// <param name="expiry">过期时间</param>
                public static bool Delete(string key, int hashCode, DateTime expiry)
                {
                    return mc.Delete(key, hashCode, expiry);
                }
                /// <summary>
                /// 删除指定条件缓存
                /// </summary>
                /// <param name="key"></param>
                /// <param name="expiry">过期时间</param>
                public static bool Delete(string key, DateTime expiry)
                {
                    return mc.Delete(key, expiry);
                }
    
                /// <summary>
                /// 移除全部缓存
                /// </summary>
                public static void RemovAllCache()
                {
                    mc.FlushAll();
                }
                /// <summary>
                /// 移除全部缓存
                /// </summary>
                /// <param name="list">移除指定服务器缓存</param>
                public static void RemovAllCache(ArrayList list)
                {
                    mc.FlushAll(list);
                }
                #endregion
    
                #region 是否存在(Exists)
                /// <summary>
                /// 判断指定键的缓存是否存在
                /// </summary>
                /// <param name="key"></param>
                /// <returns></returns>
                public static bool IsExists(string key)
                {
                    return mc.KeyExists(key);
                }
                #endregion
    
                #region 数值增减
    
                #region 存储一个数值元素
                /// <summary>
                /// 存储一个数值元素
                /// </summary>
                /// <param name="key"></param>
                /// <returns></returns>
                public static bool StoreCounter(string key, long counter)
                {
                    return mc.StoreCounter(key, counter);
                }
                /// <summary>
                ///  存储一个数值元素
                /// </summary>
                /// <param name="key"></param>
                /// <param name="inc">增长幅度</param>
                /// <param name="hashCode">哈希码</param>
                /// <returns></returns>
                public static bool StoreCounter(string key, long counter, int hashCode)
                {
                    return mc.StoreCounter(key, counter, hashCode);
                }
                #endregion
    
                #region 获取一个数值元素
                /// <summary>
                /// 获取一个数值元素
                /// </summary>
                /// <param name="key"></param>
                /// <returns></returns>
                public static long GetCounter(string key)
                {
                    return mc.GetCounter(key);
                }
                /// <summary>
                ///  获取一个数值元素
                /// </summary>
                /// <param name="key"></param>
                /// <param name="hashCode">哈希码</param>
                /// <returns></returns>
                public static long GetCounter(string key, int hashCode)
                {
                    return mc.GetCounter(key, hashCode);
                }
                #endregion
    
                #region 增加一个数值元素的值(Increment)
                /// <summary>
                /// 将一个数值元素增加。 如果元素的值不是数值类型,将其作为0处理
                /// </summary>
                /// <param name="key"></param>
                /// <returns></returns>
                public static long Increment(string key)
                {
                    return mc.Increment(key);
                }
                /// <summary>
                ///  将一个数值元素增加。 如果元素的值不是数值类型,将其作为0处理
                /// </summary>
                /// <param name="key"></param>
                /// <param name="inc">增长幅度</param>
                /// <returns></returns>
                public static long Increment(string key, long inc)
                {
                    return mc.Increment(key, inc);
                }
                /// <summary>
                ///  将一个数值元素增加。 如果元素的值不是数值类型,将其作为0处理
                /// </summary>
                /// <param name="key"></param>
                /// <param name="inc">增长幅度</param>
                /// <param name="hashCode">哈希码</param>
                /// <returns></returns>
                public static long Increment(string key, long inc, int hashCode)
                {
                    return mc.Increment(key, inc, hashCode);
                }
                #endregion
    
                #region 减小一个数值元素的值(Decrement)
                /// <summary>
                /// 减小一个数值元素的值,减小多少由参数offset决定。 如果元素的值不是数值,以0值对待。如果减小后的值小于0,则新的值被设置为0
                /// </summary>
                /// <param name="key"></param>
                /// <returns></returns>
                public static long Decrement(string key)
                {
                    return mc.Decrement(key);
                }
                /// <summary>
                ///  减小一个数值元素的值,减小多少由参数offset决定。 如果元素的值不是数值,以0值对待。如果减小后的值小于0,则新的值被设置为0
                /// </summary>
                /// <param name="key"></param>
                /// <param name="inc">增长幅度</param>
                /// <returns></returns>
                public static long Decrement(string key, long inc)
                {
                    return mc.Decrement(key, inc);
                }
                /// <summary>
                ///  减小一个数值元素的值,减小多少由参数offset决定。 如果元素的值不是数值,以0值对待。如果减小后的值小于0,则新的值被设置为0
                /// </summary>
                /// <param name="key"></param>
                /// <param name="inc">增长幅度</param>
                /// <param name="hashCode">哈希码</param>
                /// <returns></returns>
                public static long Decrement(string key, long inc, int hashCode)
                {
                    return mc.Decrement(key, inc, hashCode);
                }
                #endregion
    
                #endregion
    
                
                #endregion
    
            #region 指定服务器
    
            #region 获取(Get)
    
        /// <summary>
          /// 从指定服务器获取
        /// </summary>
        /// <param name="server">服务器,Svr1,Svr2</param>
                /// <param name="key"></param>
        /// <returns></returns>
            public static object GetFrom(string server,string key)
            {
                MemcachedClient client = GetClient(server);
                client.PoolName = server;
                return client.Get(key);
            }
            /// <summary>
            /// 从指定服务器获取
            /// </summary>
            /// <param name="server">服务器,Svr1,Svr2</param>
            /// <param name="key"></param>
            /// <param name="hashCode">哈希码</param>
            public static object GetFrom(string server, string key, int hashCode)
            {
                MemcachedClient client = GetClient(server);
                client.PoolName = server;
                return client.Get(key, hashCode);
            }
            /// <summary>
            /// 从指定服务器获取
            /// </summary>
            /// <param name="server">服务器,Svr1,Svr2</param>
            /// <param name="key"></param>
            /// <param name="asString">是否把值作为字符串返回</param>
            public static object GetFrom(string server, string key, object value, bool asString)
            {
                MemcachedClient client = GetClient(server);
                client.PoolName = server;
                return client.Get(key, value, asString);
            }
            #endregion
    
            #region 写入(Set)
            /// <summary>
            ///  设置数据缓存
            /// </summary>
            /// <param name="server">服务器,格式为Svr1,Svr2,Svr3,对应配置文件host</param>
            /// <param name="key"></param>
            /// <param name="value"></param>
            public static void SetTo(string server,string key, object value)
            {
                MemcachedClient client = GetClient(server);
                client.PoolName = server;
                client.Set(key, value);
            }
            /// <summary>
            ///  设置数据缓存
            /// </summary>
            /// <param name="server">服务器,格式为Svr1,Svr2,Svr3,对应配置文件host</param>
            /// <param name="key"></param>
            /// <param name="value"></param>
            /// <param name="hashCode">哈希码</param>
            public static void SetTo(string server, string key, object value, int hashCode)
            {
                MemcachedClient client = GetClient(server);
                client.PoolName = server;
                client.Set(key, value, hashCode);
            }
            /// <summary>
            ///  设置数据缓存
            /// </summary>
            /// <param name="server">服务器,格式为Svr1,Svr2,Svr3,对应配置文件host</param>
            /// <param name="key"></param>
            /// <param name="value"></param>
            /// <param name="expiry">过期时间</param>
            public static void SetTo(string server, string key, object value, DateTime expiry)
            {
                MemcachedClient client = GetClient(server);
                client.PoolName = server;
                client.Set(key, value, expiry);
            }
            /// <summary>
            ///  设置数据缓存
            /// </summary>
            /// <param name="server">服务器,格式为Svr1,Svr2,Svr3,对应配置文件host</param>
            /// <param name="key"></param>
            /// <param name="value"></param>
            /// <param name="expiry">过期时间</param>
            public static void SetTo(string server, string key, object value, DateTime expiry, int hashCode)
            {
                MemcachedClient client = GetClient(server);
                client.PoolName = server;
                client.Set(key, value, expiry, hashCode);
            }
            #endregion
    
            #region 批量写(Set)
            /// <summary>
            /// 批量设置数据缓存
            /// </summary>
            /// <param name="key"></param>
            /// <param name="value"></param>
            public static void SetMultipleTo(string server, string[] keys, object[] values)
            {
                MemcachedClient client = GetClient(server);
                client.PoolName = server;
                for (int i = 0; i < keys.Length; i++)
                {
                    client.Set(keys[i], values[i]);
                }
            }
            /// <summary>
            /// 批量设置数据缓存
            /// </summary>
            /// <param name="key"></param>
            /// <param name="value"></param>
            /// <param name="hashCode">哈希码</param>
            public static void SetMultipleTo(string server, string[] keys, object[] values, int[] hashCodes)
            {
                MemcachedClient client = GetClient(server);
                client.PoolName = server;
                for (int i = 0; i < keys.Length; i++)
                {
                    client.Set(keys[i], values[i], hashCodes[i]);
                }
            }
            /// <summary>
            /// 批量设置数据缓存
            /// </summary>
            /// <param name="key"></param>
            /// <param name="value"></param>
            /// <param name="expiry">过期时间</param>
            public static void SetMultipleTo(string server, string[] keys, object[] values, DateTime[] expirys)
            {
                MemcachedClient client = GetClient(server);
                client.PoolName = server;
                for (int i = 0; i < keys.Length; i++)
                {
                    client.Set(keys[i], values[i], expirys[i]);
                }
            }
            /// <summary>
            /// 批量设置数据缓存
            /// </summary>
            /// <param name="key"></param>
            /// <param name="value"></param>
            /// <param name="expiry">过期时间</param>
            public static void SetMultipleTo(string server, string[] keys, object[] values, DateTime[] expirys, int[] hashCodes)
            {
                MemcachedClient client = GetClient(server);
                client.PoolName = server;
                for (int i = 0; i < keys.Length; i++)
                {
                    client.Set(keys[i], values[i], expirys[i], hashCodes[i]);
                }
            }
            #endregion
    
            #region 批量读取(Multiple),返回哈希表 Hashtable
            /// <summary>
            /// 批量读取数据缓存
            /// </summary>
            /// <param name="keys">键集合</param>
            public static Hashtable GetMultipleFrom(string server,string[] keys)
            {
                MemcachedClient client = GetClient(server);
                client.PoolName = server;
                return client.GetMultiple(keys);
            }
            /// <summary>
            /// 批量读取数据缓存
            /// </summary>
            /// <param name="keys">键集合</param>
            /// <param name="hashCodes">哈希码集合</param>
            public static Hashtable GetMultipleFrom(string server, string[] keys, int[] hashCodes)
            {
                MemcachedClient client = GetClient(server);
                client.PoolName = server;
                return client.GetMultiple(keys, hashCodes);
            }
            /// <summary>
            /// 批量读取数据缓存
            /// </summary>
            /// <param name="keys">键集合</param>
            /// <param name="hashCodes">哈希码集合</param>
            /// <param name="asString">所有值返回字符</param>
            public static Hashtable GetMultipleFrom(string server, string[] keys, int[] hashCodes, bool asString)
            {
                MemcachedClient client = GetClient(server);
                client.PoolName = server;
                return client.GetMultiple(keys, hashCodes, asString);
            }
            #endregion
    
            #region 批量读取(Multiple),返回对象数组object[]
            /// <summary>
            /// 批量读取数据缓存
            /// </summary>
            /// <param name="keys">键集合</param>
            public static object[] GetMultipleArrayFrom(string server, string[] keys)
            {
                MemcachedClient client = GetClient(server);
                client.PoolName = server;
                return client.GetMultipleArray(keys);
            }
            /// <summary>
            /// 批量读取数据缓存
            /// </summary>
            /// <param name="keys">键集合</param>
            /// <param name="hashCodes">哈希码集合</param>
            public static object[] GetMultipleArrayFrom(string server, string[] keys, int[] hashCodes)
            {
                MemcachedClient client = GetClient(server);
                client.PoolName = server;
                return client.GetMultipleArray(keys, hashCodes);
            }
            /// <summary>
            /// 批量读取数据缓存
            /// </summary>
            /// <param name="keys">键集合</param>
            /// <param name="hashCodes">哈希码集合</param>
            /// <param name="asString">所有值返回字符</param>
            public static object[] GetMultipleArrayFrom(string server, string[] keys, int[] hashCodes, bool asString)
            {
                MemcachedClient client = GetClient(server);
                client.PoolName = server;
                return client.GetMultipleArray(keys, hashCodes, asString);
            }
            #endregion
    
            #region 批量读取(Multiple),返回泛型集合List[T]
            /// <summary>
            /// 批量读取数据缓存
            /// </summary>
            /// <param name="keys">键集合</param>
            public static List<T> GetMultipleListFrom<T>(string server, string[] keys)
            {
                MemcachedClient client = GetClient(server);
                client.PoolName = server;
                object[] obj = client.GetMultipleArray(keys);
                List<T> list = new List<T>();
                foreach (object o in obj)
                {
                    list.Add((T)o);
                }
                return list;
            }
            /// <summary>
            /// 批量读取数据缓存
            /// </summary>
            /// <param name="keys">键集合</param>
            /// <param name="hashCodes">哈希码集合</param>
            public static List<T> GetMultipleListFrom<T>(string server, string[] keys, int[] hashCodes)
            {
                MemcachedClient client = GetClient(server);
                client.PoolName = server;
                object[] obj = client.GetMultipleArray(keys, hashCodes);
                List<T> list = new List<T>();
                foreach (object o in obj)
                {
                    list.Add((T)o);
                }
                return list;
            }
            /// <summary>
            /// 批量读取数据缓存
            /// </summary>
            /// <param name="keys">键集合</param>
            /// <param name="hashCodes">哈希码集合</param>
            /// <param name="asString">所有值返回字符</param>
            public static List<T> GetMultipleListFrom<T>(string server, string[] keys, int[] hashCodes, bool asString)
            {
                MemcachedClient client = GetClient(server);
                client.PoolName = server;
                object[] obj = client.GetMultipleArray(keys, hashCodes, asString);
                List<T> list = new List<T>();
                foreach (object o in obj)
                {
                    list.Add((T)o);
                }
                return list;
            }
            #endregion
    
            #region 替换更新(Replace)
            /// <summary>
            /// 替换更新数据缓存
            /// </summary>
            /// <param name="key"></param>
            /// <param name="value"></param>
            public static void ReplaceFrom(string server, string key, object value)
            {
                MemcachedClient client = GetClient(server);
                client.PoolName = server;
                client.Replace(key, value);
            }
            /// <summary>
            /// 替换更新数据缓存
            /// </summary>
            /// <param name="key"></param>
            /// <param name="value"></param>
            /// <param name="hashCode">哈希码</param>
            public static void ReplaceFrom(string server, string key, object value, int hashCode)
            {
                MemcachedClient client = GetClient(server);
                client.PoolName = server;
                client.Replace(key, value, hashCode);
            }
            /// <summary>
            /// 替换更新数据缓存
            /// </summary>
            /// <param name="key"></param>
            /// <param name="value"></param>
            /// <param name="expiry">过期时间</param>
            public static void ReplaceFrom(string server, string key, object value, DateTime expiry)
            {
                MemcachedClient client = GetClient(server);
                client.PoolName = server;
                client.Replace(key, value, expiry);
            }
            /// <summary>
            /// 替换更新数据缓存
            /// </summary>
            /// <param name="key"></param>
            /// <param name="value"></param>
            /// <param name="expiry">过期时间</param>
            public static void ReplaceFrom(string server, string key, object value, DateTime expiry, int hashCode)
            {
                MemcachedClient client = GetClient(server);
                client.PoolName = server;
                client.Replace(key, value, expiry, hashCode);
            }
            #endregion
    
            #region 删除(Delete)
    
            /// <summary>
            ///删除指定条件缓存
            /// </summary>
            /// <param name="key"></param>
            public static bool DeleteFrom(string server, string key)
            {
                MemcachedClient client = GetClient(server);
                client.PoolName = server;
                return client.Delete(key);
            }
            /// <summary>
            /// 删除指定条件缓存
            /// </summary>
            /// <param name="key"></param>
            /// <param name="hashCode">哈希码</param>
            /// <param name="expiry">过期时间</param>
            public static bool DeleteFrom(string server, string key, int hashCode, DateTime expiry)
            {
                MemcachedClient client = GetClient(server);
                client.PoolName = server;
                return client.Delete(key, hashCode, expiry);
            }
            /// <summary>
            /// 删除指定条件缓存
            /// </summary>
            /// <param name="key"></param>
            /// <param name="expiry">过期时间</param>
            public static bool DeleteFrom(string server, string key, DateTime expiry)
            {
                MemcachedClient client = GetClient(server);
                client.PoolName = server;
                return client.Delete(key, expiry);
            }
    
            /// <summary>
            /// 移除全部缓存
            /// </summary>
            public static void RemovAllCacheFrom(string server)
            {
                MemcachedClient client = GetClient(server);
                client.PoolName = server;
                client.FlushAll();
            }
            /// <summary>
            /// 移除全部缓存
            /// </summary>
            /// <param name="list">移除指定服务器缓存</param>
            public static void RemovAllCacheFrom(string server, ArrayList list)
            {
                MemcachedClient client = GetClient(server);
                client.PoolName = server;
                client.FlushAll(list);
            }
            #endregion
    
            #region 是否存在(Exists)
            /// <summary>
            /// 判断指定键的缓存是否存在
            /// </summary>
            /// <param name="key"></param>
            /// <returns></returns>
            public static bool IsExists(string server,string key)
            {
                MemcachedClient client = GetClient(server);
                client.PoolName = server;
                return client.KeyExists(key);
            }
            #endregion
    
            #region 数值增减
    
            #region 存储一个数值元素
            /// <summary>
            /// 存储一个数值元素
            /// </summary>
            /// <param name="key"></param>
            /// <returns></returns>
            public static bool StoreCounterTo(string server,string key, long counter)
            {
                MemcachedClient client = GetClient(server);
                client.PoolName = server;
                return client.StoreCounter(key, counter);
            }
            /// <summary>
            ///  存储一个数值元素
            /// </summary>
            /// <param name="key"></param>
            /// <param name="inc">增长幅度</param>
            /// <param name="hashCode">哈希码</param>
            /// <returns></returns>
            public static bool StoreCounterTo(string server, string key, long counter, int hashCode)
            {
                MemcachedClient client = GetClient(server);
                client.PoolName = server;
                return client.StoreCounter(key, counter, hashCode);
            }
            #endregion
    
            #region 获取一个数值元素
            /// <summary>
            /// 获取一个数值元素
            /// </summary>
            /// <param name="key"></param>
            /// <returns></returns>
            public static long GetCounterFrom(string server, string key)
            {
                MemcachedClient client = GetClient(server);
                client.PoolName = server;
                return client.GetCounter(key);
            }
            /// <summary>
            ///  获取一个数值元素
            /// </summary>
            /// <param name="key"></param>
            /// <param name="hashCode">哈希码</param>
            /// <returns></returns>
            public static long GetCounterFrom(string server, string key, int hashCode)
            {
                MemcachedClient client = GetClient(server);
                client.PoolName = server;
                return client.GetCounter(key, hashCode);
            }
            #endregion
    
            #region 增加一个数值元素的值(Increment)
            /// <summary>
            /// 将一个数值元素增加。 如果元素的值不是数值类型,将其作为0处理
            /// </summary>
            /// <param name="key"></param>
            /// <returns></returns>
            public static long IncrementTo(string server, string key)
            {
                MemcachedClient client = GetClient(server);
                client.PoolName = server;
                return client.Increment(key);
            }
            /// <summary>
            ///  将一个数值元素增加。 如果元素的值不是数值类型,将其作为0处理
            /// </summary>
            /// <param name="key"></param>
            /// <param name="inc">增长幅度</param>
            /// <returns></returns>
            public static long IncrementTo(string server, string key, long inc)
            {
                MemcachedClient client = GetClient(server);
                client.PoolName = server;
                return client.Increment(key, inc);
            }
            /// <summary>
            ///  将一个数值元素增加。 如果元素的值不是数值类型,将其作为0处理
            /// </summary>
            /// <param name="key"></param>
            /// <param name="inc">增长幅度</param>
            /// <param name="hashCode">哈希码</param>
            /// <returns></returns>
            public static long IncrementTo(string server, string key, long inc, int hashCode)
            {
                MemcachedClient client = GetClient(server);
                client.PoolName = server;
                return client.Increment(key, inc, hashCode);
            }
            #endregion
    
            #region 减小一个数值元素的值(Decrement)
            /// <summary>
            /// 减小一个数值元素的值,减小多少由参数offset决定。 如果元素的值不是数值,以0值对待。如果减小后的值小于0,则新的值被设置为0
            /// </summary>
            /// <param name="key"></param>
            /// <returns></returns>
            public static long DecrementFrom(string server, string key)
            {
                MemcachedClient client = GetClient(server);
                client.PoolName = server;
                return client.Decrement(key);
            }
            /// <summary>
            ///  减小一个数值元素的值,减小多少由参数offset决定。 如果元素的值不是数值,以0值对待。如果减小后的值小于0,则新的值被设置为0
            /// </summary>
            /// <param name="key"></param>
            /// <param name="inc">增长幅度</param>
            /// <returns></returns>
            public static long DecrementFrom(string server, string key, long inc)
            {
                MemcachedClient client = GetClient(server);
                client.PoolName = server;
                return client.Decrement(key, inc);
            }
            /// <summary>
            ///  减小一个数值元素的值,减小多少由参数offset决定。 如果元素的值不是数值,以0值对待。如果减小后的值小于0,则新的值被设置为0
            /// </summary>
            /// <param name="key"></param>
            /// <param name="inc">增长幅度</param>
            /// <param name="hashCode">哈希码</param>
            /// <returns></returns>
            public static long DecrementFrom(string server, string key, long inc, int hashCode)
            {
                MemcachedClient client = GetClient(server);
                client.PoolName = server;
                return client.Decrement(key, inc, hashCode);
            }
            #endregion
    
            #endregion
    
            #endregion
    
           
        }
    
      
    }

    第 4步: 测试默认服务器

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using Memcached.ClientLibrary;
    namespace www.memcached.com
    {
        [Serializable]
        class A
        {
            public string Name { get; set; }
        }
        public partial class Test : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
                CacheHelper.RemovAllCache();
                /*例子1  保存复杂对象*/
                A[] a = new A[] { new A { Name = "刘德华" }, new A { Name = "施瓦辛格" }, new A { Name = "太上老君" } };
                CacheHelper.Set("name", a, DateTime.Now.AddSeconds(10));
                object c = CacheHelper.Get("name");
                A[] b = (A[])c;
                Response.Write(b[2].Name + "<br/>");
    
                /*例子2  批量获取对象*/
                int[] array = { 1, 2, 3, 4, 5, 6, 7 };
                foreach (int i in array)
                {
                    CacheHelper.Set("array" + i, i);
                }
                string[] keys = { "array1", "array2", "array3", "array4", "array5", "array6", "array7" };
                object[] obj = CacheHelper.GetMultipleArray(keys);
                foreach (object o in obj)
                {
                    Response.Write(o + "<br/>");
                }
                /*例子3  获取泛型*/
                A a3 = new A { Name = "我是对象" };
                CacheHelper.Set("TType", a3);
    
                A a4 = CacheHelper.Get<A>("TType");
                Response.Write(a4.Name + "<br/>");
                /*例子4  删除*/
                try
                {
                    Response.Write("删除对象TType " + CacheHelper.Delete("TType") + "<br/>");
                    A a5 = CacheHelper.Get<A>("TType");
                    Response.Write(a5.Name + "<br/>");
                }
                catch (Exception exe)
                {
                    Response.Write("获取对象报错,说明对象已经删除,错误信息是:  " + exe.Message + "<br/>");
                    Response.Write("删除对象后,判断是否存在: CacheHelper.IsExists:  " + CacheHelper.IsExists("TType") + "<br/>");
                }
                /*例子5  增加,减少*/
                long counter = 10;
                CacheHelper.StoreCounter("number", counter);
                Response.Write("number增加前是:  " + CacheHelper.GetCounter("number") + "<br/>");
                CacheHelper.Increment("number");
                Response.Write("对number增加后是:  " + CacheHelper.GetCounter("number") + "<br/>");
    
                CacheHelper.Increment("number", 100);
                Response.Write("对number增加100后是:  " + CacheHelper.GetCounter("number") + "<br/>");
    
                CacheHelper.Decrement("number", 100);
                Response.Write("对number减去100后是:  " + CacheHelper.GetCounter("number") + "<br/>");
    
                /*例子6  批量读取 泛型  测试*/
                A[] a6 = new A[] { new A { Name = "李嘉图" }, new A { Name = "亚当斯密" }, new A { Name = "苏格拉底" } };
                string[] k6 = { "economy1", "economy2", "economy3" };
                CacheHelper.SetMultiple(k6, a6);
                Response.Write("下面是  泛型 批量  获取对象<br/>");
                List<A> list = CacheHelper.GetMultipleList<A>(k6);
                foreach (A p in list)
                {
                    Response.Write(p.Name + "<br/>");
                }
              
            }
        }
    }

    第 5步: 测试指定服务器

    using System;
    using System.Collections;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    
    namespace www.memcached.com
    {
        public partial class Test4 : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
    
                CacheHelper.SetTo("Svr1", "Abc", "good1");
                CacheHelper.SetTo("Svr2", "Abc", "good2");
                Response.Write("第一台服务器:"+CacheHelper.GetFrom("Svr1", "Abc")+"<br/>");
                Response.Write("第二台服务器:" + CacheHelper.GetFrom("Svr2", "Abc") + "<br/>");
    
                CacheHelper.StoreCounterTo("Svr1","Count",1);
                CacheHelper.IncrementTo("Svr1", "Count", 10);
                Response.Write("自增结果:" + CacheHelper.GetCounterFrom("Svr1", "Count") + "<br/>");
    
            }
        }
    }

    第 6步: 项目配置文件

    <?xml version="1.0"?>
    
    <!--
      有关如何配置 ASP.NET 应用程序的详细信息,请访问
      http://go.microsoft.com/fwlink/?LinkId=169433
      -->
    
    <configuration>
      <appSettings>
        <add key="Svr1" value="127.0.0.1:12345"/>
        <add key="Svr2" value="192.168.1.26:11211"/>
      </appSettings>
    
      <system.web>
        <compilation debug="true" targetFramework="4.0" />
    
        <authentication mode="Forms">
          <forms loginUrl="~/Account/Login.aspx" timeout="2880" />
        </authentication>
    
        <membership>
          <providers>
            <clear/>
            <add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="ApplicationServices"
                 enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false"
                 maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10"
                 applicationName="/" />
          </providers>
        </membership>
    
        <profile>
          <providers>
            <clear/>
            <add name="AspNetSqlProfileProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="ApplicationServices" applicationName="/"/>
          </providers>
        </profile>
    
        <roleManager enabled="false">
          <providers>
            <clear/>
            <add name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" connectionStringName="ApplicationServices" applicationName="/" />
            <add name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider" applicationName="/" />
          </providers>
        </roleManager>
    
      </system.web>
    
      <system.webServer>
         <modules runAllManagedModulesForAllRequests="true"/>
      </system.webServer>
    </configuration>

    下面给出项目源码   下载地址  https://files.cnblogs.com/HCCZX/www.memcached.com.rar

       

  • 相关阅读:
    select top 变量问题
    distinct top執行順序
    Subquery typo with using in(转)
    sql:查询课程号'0312091006'成绩排名第5到第10之间的学生学号
    case when then
    触发器
    索引
    管理事物处理
    053345
    053344
  • 原文地址:https://www.cnblogs.com/HCCZX/p/2829645.html
Copyright © 2020-2023  润新知