更多文章,欢迎关注微信公众号:深夜程猿算法
LRU算法中文名叫“最近最少使用”,是一种数据缓存淘汰算法,能够实现基于磁盘和内存的缓存淘汰数组
LRU算法根据数据的历史使用记录来进行数据淘汰。LRU算法认为,最近被使用过的数据,那么未来会更多的被使用。LRU实现数据淘汰的原理就是当数据缓存达到预设的最大值时,就会淘汰最久未被使用的数据。缓存
LRU算法适用于须要常常访问某些热数据,而且大部分数据都会被重复访问的场景微信
使用数组实现LRU算法的基本过程以下:数据结构
使用单链表实现LRU算法基本过程以下:post
当存在热点数据时,而且这些大部分数据仍是常常被使用的,LRU命中率较高,不须要常常进行数据的添加和删除指针
若是只有不多的数据被常常使用,LRU算法很低效。由于LRU命中率很低,常常须要淘汰数据。也就是“缓存污染”问题,缓存的数据并无很大程度上重复使用cdn
LRU-K算法是为了解决LRU算法的“缓存污染”问题。能够认为,LRU算法就是LRU-1算法。LRU-K算法目的就是把LRU算法的“最近一次被使用”赋能为“最近K次被使用”。队列
LRU-K算法相比于LRU(LRU-1)算法,LRU-K算法一开始不会真正缓存数据,只有数据被使用过了K次才会放入缓存之中。那么,在数据没有被真正缓存以前,数据放在哪里的呢?如何记录使用次数的呢?LRU-K算法会多维护一个队列,用于保存数据的使用记录。但队列中的数据使用达到K次就取出来放进缓存。淘汰缓存数据和LRU(LRU-1)原理同样,第K次使用时间最先的先淘汰。内存
双队列LRU算法,使用FIFO队列和LRU队列缓存数据。和LRU-K不一样的是,双队列LRU算法两个队列都缓存数据,LRU-K算法只使用一个缓存队列缓存数据,一个队列记录数据使用状况
多队列模式LRU的原理是使用多个队列,按照数据不一样的使用频率来缓存数据,也就是多优先级缓存。命中的数据会逐渐从低优先级队列缓存到高优先级队列。高优先级队列的数据会逐渐从淘汰到低优先级队列,最后真正被淘汰