redis設定key過期時間
阿新 • • 發佈:2019-01-01
redis是一個廣泛應用的key-value型記憶體資料庫,和memecached一樣,key是可以被設定生存週期的。
redis設定key的過期時間非常簡單:
SETEX mykey 10 "Hello"
這樣就給mykey設定了10秒的生存週期。
但是當你使用了redis其他的資料結構,比如LIST,HMAP等,就沒有現成的命令可以使用了。不過在redis中,上面的命令本來就等效於下面兩條命令
SET mykey value
EXPIRE mykey 10
EXPIRE可以給redis內任意型別的key設定過期時間,如給HMAP型別的key設定過期時間可以用
HSET mykey hkey "hello" EXPIRE mykey 10
我們可以將兩條命令儲存為一個MULTI/EXEC儲存過程,或者用支援pipline的redis客戶端
下面來談一下redis過期的key的刪除機制:
不同於memcached的LAZY模式,redis對於設定了過期時間的key採用被動模式和主動模式相結合的方式:
- 被動模式,同memcached,當過期的key被訪問時,redis會將其刪除
- 主動模式,主動模式為redis主動觸發的一個以10秒為間隔的迴圈:
- 隨機測試100個key的過期時間
- 刪除這100個key中所有已經過期的key
- 如果刪除了超過25個key,立刻從第一步開始重做