简单缓存Cache
接口
interface ICache
{
/// <summary>
/// 添加
/// </summary>
/// <param name="key"></param>
/// <param name="value"></param>
/// <param name="expiratTime"></param>
void Add(string key, object value, int expiratTime = 30);
/// <summary>
/// 获取
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="key"></param>
/// <returns></returns>
T Get<T>(string key);
/// <summary>
/// 是否包含
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
bool Contains(string key);
/// <summary>
/// 删除指定key
/// </summary>
/// <param name="key"></param>
void Remove(string key);
/// <summary>
/// 删除所有
/// </summary>
void RemoveAll();
/// <summary>
/// 索引访问器
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
object this[string key] { get; set; }
/// <summary>
/// 数量
/// </summary>
int Count { get; }
}
实现类:
public class CustomerCache : ICache
{
private static Dictionary<string, KeyValuePair<object, DateTime>> _dictionary = new Dictionary<string, KeyValuePair<object, DateTime>>(); static CustomerCache()
{
new Action(() =>
{
while (true)
{
Thread.Sleep(100);
foreach (var item in _dictionary.Where(t => t.Value.Value < DateTime.Now))
{
_dictionary.Remove(item.Key);
}
}
}).BeginInvoke(null, null);
} public void Add(string key, object value, int expiratTime = 30)
{
KeyValuePair<object, DateTime> keyValue = new KeyValuePair<object, DateTime>(value, DateTime.Now.AddMinutes(expiratTime));
_dictionary[key] = keyValue;
} public bool Contains(string key)
{
if (_dictionary.ContainsKey(key))
{
KeyValuePair<object, DateTime> keyValue = _dictionary[key];
if (keyValue.Value > DateTime.Now)//没有过期
{
return true;
}
else
{
_dictionary.Remove(key);//过期清除
return false;
}
}
return false;
} public T Get<T>(string key)
{
if (_dictionary.ContainsKey(key))
{
KeyValuePair<object, DateTime> keyValue = _dictionary[key];
if (keyValue.Value > DateTime.Now)//没有过期
{
return (T)keyValue.Key;
}
else
{
_dictionary.Remove(key);//过期清除
return default(T);
}
}
return default(T);
} public void Remove(string key)
{
_dictionary.Remove(key);
} public void RemoveAll()
{
_dictionary = new Dictionary<string, KeyValuePair<object, DateTime>>();
} public object this[string key]
{
get
{
return this.Get<object>(key);
}
set
{
this.Add(key, value);
}
} public int Count
{
get
{
return _dictionary.Values.Where(t => t.Value > DateTime.Now).Count();
}
} }
缓存管理器:
public class CacheManager
{
private CacheManager()
{ } private static ICache cache = null; static CacheManager()
{
cache = (ICache)Activator.CreateInstance(typeof(CustomerCache));
} #region ICache
public static int Count
{
get { return cache.Count; }
} public static bool Contains(string key)
{
return cache.Contains(key);
} public static T Get<T>(string key)
{
return cache.Get<T>(key);
} public static void Add(string key, object value, int expiratTime = 30)
{
if (Contains(key))
cache.Remove(key);
cache.Add(key, value, expiratTime);
}
/// <summary>
/// 删除缓存数据项
/// </summary>
/// <param name="key"></param>
public static void Remove(string key)
{
cache.Remove(key);
} /// <summary>
/// 删除所有缓存数据项
/// </summary>
public static void RemoveAll()
{
cache.RemoveAll();
}
#endregion
}
简单缓存Cache的更多相关文章
- [.net 面向对象程序设计进阶] (15) 缓存(Cache)(二) 利用缓存提升程序性能
[.net 面向对象程序设计进阶] (15) 缓存(Cache)(二) 利用缓存提升程序性能 本节导读: 上节说了缓存是以空间来换取时间的技术,介绍了客户端缓存和两种常用服务器缓布,本节主要介绍一种. ...
- [.net 面向对象程序设计进阶] (14) 缓存(Cache) (一) 认识缓存技术
[.net 面向对象程序设计进阶] (14) 缓存(Cache)(一) 认识缓存技术 本节导读: 缓存(Cache)是一种用空间换时间的技术,在.NET程序设计中合理利用,可以极大的提高程序的运行效率 ...
- .Net自带缓存Cache的使用
对于数据比较大,经常要从数据库拿出来用的,可以考虑使用.Net自带的缓存Cache,简单好用: //向内存中插入一个缓存 System.Web.HttpRuntime.Cache.Insert(&qu ...
- 缓存Cache
转载自 博客futan 这篇文章将全面介绍有关 缓存 ( 互动百科 | 维基百科 )cache以及利用PHP写缓存caching的技术. 什么是缓存Cache? 为什么人们要使用它? 缓存 Cach ...
- ASP.NET缓存 Cache
缓存介绍 如果每次进入页面的时候都查询数据库生成页面内容的话,如果访问量非常大,则网站性能会非常差,而如果只有第一次访问的时候才查询数据库生成页面内容,以后都直接输出内容,则能提高系统性能,这样无论多 ...
- ASP.NET状缓存Cache的应用-提高数据库读取速度
原文:ASP.NET状缓存Cache的应用-提高数据库读取速度 一. Cache概述 既然缓存中的数据其实是来自数据库的,那么缓存中的数据如何和数据库进行同步呢?一般来说,缓存中应该存放改 ...
- 网页的缓存Cache与控制
什么是缓存 Cache? 缓存位于客户端与服务器之间, 或者服务器与服务器之间.它决定是否保存所获资源的副本,以及如何使用副本,何时更新副本,这里所说的资源包括页面的HTML, 图片,文件等等. 使用 ...
- jquery ui dialog弹出窗 清空缓存Cache或强制刷新
我用jquery ui 弹出一个购物车的对话,通过AJAX加载的数据.发现购物车被缓存,一直看到是旧数据.为了刷新购物车更新,我必须去加一个刷新按钮,点击后更新购物车页面.有没有一种方法来自动刷新加载 ...
- POCO库——Foundation组件之缓存Cache
缓存Cache:内部提供多种缓存Cache机制,并对不同机制的管理缓存策略不同实现: ValidArgs.h :ValidArgs有效键参数类,模板参数实现,_key:键,_isValid:是否有效, ...
随机推荐
- 注解形式读取properties文件中的属性
1.spring.xml中加入(多个properties 用逗号隔开) <context:property-placeholder location="classpath:jdbc. ...
- The Karplus-Strong Algorithm
本系列文章由 @YhL_Leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/48730857 Karplus-Stro ...
- java 项目 导入成功后jsp页面报错处理方法
本人新导入一个maven项目可是jsp页面一直报错,我先按照网上的经验操作如下步骤: 在pom.xml配置文件中添加上javax.servlet的相关依赖: <dependency> & ...
- hdu5137 How Many Maos Does the Guanxi Worth(单源最短路径)
题目链接:pid=5137">点击打开链接 题目描写叙述:如今有一张关系网.网中有n个结点标号为1-n.有m个关系,每一个关系之间有一个权值.问从2-n-1中随意去掉一个结点之后,从1 ...
- Android 主界面长按创建快捷方式
Android中创建快捷方式主要有两种方式.一是在代码中直接加入生成桌面快捷方式的代码:二是通过小部件加入; 这篇文章主要讲另外一种方法! 1.通过在AndroidManifest文件里为Activi ...
- 福利贴——爬取美女图片的Java爬虫小程序代码
自己做的一个Java爬虫小程序 废话不多说.先上图. 目录命名是用标签缩写,假设大家看得不顺眼能够等完成下载后手动改一下,比方像有强迫症的我一样... 这是挂了一个晚上下载的总大小,只是还有非常多由于 ...
- android 自己定义标签的使用,实现扁平化UI设计
2014年8月6日11:06:44 android对自己定义标签的使用.实现扁平化UI设计: 1.attrs.xml文件里自己定义标签 如: <?xml version="1.0&qu ...
- less06 引入(importing)
main.less @wp:960px; .colorsss{ color: darkgreen; } index.css .color{ color: #ff6600; } style.less / ...
- [转]Python UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position 的解决办法
UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position 的解决办法 python在安装时,默认的编码是ascii,当 ...
- 83.导入项目时,用npm install安装module
npm install 正因为有了npm,我们只要一行命令,就能安装别人写好的模块 .