LRU算法
LRU,Least recently used[最近最少使用算法],该算法【或变种】被广泛用于缓存管理中,其设计思想是基于:经常被访问的数据在未来一段时间也会被访问,最近最少被访问的数据在未来一段时间内也将不会被访问;因此在缓存空间不足时可将最近最少被访问的数据移除空间。
最初设计很简单,可如下图所示,只对一个链表进行操作:
缓存污染,即是数据操作中存在大量的数据插入和更新时,可能会使大量的热点数据流失而大大降低缓存命中率。
上述设计的优点:算法实现简单,
缺点:抗干扰能力差,缓存移动的时间复杂度为:O(n).
LRU-K算法,即数据被访问K次才会被放入LRU队列,至于放置的位置可放于队首,也可放于队中。要实现LRU-K算法,要维护一个数据访问历史队列以用于判断数据是否满足被访问K次的条件。大致可如下图所示:
该设计的优点:缓存抗干扰能力强,缓存命中率高。
缺点:增加了算法实现和维护的复杂度,算法的空间复杂度为2N,时间复杂度为2N。
另一种设计:可提供较强的缓存抗干扰能力,而且算法的实现比较简单,并且算法的空间复杂度为N,时间复杂度为1.设计思想见下图: