expire key second 這是常用的,以秒為單位
pexpire key millisecond 單位是毫秒
expireat key timestamp 將key的過期時間設定為timestamp代表的秒數的時間戳
pexpireat key millisecond-timestamp 將key的過期時間設定為timestamp所代表的毫秒數的時間戳
setex key second value 字串獨有得方式
在redis資料庫redisdb中expires字典中儲存了所有key的過期時間,expires字典是乙個指標,指向鍵空間的某個鍵,expires字典的值是乙個longlong型別的整數,這個整數時expires字典指標所指向的鍵空間的key的過期時間,乙個毫秒級的unix時間戳。
在為key設定過期時間的同時新增乙個定時器,在key的過期時間到時,將key刪除,這種對記憶體友好
優點:可以盡快的釋放記憶體
缺點:①當系統中有大量過期資料的時候,刪除占用cpu;②建立定時器耗時,為每個key建立定時器,效能上比較差
但獲取乙個key的時候檢查key是否過期,如果沒有過期返回key所對應的value,如果key過期,則刪除key,返回null。這種對cpu友好
優點:只有在獲取操作時檢查到key過期才執行刪除操作,cpu開銷少,而且也到了非刪不可得底部。
缺點:可能造成記憶體當中存在大量得過期資料。
定頻次定時長得檢查定數量(預設是每個庫檢查20個key)的key,如果過期就刪除(在redis.conf配置檔案設定hz,1s重新整理的頻率)。在程式中有乙個全域性變數current_db來記錄下乙個將要遍歷的庫,假設有16個庫,我們這一次定期刪除遍歷了10個,那此時的current_db就是11,下一次定期刪除就從第11個庫開始遍歷,假設current_db等於15了,那麼之後遍歷就再從0號庫開始(此時current_db==0)
優點:通過限制刪除得頻次和 時常來減少對cpu得開銷。定期刪除降低記憶體得占用。
缺點:需要合理得設定刪除得頻次和時長。
預設檢查20是巨集定義的
出處:redis版本4.0.2原始碼
每次刪除時間和查詢頻次成反比,查詢頻次為1(hz=1),則刪除時間為250ms,hz=10則刪除時間為25ms
①當執行get、setnx等操作時,先檢查key是否過期
②如果已經過期,則刪除key,並返回null
③如果沒有過期,直接返回 key所對應的value值
①遍歷每乙個資料庫,檢查當前庫中指定個數的key
②隨機獲取乙個設定過期時間的key,檢視是否過期,過期則刪除
③判斷定期刪除是否達到指定時長,如果已經達到,則直接退出刪除操作
過期key對rdb沒有影響。從記憶體持久化 到rdb檔案時,會先檢查key是否過期,如果過期,就不會寫入檔案,從rdb檔案寫入記憶體,寫入之前會檢查key是否過期,如果過期,則不寫入記憶體。
過期key對aof檔案沒有影響,aof只有在發生寫操作的時候才會觸發,所以當key過期時,沒有寫操作,所以不會進入aof檔案,當刪除過期key的時候,會將刪除操作寫入aof檔案。aof重寫的時候也會先判斷key是否過期,過期就不會寫入。
redis過期策略
1 noeviction 一旦記憶體滿則返回錯誤 2 allkeys lru 對所有的key進行lru 3 volatile lru 只對設定了過期的key進行lru 預設的方式 4 allkeys random 隨機剔除乙個key 5 volatile random 對設定過期的key進行隨機剔除...
Redis過期策略
1,設定過期時間 expire key time 單位為秒 setex string key,int seconds,string value 字串獨有的方式 注意 過期key的判定 檢查給定key是否存在於過期字典,如果存在,那麼取得key的過期時間。檢查當前unix時間戳是否大於key的過期時間...
Redis 過期策略
redis 缺省會每秒進行十次過期掃瞄,過期掃瞄不會遍歷過期字典中所有的 key,而是採用了一種簡單的貪心策略。從過期字典中隨機 20 個 key 刪除這 20 個 key 中已經過期的 key 如果過期的 key 比率超過 1 4,那就重複步驟 1 同時,為了保證過期掃瞄不會出現迴圈過度,導致執行...