簡體   English   中英

Redis作為緩存-重置到期

[英]Redis as cache - reset expiry

我將Redis用作緩存,並希望使Redis中未被積極使用的數據過期。 當前,為對象設置到期時間會在到期時間過后刪除該對象。 但是,如果在對象過期之前至少讀取一次該對象,我想將其保留在redis中。

我看到的一種方法是為每個對象存儲一個單獨的expiry_key,並將expiry設置為expiry_key而不是原始對象。 在expiry_key上訂閱del通知,並在收到del通知時,檢查是否在到期間隔內(通過單獨維護的訪問日志)至少一次讀取了對象。 如果未讀取對象,請在原始對象上執行del命令。 如果已讀取,請使用到期間隔重新創建expiry_key。

此實現需要其他系統來管理到期時間,並且希望使用Redis在本地進行處理。

有更好的解決方案來解決這個問題嗎?

為每次讀取重置對象的到期時間將增加對redis的寫入次數,因此這不是一種選擇。

請注意,redis緩存刷新是通過更改通知系統異步管理的。

您可以在每次讀取后再次設置過期密鑰(在密鑰上設置TTL為O(1) )。

您的系統在事務中執行此操作可能很有意義:

MULTI
GET mykey
EXPIRE mykey 10
EXEC

您還可以通過管道傳遞命令。

官方文檔中也描述了這種模式。

請參閱http://redis.io/topics/config中的 “將Redis配置為緩存”部分

我們可以將maxmemory-policy設置為allkeys-lru,以清除redis中的非活動內容。 這將適用於我所述的用例。

另一種方法是在key上定義一個通知,然后重置它的到期時間

看這里

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM