手机
当前位置:查字典教程网 >编程开发 >asp.net教程 >.net/c# memcached缓存获取所有缓存键的方法步骤
.net/c# memcached缓存获取所有缓存键的方法步骤
摘要:使用组件memcached1.2.6.net类库memcacheddotnet_clientlib-1.1.51.增加memcacheddo...

使用组件

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,增加如下方法:

复制代码 代码如下:

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 = "statsrn";

}

else

{

command = command + "rn";

}

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方法,将它修改如下:

复制代码 代码如下:

/// <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.最后增加如下方法

复制代码 代码如下:

/// <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;

}

调用方法

复制代码 代码如下:

IList<string> list = MemcachedManager.GetAllKeys();

foreach (var item in list)

{

Response.Write(item + "<br />");

}

【.net/c# memcached缓存获取所有缓存键的方法步骤】相关文章:

asp.net webservice返回json的方法

XslTransform.Transform将结果输出到字符串里的方法

Asp.net清空cache禁用页面缓存的方法

vs 不显示行号的操作方法

aspx如果引用cs中的变量的方法

asp.net简化接收参数值的函数

Asp.net禁用页面缓存的方法总结

asp.net DZ论坛中根据IP地址取得所在地的代码

asp.net中包含文件的代码及使用方法

C# web api返回类型设置为json的两种方法

精品推荐
分类导航