緩存淘汰策略

緩存淘汰常見幾種策略:

1.FIFO(First In First Out)

若是一個數據最早進入緩存中,則應該最先淘汰掉算法

實現思路也是很簡單的, 套用消息隊列思路, 每次新生成緩存標記放到隊列尾部, 優先淘汰隊列頭部的數據.緩存

優勢: 實現簡單, 耗費資源少 缺點: 根據加入時間越早越淘汰, 若是屬於熱門數據, 將被反覆淘汰、加入, 下降緩存命中率markdown

2. LFU(Least Frequently Used)

最不常常使用,若是一個數據在最近一段時間內使用次數不多,那麼在未來一段時間內被使用的可能性也很小spa

這種方式解決了 FIFO 模式的對於熱門數據的劣勢, 在實現上按照訪問次數進行排列, 須要維護每一個記錄的訪問次數.code

優勢: 大部分場景提升緩存命中率 劣勢: 實現上內存消耗大, 某些場景例如秒殺數據, 短時期內訪問數增加奇高, 但以後沒有訪問, 但根據此算法很難短期內過時.orm

3. LRU(Least Recently Used)

最近最少使用,若是數據最近被訪問過,那麼未來被訪問的概率也更高隊列

相對於僅考慮時間因素的 FIFO 和僅考慮訪問頻率的 LFU,LRU 算法能夠認爲是相對平衡的一種淘汰算法內存

實現方式也很簡單, 維護一個隊列, 若是某條記錄被訪問了,則移動到隊尾,那麼隊首則是最近最少訪問的數據,淘汰該條記錄便可資源

優勢: 實現簡單, 解決了 FIFO 模式的一成不變也解決了 LFU 內存消耗、過時問題 缺點: 特殊場景下, 好比偶發現批量訪問非熱點緩存, 有致使熱點數據被移除風險.消息隊列