缓存管理的帮助类(MemoryCache版,.net 4以上支持)

简介:
using  System;
using  System.Collections.Generic;
using  System.Linq;
using  System.Runtime.Caching;
using  System.Text;
 
namespace  CNBlogs.Zzk.Domain.Entities
{
     public  class  DictionaryCacheManager<TK, TV> 
     {
         private  ObjectCache memoryCache;
 
         public  DictionaryCacheManager(): this ( null ){}
         public  DictionaryCacheManager( string  name)
         {
 
             memoryCache = new  MemoryCache( string .Format( "{0}-{1}-{2}" , typeof  (TK).Name, typeof  (TV).Name, name));
         }
 
         public  TV Get(TK key,Func<TV> getValue)
         {
             if (memoryCache.Contains(key.ToString()))
             {
                 return  (TV)memoryCache[key.ToString()];
             }
             else
             {
                 var  policy = new  CacheItemPolicy();
                 var   v = getValue();
                 object  o = v;
                 memoryCache.Set(key.ToString(), o, policy);
                 return  v;
             }
         }
 
         public  TV Get(TK key, Func<TV> getValue,DateTimeOffset dateTimeOffset)
         {
             if  (memoryCache.Contains(key.ToString()))
             {
                 return  (TV)memoryCache[key.ToString()];
             }
             else
             {
                 var  v = getValue();
                 object  o = v;
                 memoryCache.Set(key.ToString(), o, dateTimeOffset);
                 return  v;
             }
         }
 
         public  void  Clear()
         {
             memoryCache.ToList().ForEach(kv => memoryCache.Remove(kv.Key));
         }
         public  void  Clear(TK key)
         {
             memoryCache.Remove(key.ToString());
         }
 
     }
}

 


本文转自today4king博客园博客,原文链接:http://www.cnblogs.com/jinzhao/archive/2012/06/11/2545450.html,如需转载请自行联系原作者

相关文章
|
4月前
|
SQL 缓存 开发框架
分享一个 .NET EF6 应用二级缓存提高性能的方法
分享一个 .NET EF6 应用二级缓存提高性能的方法
|
7月前
|
开发框架 .NET 中间件
七天.NET 8操作SQLite入门到实战 - (2)第七天Blazor班级管理页面编写和接口对接
七天.NET 8操作SQLite入门到实战 - (2)第七天Blazor班级管理页面编写和接口对接
158 7
|
4月前
|
缓存 NoSQL Java
【Azure Redis 缓存 Azure Cache For Redis】Redis出现 java.net.SocketTimeoutException: Read timed out 异常
【Azure Redis 缓存 Azure Cache For Redis】Redis出现 java.net.SocketTimeoutException: Read timed out 异常
|
4月前
|
缓存 NoSQL 网络协议
【Azure Redis 缓存】Redisson 连接 Azure Redis出现间歇性 java.net.UnknownHostException 异常
【Azure Redis 缓存】Redisson 连接 Azure Redis出现间歇性 java.net.UnknownHostException 异常
112 1
|
4月前
|
缓存 程序员
封装一个给 .NET Framework 用的内存缓存帮助类
封装一个给 .NET Framework 用的内存缓存帮助类
|
4月前
|
缓存 开发框架 .NET
看看 Asp.net core Webapi 项目如何优雅地使用内存缓存
看看 Asp.net core Webapi 项目如何优雅地使用内存缓存
109 1
|
4月前
|
存储 缓存 开发框架
看看 Asp.net core Webapi 项目如何优雅地使用分布式缓存
看看 Asp.net core Webapi 项目如何优雅地使用分布式缓存
|
4月前
.Net Core 中 MemoryCache 使用
.Net Core 中 MemoryCache 使用
105 0
|
5月前
|
设计模式 存储 缓存
Java面试题:结合单例模式与Java内存模型,设计一个线程安全的单例类?使用内存屏障与Java并发工具类,实现一个高效的并发缓存系统?结合观察者模式与Java并发框架,设计一个可扩展的事件处理系统
Java面试题:结合单例模式与Java内存模型,设计一个线程安全的单例类?使用内存屏障与Java并发工具类,实现一个高效的并发缓存系统?结合观察者模式与Java并发框架,设计一个可扩展的事件处理系统
43 0
|
5月前
|
人工智能 C#
Jvedio:.NET开源功能强大的本地视频管理神器
Jvedio:.NET开源功能强大的本地视频管理神器
252 0