C# Memcached 缓存
之前做的功能,程序可能有不足之处,但还是要记录下
ICacheStrategy.cs文件
public interface ICacheStrategy
{
/// <summary>
/// 添加数据到缓存
/// </summary>
/// <param name="objId">缓存名称</param>
/// <param name="o">缓存内容</param>
/// <param name="second">缓存时间(秒)</param>
void Add(string objId, object o, int second); /// <summary>
/// 添加数据到缓存 (依赖其它缓存)
/// </summary>
/// <param name="objId">缓存名称</param>
/// <param name="o">缓存内容</param>
/// <param name="second">缓存时间(秒)</param>
/// <param name="dependKey">依赖缓存名称数组</param>
void AddCacheDepend(string objId, object o, int second, string[] dependKey); /// <summary>
/// 添加数据到缓存 (依赖文件)
/// </summary>
/// <param name="objId">缓存名称</param>
/// <param name="o">缓存内容</param>
/// <param name="second">缓存时间(秒)</param>
/// <param name="files">依赖缓存名称文件名数组</param>
void AddFileDepend(string objId, object o, int second, string[] files); /// <summary>
/// 删除指定缓存
/// </summary>
/// <param name="objId"></param>
void RemoveCache(string objId); /// <summary>
/// 删除所有缓存
/// </summary>
void RemoveCacheAll(); /// <summary>
/// 删除匹配到的缓存
/// </summary>
/// <param name="pattern"></param>
/// <returns></returns>
void RemoveCacheRegex(string pattern); /// <summary>
/// 获取所有缓存键
/// </summary>
/// <returns></returns>
IList<string> GetCacheKeys(); /// <summary>
/// 搜索 匹配到的缓存
/// </summary>
/// <param name="pattern"></param>
/// <returns></returns>
IList<string> SearchCacheRegex(string pattern); /// <summary>
/// 获得缓存数据
/// </summary>
/// <param name="objId"></param>
/// <returns></returns>
object GetCacheData(string objId); /// <summary>
/// 判断此缓存是否有效
/// </summary>
/// <param name="objID"></param>
/// <returns></returns>
bool HasCache(string objID);
}
MemcachedStrategy.cs文件
public class MemcachedStrategy : ICacheStrategy
{
#region ICacheStrategy 成员 /// <summary>
/// 添加数据到缓存
/// </summary>
/// <param name="objId">缓存名称</param>
/// <param name="o">缓存内容</param>
/// <param name="second">缓存时间(秒)</param>
public void Add(string objId, object o, int second)
{
if (second > )
{
MemcachedManager.CacheClient.Set(objId, o, DateTime.Now.AddSeconds(second));
}
else
{
MemcachedManager.CacheClient.Set(objId, o);
}
} #region 缓存依赖没有用到memcached
/// <summary>
/// 添加数据到缓存 (依赖其它缓存)
/// </summary>
/// <param name="objId">缓存名称</param>
/// <param name="o">缓存内容</param>
/// <param name="second">缓存时间(秒)</param>
/// <param name="dependKey">依赖缓存名称数组</param>
public void AddCacheDepend(string objId, object o, int second, string[] dependKey)
{
CacheDependency dependencies = new CacheDependency(null, dependKey, DateTime.Now);
HttpRuntime.Cache.Insert(objId, o, dependencies, DateTime.Now.AddSeconds((double)second), Cache.NoSlidingExpiration, CacheItemPriority.Default, null);
} /// <summary>
/// 添加数据到缓存 (依赖文件)
/// </summary>
/// <param name="objId">缓存名称</param>
/// <param name="o">缓存内容</param>
/// <param name="second">缓存时间(秒)</param>
/// <param name="files">依赖缓存名称文件名数组</param>
public void AddFileDepend(string objId, object o, int second, string[] files)
{
CacheDependency dependencies = new CacheDependency(files, DateTime.Now);
HttpRuntime.Cache.Insert(objId, o, dependencies, DateTime.Now.AddSeconds((double)second), Cache.NoSlidingExpiration, CacheItemPriority.Default, null);
}
#endregion /// <summary>
/// 删除指定缓存
/// </summary>
/// <param name="objId"></param>
public void RemoveCache(string objId)
{
if (MemcachedManager.CacheClient.KeyExists(objId))
MemcachedManager.CacheClient.Delete(objId);
} /// <summary>
/// 删除所有缓存
/// </summary>
public void RemoveCacheAll()
{
MemcachedManager.CacheClient.FlushAll();
} /// <summary>
/// 删除匹配到的缓存
/// </summary>
/// <param name="pattern"></param>
public void RemoveCacheRegex(string pattern)
{
IList<string> list = SearchCacheRegex(pattern);
foreach (var item in list)
{
MemcachedManager.CacheClient.Delete(item);
}
} /// <summary>
/// 获取所有缓存键
/// </summary>
/// <returns></returns>
public IList<string> GetCacheKeys()
{
return MemcachedManager.GetAllKeys();
} /// <summary>
/// 搜索 匹配到的缓存
/// </summary>
/// <param name="pattern"></param>
/// <returns></returns>
public IList<string> SearchCacheRegex(string pattern)
{
List<string> l = new List<string>();
IList<string> cacheKeys = MemcachedManager.GetAllKeys();
foreach (var item in cacheKeys)
{
if (Regex.IsMatch(item, pattern))
{
l.Add(item);
}
}
return l.AsReadOnly();
} /// <summary>
/// 获得缓存数据
/// </summary>
/// <param name="objId"></param>
/// <returns></returns>
public object GetCacheData(string objId)
{
return MemcachedManager.CacheClient.Get(objId);
} /// <summary>
/// 判断此缓存是否有效
/// </summary>
/// <param name="objID"></param>
/// <returns></returns>
public bool HasCache(string objID)
{
return MemcachedManager.CacheClient.KeyExists(objID);
}
#endregion
}
C# Memcached 缓存的更多相关文章
- 从零开始学 Java - Spring 集成 Memcached 缓存配置(二)
Memcached 客户端选择 上一篇文章 从零开始学 Java - Spring 集成 Memcached 缓存配置(一)中我们讲到这篇要谈客户端的选择,在 Java 中一般常用的有三个: Memc ...
- .NET跨平台之旅:基于.NET Core改写EnyimMemcached,实现Linux上访问memcached缓存
注:支持 .NET Core 的 memcached 客户端 EnyimMemcachedCore 的 NuGet 包下载地址:https://www.nuget.org/packages/Enyim ...
- redis和memcached缓存
memcached memcache开源的,高性能,高并发分布式内存缓存系统,天生支持集群 memcached下载地址: http://memcached.org/downloads python实现 ...
- 应对Memcached缓存失效,导致高并发查询DB的四种思路(l转)
当Memcached缓存失效时,容易出现高并发的查询DB,导致DB压力骤然上升. 这篇blog主要是探讨如何在缓存将要失效时,及时地更新缓存,而不是如何在缓存失效之后,如何防止高并发的DB查询. 解决 ...
- memcached 缓存服务器
Memcached 缓存服务器 Memcached 是高性能的分布式内存缓存服务器. 一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态web应用的速度.提高可扩展性. 主要特点 ...
- Memcached缓存瓶颈分析
Memcached缓存瓶颈分析 获取Memcached的统计信息 Shell: # echo "stats" | nc 127.0.0.1 11211 PHP: $mc = new ...
- 通过spring.net中的spring.caching CacheResult实现memcached缓存
通过spring.net中的spring.caching CacheResult实现memcached缓存1.SpringMemcachedCache.cs2.APP.config3.Program. ...
- Windows系统下Memcached缓存系列二:CouchbaseClient(c#客户端)的详细试用,单例模式
在上一篇文章里面 ( Windows系统下Memcached缓存系列一:Couchbase(服务器端)和CouchbaseClient(c#客户端)的安装教程 ),我们介绍了服务器端的安装和客户端的安 ...
- memcached缓存雪崩现象及解决办法
1)什么是缓存雪崩?场景:一个访问很大的文章(论坛之类)的网站,使用memcached缓存用户查询过的文章.设置的缓存过期时间为6小时,所以没过6小时,缓存就会失效并重建一遍 问题:过六小时时,一部分 ...
- 受教了,memcache比较全面点的介绍,受益匪浅,适用memcached的业务场景有哪些?memcached的cache机制是怎样的?在设计应用时,可以通过Memcached缓存那些内容?
基本问题 1.memcached的基本设置 1)启动Memcache的服务器端 # /usr/local/bin/memcached -d -m 10 -u root -l 192.168.0.200 ...
随机推荐
- LInux中ThreadInfo中的preempt_count字段
最近看各种上下文,发现和ThreadInfo中的preemption字段密切,于是便调查了下. 看下Linux源码中的注释: /* * We put the hardirq and softirq c ...
- MySQL中的表级锁
数据的锁主要用来保证数据的一致性,数据库的锁从锁定的粒度上可以分为表级锁,行级锁和页级锁. MySQL的锁机制比较简单,其最显著的特点是不同的存储引擎支持不同的锁机制,比如MyISAM和MEMORY存 ...
- zabbix使用之常用功能使用心得
ZABBIX 使用 Written by: Jane.Hoo 1.zabbix监控概念介绍 项目(iterm)定义收集被监控的数据项,如收集被监控机内存使用情况 应用集(application)一些项 ...
- linux下python编辑器的tab补全
vi tab.py #!/usr/bin/env python # python startup file import sys import readline import rlcompleter ...
- obj比较
<script> var obj1={name:'one',age:30}; var obj2={name:'one',age:30}; //比较两个字符串对象的[值]是否相等 Objec ...
- CodeForces - 662C Binary Table (FWT)
题意:给一个N*M的0-1矩阵,可以进行若干次操作,每次操作将一行或一列的0和1反转,求最后能得到的最少的1的个数. 分析:本题可用FWT求解. 因为其0-1反转的特殊性且\(N\leq20\),将每 ...
- JVM性能调优(转)
本文转自:http://www.cnblogs.com/chen77716/archive/2010/06/26/2130807.html 最近因项目存在内存泄漏,故进行大规模的JVM性能调优 , 现 ...
- 【Python】装饰器 & 偏函数
[装饰器] 1.最简单的Decorator. def author(f): def addName(): print('My name is xkfx.\n') f() return addName ...
- Codeforces679E. Bear and Bad Powers of 42
传送门 今天子帧的一套模拟题的T3. 考试的时候其实已经想到了正解了,但是一些地方没有想清楚,就没敢写,只打了个暴力. 首先考虑用线段树维护区间信息. 先把每个值拆成两个信息,一是距离他最近的且大于他 ...
- spi nor flash使用汇总
Overview SPI flash, 分为spi flash, DUAL spi flash, QUAD spi flash, 3-wire spi, 4-wire spi, 6-wire spi. ...