.NET Memcached Client 扩展获取所有缓存Key
.NET Memcached Client默认实现中并没有获取所有已经缓存Key的方法,但在业务中有时候需求中需要通过正则删除符合条件的缓存内容,所以就要通过读取已经缓存Key进行相关的匹配,然后删除。通过flush只会让缓存过容过期,但获取Key时还会获取得到,缓存的内容过期同样。但调用Get(key)后,Key才会删除
namespace Memcached.ClientLibrary
{
public partial class MemcachedClient
{ #region Methods
public void DeleteByPattern(string pattern)
{
var regex = new Regex(pattern, RegexOptions.Singleline | RegexOptions.Compiled);
var keysToRemove = new List<String>(); foreach (var item in this.Keys)
if (regex.IsMatch(item))
keysToRemove.Add(item); foreach (var key in keysToRemove)
Delete(key);
}
#endregion #region Property
/// <summary>
/// 获取所有缓存的Key
/// </summary>
public List<String> Keys
{
get
{
List<String> keys = new List<string>(); SockIOPool pool = SockIOPool.GetInstance(_poolName);
if (pool != null && pool.Servers != null && pool.Servers.Count > )
{
foreach (var server in pool.Servers)
{
var sock = pool.GetConnection((string)server);
if (sock == null) continue; try
{
sock.Write(_commandStatsItems);
sock.Flush();
string line;
var items = new List<string>();
while (!END.Equals((line = sock.ReadLine()), StringComparison.Ordinal))
{
var id = line.Substring(_idIndex, line.LastIndexOf(':') - _idIndex);
if (!items.Contains(id))
items.Add(id);
} foreach (var id in items)
{
sock.Write(UTF8Encoding.UTF8.GetBytes(string.Concat("stats cachedump ", id, " 0\r\n")));
sock.Flush(); while (!END.Equals((line = sock.ReadLine()), StringComparison.Ordinal))
{
var key = line.Substring(_keyIndex, line.LastIndexOf('[') - );
keys.Add(key);
}
}
}
catch
{
try
{
sock.TrueClose();
}
catch(IOException)
{
if(log.IsErrorEnabled)
log.Error(GetLocalizedString("failed to close some socket").Replace("$$Socket$$", sock.ToString()));
}
}
finally
{
if (sock != null)
sock.Close();
} } } return keys;
}
}
#endregion #region Fields
private const int _idIndex = ;
private const int _keyIndex = ;
private readonly byte[] _commandStatsItems = UTF8Encoding.UTF8.GetBytes("stats items\r\n");
#endregion
}
}
.NET Memcached Client 扩展获取所有缓存Key的更多相关文章
- Memcached Client的释疑
1.目前大多数php环境里使用的都是不带d的memcache版本,这个版本出的比较早,是一个原生版本,完全在php框架内开发的.与之对应的带d的memcached是建立在libmemcached的基础 ...
- 分布式缓存系统Memcached简介与实践(.NET memcached client library)
缘起: 在数据驱动的web开发中,经常要重复从数据库中取出相同的数据,这种重复极大的增加了数据库负载.缓存是解决这个问题的好办法.但是ASP.NET中的虽然已经可以实现对页面局部进行缓存,但还是不够灵 ...
- memcached能获取所有的key吗
memcached能获取所有的key吗 Memcache 查看列出所有key方法 Memcached中获取所有的key 特别要注意:memcached保存的值需要序列化,否则是无法保存的,而且是不会报 ...
- Memcached通用类(基于Memcached Client Library)
分享下自己编写的Memcached通用类.欢迎大家帮忙指点下哈~ 使用的是.NET memcached client library 客户端+Memcached Providers using Sys ...
- Memcached Client 使用手册
Memcached Client 使用手册 Author: cenwenchu Email: wenchu.cenwc@alibaba-inc.com Blog:http://blog.csdn.ne ...
- memcached基于socket访问memcache缓存服务器
memcached基于socket访问memcache缓存服务器 操作memcache常用三种方法: .memcache基于php_memcache.dll扩展(php扩展) .memcached基于 ...
- memcached实例(enyim.com Memcached Client)
在上一篇文章,我们讲了,为什么要使用memched做为缓存服务器(没看的同学请点这里).下面让我们以memcached-1.2.1-win32版本的服务组件(安装后是以一个windows服务做daem ...
- .NET Core MemoryCache缓存获取全部缓存键
在Core中不能使用原HttpRuntime.Cache缓存,改为MemoryCache(Microsoft.Extensions.Caching.Memory). 现MemoryCache新版为2. ...
- Memcached集群:Magent缓存代理使用
小结: 先启动memcached 然后启动magent memcached -d -p 11211 -u memcached -m 64 -c 5120 memcached -d -p 11212 - ...
随机推荐
- Asp.net工作流workflow实战之书签(二)
1.winform(web程序)下使用工作流 怎样才能像控制台那样让winform或web页面窗体阻塞等待工作流的继续执行呢 2.BookMark书签 书签:和一般的书签看书的时候方便查看上次看的内容 ...
- web攻击之四:DOS攻击
DDOS是DOS攻击中的一种方法. DoS:是Denial of Service的简称,即拒绝服务,不是DOS操作系统,造成DoS的攻击行为被称为DoS攻击,其目的是使计算机或网络无法提供正常的服务. ...
- 0008_Python变量
1.变量名:数字,字母,下划线组成,不能以数字开头,不能是Python内部关键字. 2.变量类型:数字,字符串,布尔值(首字母大写) 3.内存与变量: 4. = 赋值 == 比较 is == ...
- zabbix的配置
一.网络自动发现: 1.zabbix的网络自动发现是一个非常强大的功能,该功能可以完成以下工作. a.快速发现并添加主机. b.简单的管理. c.随着环境的改变而快速搭建监控系统. 2.网络发现基于以 ...
- shell脚本备份系统的方法
linux自动备份shell(使用全备份,增量备份策略) 在cron里设置,每周日晚12点执行(每周日全备份,其余时间增量备份)#vi backup.sh #!/bin/bash # definewe ...
- macOS 安装 Docker
系统要求 Docker for Mac 要求系统最低为 macOS 10.10.3 Yosemite,或者 2010 年以后的 Mac 机型,准确说是带 Intel MMU 虚拟化的,最低 4GB 内 ...
- 各版本Google浏览器下载地址
各版本谷歌浏览器下载地址 https://www.chromedownloads.net/chrome64win/
- Ensembl突变数据描述之(一)——突变物种数据库及预测工具
以下是对Ensembl突变数据库中储存的数据的描述,对于Ensembl数据库中不同的物种,我们从各种来源(例如,dbSNP数据库)导入突变数据(SNP.CNV.等位基因频率.基因型等),导入的突变数据 ...
- Deep Image Matting
论文地址:https://arxiv.org/abs/1703.03872 TF复现地址:https://github.com/Joker316701882/Deep-Image-Matting 领域 ...
- CODING 告诉你硅谷的研发项目管理之道(3)
前言: 本文为 CODING 教你一步步从一个程序员变身成管理者系列文章的第三篇,文章内容来自 Unity 的一位研发总监,详细叙述了他的管理风格和处事态度,同时列举了很多扩展阅读材料来帮助读者更全面 ...