Redis 所有的數據結構都可以設置過期時間,同時Redis 是單線程的。
在同一時刻如果有太多的key過期,刪除的時間也會佔用線程的處理時間,將有可能導致線上讀寫指令出現卡頓。
過期集合
redis 會將每個設置了過期時間的key存儲到一個獨立的字典中,定時遍歷字典來刪除到期的key。
同時,它還採用了惰性策略來刪除過期的key,在客戶端訪問這個key時,對key進行過期校驗,如果過期則刪除。
定時刪除策略
Redis默認會每秒進行十次過期掃描,每次掃描從過期字典中取20個key進行刪除,如果過期的key比例超過現有key集合1/4將重複取過期key進行刪除。
同時爲了保證循環過多導致線程卡死,每次掃描過期字典最多25ms
所以這也就要求我們每次對redis的key值設置過期時間儘量分散一些