當redis使用的記憶體超過了設定的最大記憶體時,會觸發redis的key淘汰機制,在redis 3.0中有6種淘汰策略:
noeviction: 不刪除策略。當達到最大記憶體限制時, 如果需要使用更多記憶體,則直接傳回錯誤訊息。 (redis預設淘汰策略)
allkeys-lru: 在所有key中優先刪除最近最少使用(less recently used ,LRU) 的 key。 (建議學習:Redis影片教學)
allkeys-random: 在所有key中隨機刪除一部分 key。
volatile-lru: 在設定了超時時間(expire )的key中優先刪除最近最少使用(less recently used ,LRU) 的 key。
volatile-random: 在設定了逾時時間(expire)的key中隨機刪除一部分 key。
volatile-ttl: 在設定了超時時間(expire )的key中優先刪除剩餘時間(time to live,TTL) 短的key。
場景:
資料庫中有1000w的數據,而redis只有50w數據,如何保證redis中10w數據都是熱點數據?
方案:
限定 Redis 佔用的內存,Redis 會根據自身資料淘汰策略,留下熱資料到記憶體。 所以,計算一下 50W 資料大約佔用的內存,然後設定 Redis 內存限制即可,並將淘汰策略為volatile-lru或allkeys-lru。
設定Redis最大佔用記憶體:
#開啟redis設定文件,設定maxmemory參數,maxmemory是bytes位元組類型
# In short... if you have slaves attached it is suggested that you set a lower # limit for maxmemory so that there is some free RAM on the system for slave # output buffers (but this is not needed if the policy is 'noeviction'). # # maxmemory <bytes> maxmemory 268435456
#設定過期策略:
maxmemory-policy volatile-lru
更多Redis相關技術文章,請造訪Redis入門教學欄位學習!
以上是如何保證redis中都是熱點數據的詳細內容。更多資訊請關注PHP中文網其他相關文章!