分享下自己編寫的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
}
}
作者:Cat Qi
出處:http://qixuejia.cnblogs.com/
本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利。