缓存管理的帮助类(更新clear)

简介:
public  class  DictionaryCacheManager<TK,TV>
{
     private  Dictionary<TK, TV> cacheDic = new  Dictionary<TK,TV>();
     private  Dictionary<TK, object > lockDic = new  Dictionary<TK, object >();
 
     public  TV Get(TK key,Func<TV> getValue)
     {
         if (!CheckKey(key))
         {
             CheckLock(key);
         }
         
         if (!CheckKey(key))
         {
             lock (lockDic[key])
             {
                 if (!CheckKey(key)||cacheDic[key]== null )
                 {
                     cacheDic[key] = getValue();
                 }
             }
         }
         return  cacheDic[key];
     }
 
     private  object  _lock = new  object ();
     private  void  CheckLock(TK key)
     {
         lock (_lock)
         {
             if (!lockDic.ContainsKey(key))
             {
                 lockDic.Add(key, new  object ());
             }
         }
     }
 
     private  bool  CheckKey(TK key)
     {
         return  cacheDic.ContainsKey(key);
     }
 
     public  void  Clear()
     {
         lock (_lock)
         {
             lockDic.Clear();
             cacheDic.Clear();
         }
     }
     public  void  Clear(TK key)
     {
         lock (lockDic[key])
         {
             cacheDic.Remove(key);
         }
     }
}

 

很简单


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

相关文章
|
2月前
|
消息中间件 缓存 NoSQL
利用Redis实现高效缓存管理与加速
本文将探讨如何利用Redis作为缓存管理工具,通过深入分析Redis的特性、使用场景和优势,帮助开发人员更好地理解和应用Redis来提升系统性能和响应速度。
|
3月前
|
存储 缓存 前端开发
JavaScrip实现一个有时间限制的缓存类
JavaScrip实现一个有时间限制的缓存类
17 0
|
5月前
|
缓存 NoSQL Apache
Shiro - 缓存管理与CacheManagerAware接口
Shiro - 缓存管理与CacheManagerAware接口
40 0
|
9月前
|
消息中间件 设计模式 存储
高效协作处理缓存清理需求:生产者-消费者模式助力多模块缓存管理
在现代应用系统中,缓存是提高性能和减少数据库负载的重要手段之一。然而,缓存的数据在某些情况下可能会过期或者变得无效,因此需要及时进行清理。在复杂的应用系统中,可能有多个系统、多个模块产生缓存清理需求,而这些系统、模块之间的清理任务需要高效的协作,以避免数据竞争和资源浪费的问题。
99 0
高效协作处理缓存清理需求:生产者-消费者模式助力多模块缓存管理
|
缓存 小程序 JavaScript
【微信小程序】缓存数据库操作类——prototype和ES6方法
将post数据在缓存数据库中的key,postList赋值给构造函数的this变量。这个postList必须和初始化数据库时设置的文章数据的key相同,否则无法读取数据。
88 0
|
缓存 PHP
在Yii2.0框架中,可以使用yii\caching\TagDependency类来实现对缓存的依赖管理,这个类可以在缓存失效时自动清除缓存。使用前需要先use吗?
在Yii2.0框架中,可以使用yii\caching\TagDependency类来实现对缓存的依赖管理,这个类可以在缓存失效时自动清除缓存。使用前需要先use吗?
|
存储 缓存 NoSQL
Yii2.0的ActiveRecord类的缓存是干什么的?底层原理是什么?具体如何使用?
Yii2.0的ActiveRecord类的缓存是干什么的?底层原理是什么?具体如何使用?
110 0
|
缓存 NoSQL 调度
微服务实践01--微服务管理11--缓存04--实践01--缓存使用
微服务实践01--微服务管理11--缓存04--实践01--缓存使用
165 0
微服务实践01--微服务管理11--缓存04--实践01--缓存使用
|
设计模式 存储 缓存
微服务实践01--微服务管理11--缓存03--典型缓存架构设计
微服务实践01--微服务管理11--缓存03--典型缓存架构设计
336 0
微服务实践01--微服务管理11--缓存03--典型缓存架构设计