2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > LRU缓存淘汰算法优化

LRU缓存淘汰算法优化

时间:2018-07-24 07:01:08

相关推荐

LRU缓存淘汰算法优化

上文中提到了LRU 缓存淘汰算法,可以帮助我们更好更合理的去使用缓存。但是它也有一个缺点就是如果有一些不满足“如果数据最近被访问过,那么将来被访问的几率也更高”的规律时,会破坏缓存,导致性能下降。如果缓存的容量比较小,这样还会导致一些热点搜索词的缓存被替换了出去,有可能导致一瞬间大量的请求访问DB 发生缓存击穿。或者 偶然的数据影响会造成命中率较低,比如某个数据即将到达底部即将被淘汰,但由于一次的请求又放入了头部,此后再无该数据的请求,那么该数据的继续存在其实是不合理的

这边仅仅给出一种解决的方法仅供参考

针对这类情况LRU-K算法拥有更好的解决措施。结构图如下所示:

LRU-K需要多维护一个队列或者更多,用于记录所有缓存数据被访问的历史。只有当数据的访问次数达到K次的时候,才将数据放入缓存。当需要淘汰数据时,LRU-K会淘汰第K次访问时间距当前时间最大的数据。

第一步添加数据照样放入第一个队列的头部

如果数据在该队列里访问没有达到K次(该数值根据具体系统qps来定)则会继续到达链表底部直至淘汰;如果该数据在队列中时访问次数达到了K次,那么它会被加入到接下来的2级(具体需要几级结构也同样结合系统分析)链表中,按照时间顺序在2级链表中排列

接下来2级链表中的操作与上面算法相同,链表中的数据如果再次被访问则移到头部,链表满时,底部数据淘汰

相比LRU,LRU-K需要多维护一个队列,用于记录所有缓存数据被访问的历史,所以需要更多的内存空间来用来构建缓存,但优点也很明显,较好的降低了数据的污染率提高了缓存的命中率,对于系统来说可以用一定的硬件成本来换取系统性能也不失为一种办法。

欢迎关注,更多惊喜等着你

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。