redis設定key的有效期限
Key指令
設定key的過期時間。
查詢目前所有的key
![redis怎麼設定key的有效期限](https://img.php.cn/upload/article/000/887/227/168527339092998.png)
![redis怎麼設定key的有效期限](https://img.php.cn/upload/article/000/887/227/168527339057322.png)
若執行ttl key 顯示為-2 則表示改值不存在快取中
![redis怎麼設定key的有效期限](https://img.php.cn/upload/article/000/887/227/168527339020292.png)
##顯示為-1則是持久化的(不會失效)
![redis怎麼設定key的有效期限](https://img.php.cn/upload/article/000/887/227/168527339045855.png)
若設定了失效時間那麼就會顯示剩餘的失效時間
![redis怎麼設定key的有效期限](https://img.php.cn/upload/article/000/887/227/168527339189234.png)
#完全理解redis有效期限問題
EXPIRE key seconds
起始版本:1.0.0
時間複雜度:O(1)
傳回值:1 如果成功設定過期時間;0 如果key不存在或無法設定過期時間。
為給定 key設定生存時間,當 key過期時(生存時間為 0),它會被自動刪除。
1.過期時間跟著key走,與值無關
Redis中,具有過期時間的鍵被稱為「易失的鍵」(volatile key)。過期時間可以透過使用DEL指令來刪除整個key來移除,或者被SET和GETSET指令覆寫(overwrite),這意味著,如果一個指令只是修改(alter)一個帶過期時間的key的值而不是用一個新的key值來代替(replace)它的話,那麼過期時間不會被改變。比方說,對一個 key執行 INCR指令,對一個清單進行 LPUSH指令,或是對一個雜湊表執行 HSET指令,這類操作不會修改 key本身的過期時間。
2.設定永久有效期限
使用PERSIST指令可以清除逾時,使其變成一個永久的key。
3.rename指令對有效期影響
如果key被RENAME指令修改,相關的逾時時間會轉移到新key上面。
如果key被RENAME指令修改,例如原來就存在Key_A,然後呼叫RENAME Key_B Key_A指令,這時不管原來Key_A是永久的還是設定為超時的,都會由Key_B的有效期狀態覆蓋。
4.刷新過期時間
對已經有過期時間的key執行EXPIRE操作,將會更新它的過期時間。
5.過期精度
在 Redis 2.4 及以前版本,過期期時間可能不是十分準確,有0-1秒的誤差。
從 Redis 2.6 起,過期時間誤差縮小到0-1毫秒。
6.外界因素對過期時間影響
自Redis 2.6版本以來,Keys的過期時間以毫秒為單位使用Unix時間戳進行儲存。這意味著即使Redis實例不可用,時間也是一直在流逝的。
要想過期的工作處理好,電腦必須採用穩定的時間。當你在兩台時間不同步的電腦之間同步RDB檔案時,會發生有趣的現象:所有的按鍵都會在載入時過期。
即使正在運作的實例也會檢查電腦的時鐘,例如如果你設定了一個key的有效期是1000秒,然後設定你的電腦時間為未來2000秒,這時key會立即失效,而不是等1000秒之後。
7.Redis如何淘汰過期的keys
Redis keys過期有兩種方式:被動和主動方式。
當一些客戶端嘗試存取它時,key會被發現並主動的過期。
當然,這樣是不夠的,因為有些過期的keys,永遠不會訪問他們。為了確保keys在預定時間內過期,應定期進行隨機測試並設定過期時間。所有這些過期的keys將會刪除。
具體就是Redis每秒10次做的事情:
1).測試隨機的20個keys進行相關過期檢測。
2).刪除所有已經過期的keys。
3).如果有多於25%的keys過期,重複步奏1.
這是一個平凡的機率演算法,基本上的假設是,我們的樣本是這個密鑰控件,並且我們不斷重複過期檢測,直到過期的keys的百分比低於25%,這意味著,在任何給定的時刻,最多會清除1/4的過期keys。
8.在複製AOF檔時如何處理過期
為了獲得正確的行為而不犧牲一致性,當一個key過期,DEL將會隨著AOF文字一起合成到所有附加的slaves。這種方法在master實例中是集中的,且不存在一致性錯誤的可能。
然而,當slaves連接到master時,不會獨立過期keys(會等到master執行DEL指令),他們任然會在資料集裡面存在,所以當slave當選為master時淘汰keys會獨立執行,然後成為master。
以上是redis怎麼設定key的有效期限的詳細內容。更多資訊請關注PHP中文網其他相關文章!