之前做的功能,程序可能有不足之处,但还是要记录下

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 缓存的更多相关文章

  1. 从零开始学 Java - Spring 集成 Memcached 缓存配置(二)

    Memcached 客户端选择 上一篇文章 从零开始学 Java - Spring 集成 Memcached 缓存配置(一)中我们讲到这篇要谈客户端的选择,在 Java 中一般常用的有三个: Memc ...

  2. .NET跨平台之旅:基于.NET Core改写EnyimMemcached,实现Linux上访问memcached缓存

    注:支持 .NET Core 的 memcached 客户端 EnyimMemcachedCore 的 NuGet 包下载地址:https://www.nuget.org/packages/Enyim ...

  3. redis和memcached缓存

    memcached memcache开源的,高性能,高并发分布式内存缓存系统,天生支持集群 memcached下载地址: http://memcached.org/downloads python实现 ...

  4. 应对Memcached缓存失效,导致高并发查询DB的四种思路(l转)

    当Memcached缓存失效时,容易出现高并发的查询DB,导致DB压力骤然上升. 这篇blog主要是探讨如何在缓存将要失效时,及时地更新缓存,而不是如何在缓存失效之后,如何防止高并发的DB查询. 解决 ...

  5. memcached 缓存服务器

    Memcached 缓存服务器 Memcached 是高性能的分布式内存缓存服务器. 一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态web应用的速度.提高可扩展性. 主要特点 ...

  6. Memcached缓存瓶颈分析

    Memcached缓存瓶颈分析 获取Memcached的统计信息 Shell: # echo "stats" | nc 127.0.0.1 11211 PHP: $mc = new ...

  7. 通过spring.net中的spring.caching CacheResult实现memcached缓存

    通过spring.net中的spring.caching CacheResult实现memcached缓存1.SpringMemcachedCache.cs2.APP.config3.Program. ...

  8. Windows系统下Memcached缓存系列二:CouchbaseClient(c#客户端)的详细试用,单例模式

    在上一篇文章里面 ( Windows系统下Memcached缓存系列一:Couchbase(服务器端)和CouchbaseClient(c#客户端)的安装教程 ),我们介绍了服务器端的安装和客户端的安 ...

  9. memcached缓存雪崩现象及解决办法

    1)什么是缓存雪崩?场景:一个访问很大的文章(论坛之类)的网站,使用memcached缓存用户查询过的文章.设置的缓存过期时间为6小时,所以没过6小时,缓存就会失效并重建一遍 问题:过六小时时,一部分 ...

  10. 受教了,memcache比较全面点的介绍,受益匪浅,适用memcached的业务场景有哪些?memcached的cache机制是怎样的?在设计应用时,可以通过Memcached缓存那些内容?

    基本问题 1.memcached的基本设置 1)启动Memcache的服务器端 # /usr/local/bin/memcached -d -m 10 -u root -l 192.168.0.200 ...

随机推荐

  1. LInux中ThreadInfo中的preempt_count字段

    最近看各种上下文,发现和ThreadInfo中的preemption字段密切,于是便调查了下. 看下Linux源码中的注释: /* * We put the hardirq and softirq c ...

  2. MySQL中的表级锁

    数据的锁主要用来保证数据的一致性,数据库的锁从锁定的粒度上可以分为表级锁,行级锁和页级锁. MySQL的锁机制比较简单,其最显著的特点是不同的存储引擎支持不同的锁机制,比如MyISAM和MEMORY存 ...

  3. zabbix使用之常用功能使用心得

    ZABBIX 使用 Written by: Jane.Hoo 1.zabbix监控概念介绍 项目(iterm)定义收集被监控的数据项,如收集被监控机内存使用情况 应用集(application)一些项 ...

  4. linux下python编辑器的tab补全

    vi tab.py #!/usr/bin/env python # python startup file import sys import readline import rlcompleter ...

  5. obj比较

    <script> var obj1={name:'one',age:30}; var obj2={name:'one',age:30}; //比较两个字符串对象的[值]是否相等 Objec ...

  6. CodeForces - 662C Binary Table (FWT)

    题意:给一个N*M的0-1矩阵,可以进行若干次操作,每次操作将一行或一列的0和1反转,求最后能得到的最少的1的个数. 分析:本题可用FWT求解. 因为其0-1反转的特殊性且\(N\leq20\),将每 ...

  7. JVM性能调优(转)

    本文转自:http://www.cnblogs.com/chen77716/archive/2010/06/26/2130807.html 最近因项目存在内存泄漏,故进行大规模的JVM性能调优 , 现 ...

  8. 【Python】装饰器 & 偏函数

    [装饰器] 1.最简单的Decorator. def author(f): def addName(): print('My name is xkfx.\n') f() return addName ...

  9. Codeforces679E. Bear and Bad Powers of 42

    传送门 今天子帧的一套模拟题的T3. 考试的时候其实已经想到了正解了,但是一些地方没有想清楚,就没敢写,只打了个暴力. 首先考虑用线段树维护区间信息. 先把每个值拆成两个信息,一是距离他最近的且大于他 ...

  10. spi nor flash使用汇总

    Overview SPI flash, 分为spi flash, DUAL spi flash, QUAD spi flash, 3-wire spi, 4-wire spi, 6-wire spi. ...