源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

.net/c# memcached缓存获取所有缓存键的方法步骤

  • 时间:2021-11-03 15:19 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:.net/c# memcached缓存获取所有缓存键的方法步骤
使用组件 memcached 1.2.6 .net 类库 memcacheddotnet_clientlib-1.1.5 1.增加memcacheddotnet_clientlib-1.1.5代码 下载好组件后,用vs打开.net类库memcacheddotnet_clientlib-1.1.5,打开MemCachedClient.cs,增加如下方法:
[u]复制代码[/u] 代码如下:
public Hashtable Stats(ArrayList servers, string command)         {             // get SockIOPool instance             SockIOPool pool = SockIOPool.GetInstance(_poolName);             // return false if unable to get SockIO obj             if (pool == null)             {                 //if(log.IsErrorEnabled)                 //{                 //    log.Error(GetLocalizedString("unable to get socket pool"));                 //}                 return null;             }             // get all servers and iterate over them             if (servers == null)                 servers = pool.Servers;             // if no servers, then return early             if (servers == null || servers.Count <= 0)             {                 //if(log.IsErrorEnabled)                 //{                 //    log.Error(GetLocalizedString("stats no servers"));                 //}                 return null;             }             // array of stats Hashtables             Hashtable statsMaps = new Hashtable();             for (int i = 0; i < servers.Count; i++)             {                 SockIO sock = pool.GetConnection((string)servers[i]);                 if (sock == null)                 {                     //if(log.IsErrorEnabled)                     //{                     //    log.Error(GetLocalizedString("unable to connect").Replace("$$Server$$", servers[i].ToString()));                     //}                     continue;                 }                 // build command                 if (command == null || command.Length == 0)                 {                     command = "stats\r\n";                 }                 else                 {                     command = command + "\r\n";                 }                 try                 {                     sock.Write(UTF8Encoding.UTF8.GetBytes(command));                     sock.Flush();                     // map to hold key value pairs                     Hashtable stats = new Hashtable();                     // loop over results                     while (true)                     {                         string line = sock.ReadLine();                         //if(log.IsDebugEnabled)                         //{                         //    log.Debug(GetLocalizedString("stats line").Replace("$$Line$$", line));                         //}                         if (line.StartsWith(STATS))                         {                             string[] info = line.Split(' ');                             string key = info[1];                             string val = info[2];                             //if(log.IsDebugEnabled)                             //{                             //    log.Debug(GetLocalizedString("stats success").Replace("$$Key$$", key).Replace("$$Value$$", val));                             //}                             stats[key] = val;                         }                         else if (line.StartsWith("ITEM"))                         {                             string[] info = line.Split('[');                             string key = info[0].Split(' ')[1];                             string val = "[" + info[1];                             stats[key] = val;                         }                         else if (END == line)                         {                             // finish when we get end from server                             //if(log.IsDebugEnabled)                             //{                             //    log.Debug(GetLocalizedString("stats finished"));                             //}                             break;                         }                         statsMaps[servers[i]] = stats;                     }                 }                 catch//(IOException e)                 {                     //if(log.IsErrorEnabled)                     //{                     //    log.Error(GetLocalizedString("stats IOException"), e);                     //}                     try                     {                         sock.TrueClose();                     }                     catch//(IOException)                     {                         //if(log.IsErrorEnabled)                         //{                         //    log.Error(GetLocalizedString("failed to close some socket").Replace("$$Socket$$", sock.ToString()));                         //}                     }                     sock = null;                 }                 if (sock != null)                     sock.Close();             }             return statsMaps;         }
2 文章中有GetStats方法,将它修改如下:
[u]复制代码[/u] 代码如下:
/// <summary>         /// 获取服务器端缓存的数据信息         /// </summary>         /// <param name="serverArrayList">要访问的服务列表</param>         /// <param name="statsCommand">此参数的功能暂时无效</param>         /// <param name="param">此参数的功能暂时无效</param>         /// <returns>返回信息</returns>         public static IList<string> GetStats(IList<string> serverArrayList, MemcachedStats statsCommand, string param)         {             IList<string> statsArray = new List<string>();             if (param == null)                 param = "";             else             {                 param = param.Trim().ToLower();             }             string commandstr = "stats";             //转换stats命令参数             switch (statsCommand)             {                 case MemcachedStats.Reset: { commandstr = "stats reset"; break; }                 case MemcachedStats.Malloc: { commandstr = "stats malloc"; break; }                 case MemcachedStats.Maps: { commandstr = "stats maps"; break; }                 case MemcachedStats.Sizes: { commandstr = "stats sizes"; break; }                 case MemcachedStats.Slabs: { commandstr = "stats slabs"; break; }                 case MemcachedStats.Items: { commandstr = "stats items"; break; }//此处原先是返回stats                 case MemcachedStats.CachedDump:                     {                         string[] statsparams = param.Split(' ');                         if (statsparams.Length == 2)                             if (param.IsIntArr(' '))// Utils.IsNumericArray(statsparams)                                 commandstr = "stats cachedump  " + param;                         break;                     }                 case MemcachedStats.Detail:                     {                         if (string.Equals(param, "on") || string.Equals(param, "off") || string.Equals(param, "dump"))                             commandstr = "stats detail " + param.Trim();                         break;                     }                 default: { commandstr = "stats"; break; }             }             ArrayList arr = new ArrayList(serverArrayList.ToArray());             Hashtable stats = MemcachedManager.CacheClient.Stats(arr, commandstr);             foreach (string key in stats.Keys)             {                 statsArray.Add("server:__:" + key);//此处也改了                 Hashtable values = (Hashtable)stats[key];                 foreach (string key2 in values.Keys)                 {                     statsArray.Add(key2 + ":" + values[key2]);                 }             }             return statsArray;         }
3.最后增加如下方法
[u]复制代码[/u] 代码如下:
/// <summary>        /// 获取所有缓存键        /// </summary>        /// <returns></returns>        public static IList<string> GetAllKeys()        {            IList<int> idList = new List<int>();            IList<string> list = MemcachedManager.GetStats(MemcachedManager.ServerList, MemcachedStats.Items, null);            foreach (var item in list)            {                string[] tmpArr = item.Split(':');                if (tmpArr.Length > 1)                {                    int itemID = 0;                    if (tmpArr[1] == "__") continue;                    int.TryParse(tmpArr[1], out itemID);                    if (itemID <= 0) continue;                    bool find = false;                    foreach (int item1 in idList)                    {                        if (item1 == itemID)                        {                            find = true;                            break;                        }                    }                    if (!find)                    {                        idList.Add(itemID);                    }                }            }            IList<string> keys = new List<string>();            foreach (int item in idList)            {                IList<string> cachearr = MemcachedManager.GetStats(MemcachedManager.ServerList, MemcachedStats.CachedDump, item + " 0");                foreach (string itemCache in cachearr)                {                    string[] tmpArr = itemCache.Split(':');                    if (tmpArr.Length > 1)                    {                        if (tmpArr[1] == "__")                        {                            continue;                        }                        keys.Add(tmpArr[0]);                    }                }            }            return keys;        }
调用方法
[u]复制代码[/u] 代码如下:
IList<string> list = MemcachedManager.GetAllKeys();             foreach (var item in list)             {                 Response.Write(item + "<br />");             }
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部