Spring boot Caffeine缓存
本地缓存解决方案-Caffeine Cache
深入解密来自未来的缓存-Caffeine
caffeine vs ehcache
Ehcache介绍及整合Spring实现高速缓存
Caffeine高性能设计
判断一个本地缓存的好坏最核心指标就是命中率和内存占用,影响命中率的因素有很多,比如业务场景,淘汰策略,清理策略,缓存容量
W-TinyLFU 淘汰算法的整体设计
淘汰策略是影响缓存命中率的很重要的因素,我们常用的有LRU或则LFU。W-TinyLFU很明显是一种变种的 LFU 的淘汰算法。
LRU和LRU的缺点
LRU实现非常简单,性能也非常好。LRU对突发的稀疏流量(sparse bursts)表现很好,但同时也会产生缓存污染,比如偶然性的要对全量数据进行遍历,那么“历史访问记录”就会被刷走,造成污染。也就是冷数据会顶掉热数据
如果数据的分布在一段时间内是固定的话,那么LFU可以达到最高的命中率。但是有两个很大的缺点:
维护每个记录项的频率信息,这是个巨大的开销;
对突发性的稀疏流量无力。
针对LRU和LFU都有很多改良算法,比如基于LRU的ARC等。
TinyLFU
TinyLFU就是基于LFU的改良算法。
解决LFU的第一个缺点是采用了Count–Min Sketch算法。
解决LFU的第二个缺点是让记录尽量保持相对的“新鲜”(Freshness Mechanism),并且当有新的记录插入时,可以让它跟老的记录进行“PK”,输者就会被淘汰,这样一些老的、不再需要的记录就会被剔除。