博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[更新]缓存管理的帮助类(MemoryCache版,需要.net 4以上)
阅读量:7066 次
发布时间:2019-06-28

本文共 2402 字,大约阅读时间需要 8 分钟。

本来想发布下新版Luke.Net,正好刚刚再次重构了缓存的帮助类这里发布下:

测试代码

[Fact]        public void SimpleTest()        {            ICache
cacheMenager = MemoryCache
.Instance; var value = cacheMenager.Get(1, () => 1, TimeSpan.FromSeconds(10)); Assert.Equal(value, 1); value = cacheMenager.Get(1, () => 2, TimeSpan.FromSeconds(10)); Assert.Equal(value, 1); System.Threading.Thread.Sleep(10 * 1000); value = cacheMenager.Get(1, () => 3, TimeSpan.FromSeconds(10)); Assert.Equal(value, 3); }

 

接口

public interface ICache
{ TV Get
(TK cacheKey, Func
getUncachedValue, DateTimeOffset dateTimeOffset); TV Get
(TK cacheKey, Func
getUncachedValue, TimeSpan timeSpan); void Remove(TK cacheKey); }

 用到的单例类

public class SingletonProvider
where T : new() { SingletonProvider() { } public static T Instance { get { return SingletonCreator.instance; } } class SingletonCreator { static SingletonCreator() { } internal static readonly T instance = new T(); } }

 最后是更新后的缓存类,

public class MemoryCache
: ICache
{ private ObjectCache _memoryCache; public static MemoryCache
Instance { get { return SingletonProvider
>.Instance; } } public MemoryCache() : this(null) { } public MemoryCache(string name) { _memoryCache = new MemoryCache(string.Format("{0}-{1}-{2}", typeof(TK).Name, typeof(TV).Name, name)); } public TV Get
(TK cacheKey, Func
getUncachedValue, DateTimeOffset dateTimeOffset) { if (_memoryCache.Contains(ParseKey(cacheKey))) { return (TV)_memoryCache[ParseKey(cacheKey)]; } else { var v = getUncachedValue(); object o = v; _memoryCache.Set(ParseKey(cacheKey), o, dateTimeOffset); return v; } } public TV Get
(TK cacheKey, Func
getUncachedValue, TimeSpan timeSpan) { return Get(cacheKey, getUncachedValue, new DateTimeOffset(DateTime.UtcNow + timeSpan)); } public void Remove(TK cacheKey) { _memoryCache.Remove(ParseKey(cacheKey)); } private string ParseKey(TK key) { return key.GetHashCode().ToString(); } }

 

转载地址:http://lxxll.baihongyu.com/

你可能感兴趣的文章
js循环生成多个easyui datagrid数据网格时,初始化表格
查看>>
Python编程笔记(第三篇)【补充】三元运算、文件处理、检测文件编码、递归、斐波那契数列、名称空间、作用域、生成器...
查看>>
获取用户信息
查看>>
洛谷P3952 时间复杂度
查看>>
Leetcode | Parentheses 相关
查看>>
Ajax分页问题
查看>>
如何禁止内部viewPager滑动
查看>>
简单的转义字符
查看>>
RabbitMQ入门-Topic模式
查看>>
poj 2777 Count Color(线段树区间更新)
查看>>
Java数据结构与算法(5) - ch05链表(LinkList)
查看>>
CLR Via CSharp读书笔记(21):自动内存管理(垃圾回收)
查看>>
刚刚接触python的感想
查看>>
modelsim使用常见问题及解决办法集锦 ②
查看>>
常用的第三方库
查看>>
java 操作elasticsearch之搭建测试项目环境
查看>>
iOS-图文表并茂,手把手教你GCD
查看>>
python之logging模块
查看>>
让Android Studio支持系统签名
查看>>
3.5 Templates -- Binding Element Attributes(绑定元素属性)
查看>>