這是我參與更文挑戰的第26天,活動詳情查看:更文挑戰數據庫
/** * 將key 的值設置爲 value,並將 key 的過時時間設爲 seconds (以秒爲單位)。 * 只適用於String對象 */
SETEX key seconds value
/** * 這個命令和 SETEX 命令類似,但它以毫秒爲單位設置 key 的生存時間, * 而不是像 SETEX 命令那樣,以秒爲單位。 * 只適用於String對象 */
PSETEX key milliseconds value
//將鍵 key 的生存時間設置爲 seconds 秒
EXPIRE key seconds
//將鍵 key 的生存時間設置爲 milliseconds 毫秒
PEXPIRE key milliseconds
//將鍵 key 的過時時間設定爲 timestemp 指定的秒數時間戳
EXPIREAT key timestemp
//將鍵 key 的過時時間設定爲 milliseconds-timestemp 指定的秒數時間戳
PEXPIREPAT key milliseconds-timestemp
複製代碼
以上六種設置鍵過時的方式,其中 SETEX
和 PSETEX
兩個命令只適用於字符串對象,其餘4個命令適用於全部鍵類型。雖然有不少不一樣的命令能夠設置鍵過時,可是最終其餘的命令都會被轉爲經過 PEXPIREPAT
命令實現。服務器
經過設置鍵的過時時間,能夠判斷某個時間點一個鍵是否過時。對於已過時的鍵,還須要將其刪除,刪除的策略有三種:markdown
nil
,若是鍵不過時則返回鍵。
Redis 中採用惰性刪除和按期刪除配合的策略,實現合理使用CPU時間和避免浪費內存空間之間取得平衡。函數
Redis 中,對於設置了過時時間的鍵,每次讀寫鍵時都會調用
expireNeeded
函數判斷鍵是否過時。post惰性刪除策略模式以下:spa
按期刪除策略code
- 每隔一段時間,Redis會用規定的時間片斷,從指定數據庫中取出必定數量的鍵進行檢查是否過時
- 使用
current_db
記錄當前的檢查的數據庫(一個Redis服務器中能夠有多個數據庫,經過select
命令指定當前使用的數據庫)- 當全部數據庫都被檢查一遍以後,
current_db
被設置爲0,下一次從0號數據庫開始從新檢查