如果redis沒有設定expire,他是否預設永不過期?
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機制