Memcached的使用
一 、Memcached服務器端的安裝 (此處將其做爲系統服務安裝)
下載文件:memcached 1.2.1 for Win32 binaries (Dec 23, 2006)
1 解壓縮文件到c:\memcached
2 命令行輸入 'c:\memcached\memcached.exe -d install'
3 命令行輸入 'c:\memcached\memcached.exe -d start' ,該命令啓動 Memcached ,默認監聽端口爲 11211
經過 memcached.exe -h 能夠查看其幫助 數組
using Memcached.ClientLibrary; using System; using System.Collections; using System.Collections.Generic; using System.Web; /// <summary> /// MemberHelper 的摘要說明 /// </summary> public abstract class MemberHelper { #region 建立Memcache服務 /// <summary> /// 建立Memcache服務 /// </summary> /// <param name="serverlist">IP端口列表</param> /// <param name="poolName">Socket鏈接池名稱</param> /// <returns>Memcache客戶端代理類</returns> public 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 }