在实现缓存算法的时候,通常会考虑使用频率、获取成本、缓存容量和时间等因素。
Least-Recently-Used(LRU)
替换掉最近被请求最少的对象,也就是淘汰最长时间未被使用的对象。该算法可以通过跟踪对象的最后访问时间并依据最后访问时间排序实现。
Least-Frequently-Used(LFU)
替换掉访问次数最少的缓存,也就是淘汰一定时间内呗访问次数最少的对象。该算法可以通过跟踪对象在指定时间段内的访问次数并根据访问次数排序实现。
Least-Recently-Used(LRU2)
把被两次访问过的对象放入缓存池。当缓存池满了之后,会把有两次最少使用的缓存对象去除。
Two Queues(2Q)
把被访问的数据放到LRU的缓存中,如果这个对象再一次被访问,就把他转移到第二个、更大的LRU缓存。
SIZE
替换占用空间最大的对象。
LRU-Threshold
不缓存超过某一size的对象。
Log(Size)+LRU
替换size最大的对象,当size相同时,按LRU进行替换。
Hyper-G
LFU的改进版,同时考虑上次访问时间和对象size。
Pitkow/Recker
替换最近最少使用的对象,除非所有对象都是今天访问过的。如果是这样,则替换掉最大的对象。
Lowest-Latency-First
替换下载时间最少的文档。
Hybrid Hybrid
减少平均延迟。对缓存中的每个文档都会计算一个保留效用,保留效用最低的对象会被替换掉。
Lowest Relative Value(LRV)
LRV也是基于计算缓存中文档的保留效用,然后替换保留效用最低的文档。
Adaptive Replacement Cache(ARC)
介于LRU和LFU之间,由两个LRU组成,第一个包含的条目是最近只被使用过一次的,而第二个LRU包含的是最近被使用过两次的条目。
Most Recently Used(MRU)
移除最近最多被使用的对象。
First in First out(FIFO)
FIFO通过一个队列去跟踪所有的缓存对象,当缓存容量满时,排在前面的缓存对象会被剔除。
Random Cache
随机的替换缓存数据。