面試的時候很容易被問到緩存的問題,比如數據庫裡有2000W數據,Redis中只存20W的數據,如何保證 Redis 中的數據都是熱點數據?
當 Redis 中的數據集上升到一定大小的時候,就需要實施數據淘汰策略,以保證 Redis 的內存不會被撐爆;那麼如何保證 Redis 中的數據都是熱點數據,需要先看看 Redis 有哪些數據淘汰策略。
Redis 數據淘汰策略
1.volatile-lru
從已設置過期時間的數據集中,挑選最近最少使用的數據淘汰;
2.volatile-ttl
從已設置過期時間的數據集中,挑選將要過期的數據淘汰;
3.volatile-random
從已設置過期時間的數據集中,任意選擇數據淘汰;
4.allkeys-lru
當內存不足以容納新寫入數據時,移除最近最少使用的key;
5.allkeys-random
從數據集中任意選擇數據淘汰;
6.no-eviction
禁止淘汰數據,也就是說當內存不足時,新寫入操作會報錯。
到了4.0版本後,又增加以下兩種淘汰策略:
7.volatile-lfu
從已設置過期時間的數據集中,挑選最不經常使用的數據淘汰(注意lfu和lru的區別);
8.allkeys-lfu
當內存不足以容納新寫入數據時,移除最不經常使用的key。
如何選擇策略規則
針對題目中的問題,還需要考慮數據的分佈情況:如果數據呈現冪律分佈,一部分數據訪問頻率高,一部分數據訪問頻率低,則可以使用allkeys-lru或allkeys-lfu;如果數據呈現平等分佈,所有的數據訪問頻率都相同,則使用allkeys-random。
限定redis佔用的內存,redis會根據自身數據淘汰策略,留下熱數據到內存。所以可以計算100w數據大約佔用的內存,
打開redis配置文件,然後設置一下redis內存限制即可,並將淘汰策略設置為allkeys-lru或者volatile-lru.
閱讀更多 全棧追夢人 的文章