服務器經常會用到redis作為緩存,有很多數據都是臨時set以下,可能用過之后很久都不會再用到了(比如暫存session)那么就有幾個問題了redis會自己回收清理不用的數據嗎?如果能,如何配置?如果不能,如何防止數據累加后大量占用存儲空間的問題?
2 回答

浮云間
TA貢獻1829條經驗 獲得超4個贊
redis默認把所有數據都永久存儲在內存中,當你需要持久化數據(保存到磁盤)或者自動刪除過期鍵,需要使用額外的命令或者配置來完成; 如果你需要使用redis來完成你的業務需求(譬如cache),那么你就必須遵循redis的設計規則;
至于你后面提到這個問題:即便我很有潔癖的每一條都加上了expire,你能保證多人開發中其他人也加上了expire?如果有人沒有呢,那這個數據就一直一直一直保存著
我是這樣想的:通常業務邏輯都會封裝成API接口,譬如登陸場景存session接口可能就是:void addLoginSession(string data, int timeout),然后別人在調用的時候其實壓根不管這里面用的是redis還是memcache,所有的細節都必須只由API設計者消化;
順便說一下,redis如何清理數據庫中過期的鍵?它分為兩種:
惰性刪除:當你去操作一個鍵(譬如 get name),redis首先會檢查這個鍵是否關聯了一個超時時間,如果有,則檢查是否超時,若超時則返回空,否則返回相應的值;
定時刪除:redis中有個時間事件,它會清理數據庫中已經過期的鍵(redis會限定該操作占用的時間,避免阻塞客戶端的請求)
- 2 回答
- 0 關注
- 1911 瀏覽
添加回答
舉報
0/150
提交
取消