一、Redis設置key永不過期的原因
在實際開發中,有些數據是非常重要的,需要永久存儲,而且不能因為時間的緣故而被自動刪除。Redis設置key永不過期的功能就可以幫我們實現這個需求。
二、Redis設置key永不過期無效
我們可以使用Redis命令:PERSIST key 來將一個帶有過期時間的鍵值對變為永久存在的。但是,有時會遇到有些key即使設置了PERSIST,也無法讓其永久存在的情況。
原因在於,只有當Redis Server的內存比較充足時,Redis才會啟用過期鍵移除機制。當Redis內存告急時,它會根據策略選擇刪除哪些過期的鍵值對以釋放內存。如果key被選中了,那麼即使它有PERSIST標誌,也會被刪除。
三、Redis設置過期時間不生效
在Redis中,可以使用TTL命令來查看某個key的過期時間,使用EXPIRE命令來設置key的過期時間。但是,有些情況下,設置過期時間可能並不會生效。
一個常見的情況是當我們使用SET命令設置一個已經存在的key時,如果我們設置了該key的過期時間,但是該key之前並沒有過期,那麼過期時間設置將不會生效。此時,只有等到該key過期後再重新設置過期時間才會生效。
四、Redis設置key永不過期弊端
雖然設置key永不過期功能很方便,但是也會帶來一些弊端。
- 佔用過多內存資源,因為這些key永不過期,所以Redis會一直佔用內存。如果數據量過大,內存資源會變得緊張,甚至可能導致Redis Server崩潰。
- 如果key對應的值隨著時間的推移有更新,但永遠不會被刪除,意味著Redis中很多數據的存儲已經沒有了意義,因為它們已經過時了。這無疑會浪費大量的存儲空間。
五、Redis設置key過期時間
1. EXPIRE命令
EXPIRE命令可以設置一個key的過期時間,單位是秒。例如:
# 設置key為test的過期時間為3600秒(1小時)
> EXPIRE test 3600
2. PEXPIRE命令
PEXPIRE命令和EXPIRE命令類似,但是單位是毫秒。例如:
# 設置key為test的過期時間為3600000毫秒(1小時)
> PEXPIRE test 3600000
3. EXPIREAT命令
EXPIREAT命令可以設置一個key的過期時間點,以UNIX時間戳的形式表示。例如:
# 設置key為test的過期時間為2022年12月31日23時59分59秒
> EXPIREAT test 1740643199
4. PEXPIREAT命令
PEXPIREAT命令和EXPIREAT命令類似,但是單位是毫秒。例如:
# 設置key為test的過期時間為2022年12月31日23時59分59秒999毫秒
> PEXPIREAT test 1740643199999
5. PERSIST命令
PERSIST命令可以使一個帶有過期時間的key變成永久存在的。例如:
# 將key為test的過期時間取消,以便讓它永久存在
> PERSIST test
六、Redis設置key永不過期作用
Redis設置key永不過期功能是非常方便的,對於一些重要數據的存儲非常有用。它可以實現數據的永久保存,避免數據被誤刪除或誤覆蓋。
比如,我們可以將系統的一些配置信息、用戶的登錄狀態等永久保存在Redis中,當我們需要使用這些數據時,可以直接從Redis中讀取,而無需頻繁的從資料庫讀取。
七、Redis設置key永不過期設置 -1
除了使用PERSIST命令使key永不過期外,我們還可以將key的過期時間設置為-1,表示該key永不過期。例如:
# 設置key為test永不過期
> EXPIRE test -1
八、Redis設置key永久有效
為了使key永久有效,我們可以使用PEXPIREAT命令,將過期時間點設置為未來極遠的時間。例如:
# 設置key為test永不過期
> PEXPIREAT test 99999999999999
九、Redis設置過期時間的命令選取
在日常使用中,我們使用最多的命令是EXPIRE和PEXPIRE。如果需要將過期時間點設置為未來的某個時間,可以使用EXPIREAT和PEXPIREAT命令;如果需要將key變成永久存在的,可以使用PERSIST命令。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/200278.html