xcache本地缓存的设计(二)

四、 退出策略
一个缓存,它所存放的元素不可能无限制的增长,xcache限制了缓存元素的数量。如果放入缓存元素时,缓存已经满了,那我们将采用一定的策略从现有的缓存中选出一个缓存元素退出,再将新的缓存元素放入。现在支持三种策略,FIFO(先进先出),LFU(最不经常使用),LRU(最近最久未使用)。见下图。

 

OutPolicyFactory:退出策略工厂,它负责生产不同的退出策略,供缓存在满的时候使用。

OutPolicy:退出策略接口,它定义了一个选举方法,选一个元素退出。见下代码。

AbstractOutPolicy:抽象退出策略,它实现了选举方法,定义了一个比较抽象方法让子类实现。见下代码。

在vote方法中,我们看到先从存储器所有元素中选出几个候选人,再从候选人中选出一个元素。
如果存储器中元素很多,考虑到效率,不可能一个一个比较,所以选几个候选人比较合理。如果大于0个元素,小于10000个元素,最多10个候选人;如果大于10000个元素,最多100个候选人。
虽然储存器中元素是没有规则排列,可以随机取出一定数量的候选人;但为了体现公平原则,这里采用了分段随机抽取。如果有8002个元素,候选人有10个,间隔为800。见下坐标。
0----800----1600----2400----3200----4000----4800--------8000---8002
在每个间隔区间内,随机抽取1个候选人。

 

FifoPolicy:实现了先进先出策略。见下代码。

LfuPolicy:实现了最不经常使用策略。见下代码。

 

LruPolicy:实现了最近最久未使用策略。见下代码。

在实现各策略中,元素的统计信息派上了用场。

 

五、 缓存配置
为了灵活使用缓存,肯定要支持配置的,CacheFactory要根据配置生产一套定制的缓存。xcache暂支持properties文件的配置方式。见下示例xcache.properties。

xcache.caches:定义了缓存的名称,多个缓存之间用逗号分隔。

cacheConfig.缓存名.maxAmount:缓存最大元素数量,默认10000。

cacheConfig.缓存名.deleteExpireElementDelay:删除过期缓存元素延迟,单位毫秒。缓存初始化后,延迟一定时间后执行删除过期缓存元素。

cacheConfig.缓存名.deleteExpireElementInterval:删除过期缓存元素间隔,单位毫秒。下一次执行删除过期缓存元素的时间间隔。

cacheConfig.缓存名.logCacheStatDelay:记录缓存统计信息延迟,单位毫秒。缓存初始化后,延迟一定时间后执行记录缓存统计信息。

cacheConfig.缓存名.logCacheStatInterval:记录缓存统计信息间隔,单位毫秒。下一次执行记录缓存统计信息的时间间隔。

cacheConfig.缓存名.storeMedia:存储媒介(枚举:MEMORY),默认内存。

cacheConfig.缓存名.outPolicyType:退出策略类型(枚举:FIFO、LFU、LRU)。

六、 结语
通过两篇文章讲解了xcache本地缓存的设计,xcache已经具备了一个缓存的基本功能。下一步就是要实现分布式。想要对分布式缓存研究的朋友请加入一起讨论,我也希望能得到高人的指点。

欢迎访问我的开源空间:http://code.google.com/p/xcache-j/

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值