Redis設置鍵的生存時間或者過期時間以及刪除過期鍵的3種策略

1、Redis設置鍵的生存時間或者過期時間

生存時間:指當前鍵可以保持多長時間;

過期時間:指當前鍵什麼時候過期,具體的時間戳;

設置過期時間一般用expire,或者pexpire,主要區別:expire單位是秒,而pexpire單位是毫秒。


TTLPTTL命令,返回當前鍵距離過期還有多長時間,TTL單位是秒,PTTL單位是毫秒。

Redis有四個不同的命令可以用於設置鍵的生存時間或過期時間:

  1. EXPIRE<key><ttl> (單位:秒)
  2. PEXPIRE<key><ttl> (單位:毫秒)
  3. EXPIREAT<key><timestamp>(UNIX時間戳)
  4. PEXPIREAT<key><timestamp>(UNIX時間戳)

其實不管使用EXPIREPEXPIRE還是EXPIREAT,最終都是通過PEXPIREAT去設置過期時間,redis專門用過期字典,來保存所有鍵的過期時間,過期字典保存了對應鍵的過期時間戳,判斷鍵是否過期,就是當前時間戳跟過期字典裏面保存的時間戳進行比較。

2、Redis刪除過期鍵的3種策略

1、定時刪除:設置鍵的過期時間的同時,創建一個定時器,然後在鍵過期的時候自動觸發刪除操作。

2、惰性刪除:就是在獲取鍵的時候,檢查鍵是否過期,如果過期的話,執行刪除操作。

3、定期刪除:每隔一段時間,檢查數據庫中的鍵是否過期,如果過期的話,執行刪除操作。

3、3種策略的優缺點

1、定時刪除:有利於內存,可以儘可能的釋放和利用,因爲在鍵過期的時候觸發刪除操作,但是如果同一個時刻過期鍵非常多,這時候會佔用系統CPU很長一段時間,就會影響其它服務的吞吐量以及響應時間,導致大量請求超時;除此之外,創建一個定時器需要用到Redis服務器中的時間事件,因爲時間事件底層是通過無序鏈表實現的,Redis並不能高效的處理大量時間事件,所以通過大量時間事件處理過期鍵並不合適。

2、惰性刪除:跟定時刪除切切相反,有利於CPU,不利於Redis內存,因爲獲取鍵的時候(所有讀寫數據庫的命令都會觸發,比如GET,EXPIRE、TTL、PTTL等),如果鍵過期了,纔會執行刪除操作,這樣基本不佔用CPU,但是如果數據庫有很多鍵無人問津,內存就越來越少,除非清空所有鍵!!!

3、定期刪除:每隔一段時間執行一次刪除過期鍵操作(默認間隔時間:100ms,間隔時間需要根據服務器性能以及相關業務綜合評估來設定),並通過限制刪除操作執行的時長和頻率來減少刪除操作對CPU時間的影響,同時解決了過期鍵佔用內存的問題。

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章