5.3、自动刷新
自动刷新操作,在guava cache中实现相对比较简单,直接通过查询,判断其是否满足刷新条件,进行刷新 。
5.4、其他特性
在Guava cache中还有一些其他特性:
虚引用
在Guava cache中,key和value都能进行虚引用的设定,在Segment中的有两个引用队列:

文章插图
这两个队列用来记录被回收的引用,其中每个队列记录了每个被回收的Entry的hash,这样回收了之后通过这个队列中的hash值就能把以前的Entry进行删除 。
删除监听器
在guava cache中,当有数据被淘汰时,但是你不知道他到底是过期,还是被驱逐,还是因为虚引用的对象被回收?这个时候你可以调用这个方法removalListener(RemovalListener listener)添加监听器进行数据淘汰的监听,可以打日志或者一些其他处理,可以用来进行数据淘汰分析 。
在RemovalCause记录了所有被淘汰的原因:被用户删除,被用户替代,过期,驱逐收集,由于大小淘汰 。guava cache的总结
细细品读guava cache的源码总结下来,其实就是一个性能不错的,api丰富的LRU Map 。爱奇艺的缓存的发展也是基于此之上,通过对guava cache的二次开发,让其可以进行java应用服务之间的缓存更新 。
6、走向未来-caffeineguava cache的功能的确是很强大,满足了绝大多数的人的需求,但是其本质上还是LRU的一层封装,所以在众多其他较为优良的淘汰算法中就相形见绌了 。而caffeine cache实现了W-TinyLFU(LFU+LRU算法的变种) 。下面是不同算法的命中率的比较:

文章插图
其中Optimal是最理想的命中率,LRU和其他算法相比的确是个弟弟 。而我们的W-TinyLFU 是最接近理想命中率的 。当然不仅仅是命中率caffeine优于了guava cache,在读写吞吐量上面也是完爆guava cache 。

文章插图
这个时候你肯定会好奇为啥这么caffeine这么牛逼呢?别着急下面慢慢给你道来 。
6.1、W-TinyLFU
上面已经说过了传统的LFU是怎么一回事 。在LFU中只要数据访问模式的概率分布随时间保持不变时,其命中率就能变得非常高 。这里我还是拿爱奇艺举例,比如有部新剧出来了,我们使用LFU给他缓存下来,这部新剧在这几天大概访问了几亿次,这个访问频率也在我们的LFU中记录了几亿次 。但是新剧总会过气的,比如一个月之后这个新剧的前几集其实已经过气了,但是他的访问量的确是太高了,其他的电视剧根本无法淘汰这个新剧,所以在这种模式下是有局限性 。所以各种LFU的变种出现了,基于时间周期进行衰减,或者在最近某个时间段内的频率 。同样的LFU也会使用额外空间记录每一个数据访问的频率,即使数据没有在缓存中也需要记录,所以需要维护的额外空间很大 。
可以试想我们对这个维护空间建立一个hashMap,每个数据项都会存在这个hashMap中,当数据量特别大的时候,这个hashMap也会特别大 。再回到LRU,我们的LRU也不是那么一无是处,LRU可以很好的应对突发流量的情况,因为他不需要累计数据频率 。
所以W-TinyLFU结合了LRU和LFU,以及其他的算法的一些特点 。
6.2、频率记录
首先要说到的就是频率记录的问题,我们要实现的目标是利用有限的空间可以记录随时间变化的访问频率 。在W-TinyLFU中使用Count-Min Sketch记录我们的访问频率,而这个也是布隆过滤器的一种变种 。如下图所示:

文章插图
如果需要记录一个值,那我们需要通过多种Hash算法对其进行处理hash,然后在对应的hash算法的记录中+1,为什么需要多种hash算法呢?由于这是一个压缩算法必定会出现冲突,比如我们建立一个Long的数组,通过计算出每个数据的hash的位置 。比如张三和李四,他们两有可能hash值都是相同,比如都是1那Long[1]这个位置就会增加相应的频率,张三访问1万次,李四访问1次那Long[1]这个位置就是1万零1,如果取李四的访问评率的时候就会取出是1万零1,但是李四命名只访问了1次啊,为了解决这个问题,所以用了多个hash算法可以理解为long[][]二维数组的一个概念,比如在第一个算法张三和李四冲突了,但是在第二个,第三个中很大的概率不冲突,比如一个算法大概有1%的概率冲突,那四个算法一起冲突的概率是1%的四次方 。通过这个模式我们取李四的访问率的时候取所有算法中,李四访问最低频率的次数 。所以他的名字叫Count-Min Sketch 。
推荐阅读
- 快收藏! 30 分钟包你学会 AWK
- 5款茶有效助你减掉腹部脂肪
- 律师|疫情之下,你知道赚钱的职业还有哪些吗?
- 一 鐘乳酒的功效与作用
- 豬膽酒的功效与作用
- 衰老|不化妆出门是一种什么感觉?
- 冬季饮食的五大误区,你中招了吗?
- 8款保健茶助你轻松下火治溃疡
- 汽车打不着火怎么办?除了花钱救援,老司机告诉你几个小妙招
- 5大养生花草茶助你春季驱寒邪
