Redis中的淘汰策略
生活随笔
收集整理的這篇文章主要介紹了
Redis中的淘汰策略
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Redis 的內存淘汰策略,是指當內存使用達到最大內存極限時,需要使用淘汰算法來決定清理掉哪些數據,以保證新數據的存入。
?
最大內存設置
redis.conf 參數配置:
# maxmemory <bytes>如果不設置maxmemory 或者設置為0,64 位系統不限制內存,32 位系統最多使用3GB 內存。
動態修改:
redis> config set maxmemory 2GB到達最大內存以后怎么辦?
?
淘汰策略
https://redis.io/topics/lru-cache
redis.conf
# maxmemory-policy noeviction
# volatile-lru -> Evict using approximated LRU among the keys with an expire set. # allkeys-lru -> Evict any key using approximated LRU. # volatile-lfu -> Evict using approximated LFU among the keys with an expire set. # allkeys-lfu -> Evict any key using approximated LFU. # volatile-random -> Remove a random key among the ones with an expire set. # allkeys-random -> Remove a random key, any key. # volatile-ttl -> Remove the key with the nearest expire time (minor TTL) # noeviction -> Don't evict anything, just return an error on write operations.先從算法來看:
LRU,Least Recently Used:最近最少使用。判斷最近被使用的時間,目前最遠的數據優先被淘汰。
LFU,Least Frequently Used,最不常用,4.0 版本新增。
random,隨機刪除。
| 策略 | 含義 |
| volatile-lru | 根據LRU 算法刪除設置了超時屬性(expire)的鍵,直到騰出足夠內存為止。如果沒有可刪除的鍵對象,回退到noeviction 策略。 |
| allkeys-lru | 根據LRU 算法刪除鍵,不管數據有沒有設置超時屬性,直到騰出足夠內存為止。 |
| volatile-lfu | 在帶有過期時間的鍵中選擇最不常用的。 |
| allkeys-lfu | 在所有的鍵中選擇最不常用的,不管數據有沒有設置超時屬性。 |
| volatile-random | 在帶有過期時間的鍵中隨機選擇。 |
| allkeys-random | 隨機刪除所有鍵,直到騰出足夠內存為止。 |
| volatile-ttl | 根據鍵值對象的ttl 屬性,刪除最近將要過期數據。如果沒有,回退到noeviction 策略。 |
| noeviction | 默認策略,不會刪除任何數據,拒絕所有寫入操作并返回客戶端錯誤信息(error)OOM command not allowed when used memory,此時Redis 只響應讀操作。 |
?
?
?
?
?
?
?
?
?
?
?
如果沒有符合前提條件的key 被淘汰,那么volatile-lru、volatile-random 、volatile-ttl 相當于noeviction(不做內存回收)。
動態修改淘汰策略:
redis> config set maxmemory-policy volatile-lru建議使用volatile-lru,在保證正常服務的情況下,優先刪除最近最少使用的key。
?
總結
以上是生活随笔為你收集整理的Redis中的淘汰策略的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Redis中的过期策略
- 下一篇: Redis LRU 淘汰原理