zoukankan      html  css  js  c++  java
  • Memcached通用类(基于Memcached Client Library)

    分享下自己编写的Memcached通用类。欢迎大家帮忙指点下哈~

    使用的是.NET memcached client library 客户端+Memcached Providers

    using System;
    using System.Collections;
    using System.Collections.Generic;
    using System.Text;
    using Memcached.ClientLibrary;
    
    namespace KOC.Common.DataAccess
    {
        /// <summary>
        /// Memcache通用类
        /// </summary>
        public abstract class MemberHelper
        {
            #region 创建Memcache服务
            /// <summary>
            /// 创建Memcache服务
            /// </summary>
            /// <param name="serverlist">IP端口列表</param>
            /// <param name="poolName">Socket连接池名称</param>
            /// <returns>Memcache客户端代理类</returns>
            private static MemcachedClient CreateServer(ArrayList serverlist, string poolName)
            {
                //初始化memcache服务器池
                SockIOPool pool = SockIOPool.GetInstance(poolName);
                //设置Memcache池连接点服务器端。
                pool.SetServers(serverlist);
                pool.Initialize();
                //其他参数根据需要进行配置 
    
                //创建了一个Memcache客户端的代理类。
                MemcachedClient mc = new MemcachedClient();
                mc.PoolName = poolName;
                mc.EnableCompression = false;//是否压缩 
    
                return mc;
            }
            #endregion
    
            #region 缓存是否存在
            /// <summary>
            /// 缓存是否存在
            /// </summary>
            /// <param name="serverlist">IP端口列表</param>
            /// <param name="key"></param>
            /// <returns></returns>
            public static bool CacheIsExists(ArrayList serverlist, string poolName, string key)
            {
                MemcachedClient mc = CreateServer(serverlist, poolName);
    
                if (mc.KeyExists(key))
                {
                    return true;
                }
                else
                {
                    return false;
                }
    
            }
            #endregion
    
            #region 添加缓存
    
            #region 添加缓存(键不存在则添加,键存在则不能添加)
            /// <summary>
            /// 添加缓存(键不存在则添加,键存在则不能添加)
            /// </summary>
            /// <param name="serverlist">IP端口列表</param>
            /// <param name="poolName">连接池名称</param>
            /// <param name="key"></param>
            /// <param name="value"></param>
            /// <param name="minutes">过期分钟数</param>
            /// <returns></returns>
            public static bool AddCache(ArrayList serverlist, string poolName, string key, string value, int minutes)
            {
                MemcachedClient mc = CreateServer(serverlist, poolName);
                return mc.Add(key, value, DateTime.Now.AddMinutes(minutes));
            }
            #endregion
    
            #region 添加缓存(键不存在则添加,键存在则覆盖)
            /// <summary>
            /// 添加缓存(键不存在则添加,键存在则覆盖)
            /// </summary>
            /// <param name="serverlist">IP端口列表</param>
            /// <param name="poolName">连接池名称</param>
            /// <param name="key"></param>
            /// <param name="value"></param>
            /// <param name="minutes">过期分钟数</param>
            /// <returns></returns>
            public static bool SetCache(ArrayList serverlist, string poolName, string key, string value, int minutes)
            {
                MemcachedClient mc = CreateServer(serverlist, poolName);
                return mc.Set(key, value, DateTime.Now.AddMinutes(minutes));
            }
            #endregion
    
            #endregion
    
            #region 替换缓存
    
            #region 替换缓存(键存在的才能替换,不存在则不替换)
            /// <summary>
            /// 替换缓存(键存在的才能替换,不存在则不替换)
            /// </summary>
            /// <param name="serverlist">IP端口列表</param>
            /// <param name="poolName">连接池名称</param>
            /// <param name="key"></param>
            /// <param name="value"></param>
            /// <param name="minutes">过期分钟数</param>
            /// <returns></returns>
            public static bool ReplaceCache(ArrayList serverlist, string poolName, string key, string value, int minutes)
            {
                MemcachedClient mc = CreateServer(serverlist, poolName);
                return mc.Replace(key, value, DateTime.Now.AddMinutes(minutes));
            }
            #endregion
    
            #endregion
    
            #region 获取缓存
    
            #region 获取单个键对应的缓存
            /// <summary>
            /// 获取单个键对应的缓存
            /// </summary>
            /// <param name="serverlist">IP端口列表</param>
            /// <param name="poolName">连接池名称</param>
            /// <param name="key"></param> 
            /// <returns></returns>
            public static object GetCache(ArrayList serverlist, string poolName, string key)
            {
                MemcachedClient mc = CreateServer(serverlist, poolName);
                if (mc.KeyExists(key))
                {
                    return mc.Get(key); 
                }
                else
                {
                    return "";
                }
            }
            #endregion
    
            #region 获取键数组对应的值
            /// <summary>
            /// 获取键数组对应的值
            /// </summary>
            /// <param name="serverlist">IP端口列表</param>
            /// <param name="poolName">连接池名称</param>
            /// <param name="keys">键列表</param>
            /// <returns>Hashtable键值对</returns>
            public static Hashtable GetCacheHt(ArrayList serverlist, string poolName, string[] keys)
            {
                MemcachedClient mc = CreateServer(serverlist, poolName);
                return mc.GetMultiple(keys);
            }
            #endregion
    
            #region 获取键数组对应的值
            /// <summary>
            /// 获取键数组对应的值
            /// </summary>
            /// <param name="serverlist">IP端口列表</param>
            /// <param name="poolName">连接池名称</param>
            /// <param name="keys">键列表</param>
            /// <returns>值的数组(不包含键)</returns>
            public static object[] GetCacheList(ArrayList serverlist, string poolName, string[] keys)
            {
                MemcachedClient mc = CreateServer(serverlist, poolName);
                object[] list = mc.GetMultipleArray(keys);
                ArrayList returnList = new ArrayList();
                for (int i = 0; i < list.Length; i++)
                {
                    if (list[i] != null)
                    {
                        returnList.Add(list[i]);
                    }
                }
                return returnList.ToArray();
            }
            #endregion
    
            #endregion
    
            #region 删除缓存
            /// <summary>
            /// 删除缓存
            /// </summary>
            /// <param name="serverlist">IP端口列表</param>
            /// <param name="poolName">连接池名称</param>
            /// <param name="key"></param>
            /// <returns></returns>
            public static bool DelCache(ArrayList serverlist, string poolName, string key)
            {
                MemcachedClient mc = CreateServer(serverlist, poolName);
                return mc.Delete(key);
            }
            #endregion
    
            #region 清空所有缓存
            /// <summary>
            /// 清空所有缓存
            /// </summary>
            /// <param name="serverlist">IP端口列表</param>
            /// <param name="poolName">连接池名称</param>
            /// <returns></returns>
            public static bool FlushAll(ArrayList serverlist, string poolName)
            {
                MemcachedClient mc = CreateServer(serverlist, poolName);
                return mc.FlushAll();
            }
            #endregion
        }
    }
  • 相关阅读:
    jQuery选择器总结
    ASP.NET MVC Controller向View传值的几种方式
    C# 实现屏幕截屏
    C#方法参数传递-同时使用ref和out关键字
    C#委托的异步调用
    C#导出Excel总结
    JQuery Form AjaxSubmit(options)在Asp.net中的应用注意事项
    Ubuntu16.04 Tomcat9的安装
    ubuntu16.04 安装 eclipse
    pychram最新注册码
  • 原文地址:https://www.cnblogs.com/qixuejia/p/3167986.html
Copyright © 2011-2022 走看看