网站建设征求意见表,网站制作项目分析怎么做 方法,建设三轮摩托车官网,黄页88网能不能发免费的广告Caffeine 是基于Java 8 开发的、提供了近乎最佳命中率的高性能本地缓存组件#xff0c;Spring5 开始不再支持 Guava Cache#xff0c;改为使用 Caffeine。
1 算法原理 对于 Java 进程内缓存我们可以通过 HashMap 来实现。不过#xff0c;Java 进程内存是有限的#xff0c;…Caffeine 是基于Java 8 开发的、提供了近乎最佳命中率的高性能本地缓存组件Spring5 开始不再支持 Guava Cache改为使用 Caffeine。
1 算法原理 对于 Java 进程内缓存我们可以通过 HashMap 来实现。不过Java 进程内存是有限的不可能无限地往里面放缓存对象。这就需要有合适的算法辅助我们淘汰掉使用价值相对不高的对象为新进的对象留有空间。常见的缓存淘汰算法有 FIFO、LRU、LFU。
FIFO(First In First Out)先进先出。
它是优先淘汰掉最先缓存的数据、是最简单的淘汰算法。缺点是如果先缓存的数据使用频率比较高的话那么该数据就不停地进进出出因此它的缓存命中率比较低。
LRU(Least Recently Used)最近最久未使用。
它是优先淘汰掉最久未访问到的数据。缺点是不能很好地应对偶然的突发流量。比如一个数据在一分钟内的前59秒访问很多次而在最后1秒没有访问但是有一批冷门数据在最后一秒进入缓存那么热点数据就会被冲刷掉。
LFU(Least Frequently Used)
最近最少频率使用。它是优先淘汰掉最不经常使用的数据需要维护一个表示使用频率的字段。
主要有两个缺点
一、如果访问频率比较高的话频率字段会占据一定的空间
二、无法合理更新新上的热点数据比如某个歌手的老歌播放历史较多新出的歌如果和老歌一起排序的话就永无出头之日。
2.1.2 W-TinyLFU 算法
Caffeine 使用了 W-TinyLFU 算法解决了 LRU 和LFU上述的缺点。W-TinyLFU 算法由论文《TinyLFU: A Highly Efficient Cache Admission Policy》提出。
它主要干了两件事
一、采用 Count–Min Sketch 算法降低频率信息带来的内存消耗
二、维护一个PK机制保障新上的热点数据能够缓存。