如果沒有設定有效期,即使記憶體用完,redis 自動**機制也是看設定了有效期的,不會動沒有設定有效期的,如果清理後記憶體還是滿的,就不再接受寫操作。
redis無論有沒有設定expire,他都會遵循redis的配置好的刪除機制,在配置檔案裡設定:
redis最大記憶體不足"時,資料清除策略,預設為"volatile-lru"。
volatile-lru ->對"過期集合"中的資料採取lru(近期最少使用)演算法.如果對key使用"expire"指令指定了過期時間,那麼此key將會被新增到"過期集合"中。將已經過期/lru的資料優先移除.如果"過期集合"中全部移除仍不能滿足記憶體需求,將oom.
allkeys-lru ->對所有的資料,採用lru演算法
volatile-random ->對"過期集合"中的資料採取"隨即選取"演算法,並移除選中的k-v,直到"記憶體足夠"為止. 如果如果"過期集合"中全部移除全部移除仍不能滿足,將oom
allkeys-random ->對所有的資料,採取"隨機選取"演算法,並移除選中的k-v,直到"記憶體足夠"為止
volatile-ttl ->對"過期集合"中的資料採取ttl演算法(最小存活時間),移除即將過期的資料.
noeviction ->不做任何干擾操作,直接返回oom異常
另外,如果資料的過期不會對"應用系統"帶來異常,且系統中write操作比較密集,建議採取"allkeys-lru"。
由以上可以看出,對沒設定expire的資料,產生影響的是allkeys-lru機制,allkeys-random。
所以redis沒設定expire的資料是否會刪除,是由你自己選擇的刪除機制決定的。
在redis伺服器占用記憶體達到maxmemory最大的情況下,當再想增加記憶體占用時,會按maxmemory-policy刪除機制將老的資料刪除。這裡簡單說一下volatile-lru,redis會按lru演算法刪除設定了過期時間但還沒有過期的key,而對於沒有設定過期時間的key,redis是永遠保留的。當然,如果你不想刪除沒有過期的key,那可以使用noeviction機制。
redis設定expire以及記憶體淘汰機制
redis set name kk redis expire name 60 設定過期時間為60秒 redis ttl name 檢視當前該鍵的過期時間 可以通過expire來限制使用者訪問頻率問題 1分鐘限制訪問100次 如下偽 i ists exists nametime 判斷是否存在該鍵 if...
Redis設定過期時間expire沒有生效
redis拿k 如果v為空.直接設定過期時間expire.是不生效的.更不能在最下面設定過期時間,大併發時,照樣不生效.所以得在設定值的時候同時設定過期時間 賦值,自增這些修改值的操作,如果你沒有在後面expire,就會把過期時間覆蓋掉,變成無限存活,也就是 1。redis 127.0.0.1 14...
Redis學習之expire命令
redisexpire命令用於設定 key 的過期時間。key 過期後將不再可用。expire key secondsexpire 為給定 key 設定生存時間,當 key 過期時 生存時間為 0 它會被自動刪除。在 redis 中,帶有生存時間的 key 被稱為 易失的 volatile 生存時間...