如何保證 Redis 中的數據都是熱點數據?


面試的時候很容易被問到緩存的問題,比如數據庫裡有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.

如何保證 Redis 中的數據都是熱點數據?


分享到:


相關文章: