如果redis沒有設置expire,他是否默認永不過期?


如果沒有設置有效期,即使內存用完,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機制。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM