WhirlyCache

 
                                                                 WhirlyCache
借着最近项目用到cache,就顺便研究了一下cache 的设计,研究对象WhirlyCache 一个sun公司轻量的cache工具
作为一个cache的整体架构 他分这么几个模块
1.配置信息 包括config 文件和resource文件
Config文件 用来记录cacheManger 中需要的信息以及对每种cache 的属性记录,他的结构就是以cache 为基本单位,
<whirlyCache>
<cache>..</cache>
<cache>…</cache>
</whirlyCache>
 
而对于cache 我认为cache包括可以有一个或多个policy(cache策略)的定义,这些policy现在主要有 FIFO,LRU等等,这些多个policys组合成当前该cache的cache策略。除了主要策略 cache 还可以定义其他属性。
 
cacheConfig对象与config文件中的cache 声明可以认为是一一对应的
 
2.CacheManager cache管理器是cache功能中不可缺少的,和其他管理一样,通常cache管理器是singleton模式,他的功能如下:
A. load config文件, 将config文件load到内存,将每个cache信息set到对应的cacheconfig中
B. create cache 根据前面load config,根据不同的cacheconfig创建不同的cache,其中包括policy。
C.destroy 可以对manager中某个指定的cache进行destroy或者destroy 所有的cache
D.getCache 通过指定的name来获取缓存对象
E.shutdown 在Whirlycache中 他实现的其实是 destroy all caches 的功能, 我认为shutdown 应该是destroy all data in cachemanger的功能,包括unload config file
 
CacheManager的数据结构:
主要有两个Map 用来存放数据
一个是configMap 在load config之后,存放多个cacheConfig
另一个是caches 用于存放不同的cache。、
 
 
3.Cache 接口
Cache 应该具有如下功能
A. store 在cache中存放需要存放的对象
B.retrieve 在cache中获取需要的对象
C.remove 清除cache中的某个对象
D.size 获取cache的size
对于数据结构来说, 最终cache应该是map这种数据结构
而WhirlyCache中 cache中的key 有两种
一种就是map 中的object
另外一种就是他独有的对象 Cacheable object
 
4.Cacheable 只是whirlyCache中的一个接口,他下面有三个方法的声明
OnRemove,onRetreive,onStore。这个接口表示,当你将Cacheable object
作为cache的key的话,那么在执行cache中的remove,retrieve,store 三个操作
的时候,他同时调用cacheable中对于的onXXX方法。我们可以认为这个是Listener,
当做Store的操作时候,如果put 的key是 cacheable 也就对于调用Cacheable 的onStore方法,那么实现onStore 就能在store 触发器事件。
 
5.CachePolicy
所谓CachePolicy 就是cache的策略,那么他与ManagerCache 有关,需要为该Policy指定ManagerCache,  所以就有SetManagedCache(), 而某个Policy的属性是在配置文件中指定的,所以就有了SetConfig(). 那么有混淆的就是Cache 与 ManagedCache, 其实他们的区别在于一个是行为声明, 一个是具体的数据结构,后面会具体分析,而这里需要说明他们和Policy的关系不同的是,cache 中应该是可以有多个policy,他是面向用户的,用户通常说的“我为某个Cache 指定了这么几个策略组合” 那么这里的cache 就是指的Cache。而对于ManagedCache 他其实就是有个map实体,那么具体policy 的实现就是对该map的操作,比如FIFO 那么就要对这个map实行 FIFO的操作。
下面还有一个方法是Policy interface 必须声明的,那就是 performMaintenance(), 他就是具体执行该策略。Whirly 提供了下面几种CachePolicy:
a. FIFO    先进先出策略
b. LFU Least Frequently Used algorithm
c.LRU least recently used algorithm
Policy的机制:
首先需要一个Item对象, 他记录被引用的object最近被使用,最近用的,以及被使用的记录数等相关信息,在store的时候New 一个item 对象 一并put到managedCache,在执行cache中remove store retrieve等操作的时候同时需要更新item中的信息。当执行到某个策略的时候,首先需要根据不同的policy 实现不同的Comparator( AddedComparator CountComparator , UsedComparator) 而这些 Comparator Object 比较原则就是将前面说的 Item 的记录信息进行比较,然后将 Object 排序。 managedCache 根据相应的 Comparator 进行 Sort 。然后将 managedCache 中大于 Cache 设置大小的数据进行 remove ,这样整个过程就是performMaintenance
 
6. CacheDecorator
前面的cache只是接口,其实CacheDecrator才是cache的具体实现,前面的cache只是一个interface,他定义了面向用户接口的相关行为,具体他表示对于cache而言,提供给外部人员使用的行为接口。比如用户只要关心从cache中remove,retrieve object的这样的逻辑行为。而对于内部数据结构方面的具体操作,用户并不关心。为了清晰我们需要另外独立定义接口。这样我们定义了ManagedCache接口,他继承map  interface。同时可以在该接口中定义其他数据操作的方法。
AbstractMapBackedCache 是实现ManagedCache的抽象类,到这里就需要引入具体的数据结构,所以 AbstractMapBackedCache 中有个 map field 。而具体ManagedCache中的方法的实现,也是对该map 变量的操作。
下面我们讲讲题外话:
对于map type 在java世界中有很多种,有jdk里面的HashMap TreeMap 这些我们都比较熟悉,我们可以认为这些Map 是classic map而今天我们在WhirlyCache中看见了其他几个map 有的我也看到过 有的也是第一次。
ConcurrentHashMap
来源:
 
FastHashMapImpl
来源:
org.apache.commons.collections.FastHashMap
他是apache commons项目中collections的一个Map
 
SynchronizedHashMapImpl :
Collections.synchronizedMap( new HashMap())
他表示该HashMap 是synchronized,该Map保证了该对象任何时候的一致性
 
通过继承 AbstractMapBackedCache ,为他的 map field 设置不同的 map ,就实现不同的 cache 策略,这个策略有别与前面的 policy ,前面的是算法的策略,这里应该是数据结构的策略。
7.其他
a.实现对Hibernate Cache的控制 ,实现 net.sf.hibernate.cac he.Cache 接口
b. 添加关闭功能,当 ServletContext reload 的时候 具体实现 ServletContextListener
 
 
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值