分享下自己編寫的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 } }