缓存算法
缓存算法(页面置换算法)FIFO、LFU、LRU
FIFO
先进先出。如果一个数据最先进入缓存中,则应该最早淘汰掉。
底层实现是双向链表。
LFU(Least Frequently Used)
最近最少使用算法。如果一个数据在最近一段时间内使用次数很少,那么在将来一段时间内被使用的可能性也很小。
底层实现是数组和hashmap。
LFU算法最简单的一种设计思路就是利用一个数组存储数据项,用hashmap存储每个数据项在数组中对应的位置,然后为每个数据项设计一个访问频次,当数据项被命中时,访问频次自增,在淘汰的时候淘汰访问频次最少的数据。这样一来的话,在插入数据和访问数据的时候都能达到O(1)的时间复杂度。
LRU
最近最久未使用。如果一个数据在最近一段时间没有被访问到,那么在将来它被访问的可能性也很小。
底层实现是链表和Hashmap。
当插入新数据时,如果新数据项在链表中存在(一般称为命中),则把该节点移到链表头部,如果不存在,则新建一个节点,放到链表头部。
在访问数据时,如果数据项在链表中存在,则把该节点移到链表头部,否则返回-1。
若缓存满了,则把链表最后一个节点删除即可。