[英]Redis Expiration not working
我正在使用 Redis Pub/Sub 模型 ( https://redis.io/topics/pubsub ),我也在使用 jedis 客戶端。 我已經訂閱了redis過期。 當 redis 的鍵數較少時,這非常有效。 但是,如果我有超過 100 萬個具有不同 TTL 的密鑰,那么密鑰的到期並不總是根據密鑰的 TTL 發生。
從 redis 文檔( https://redis.io/commands/expire ):
Specifically this is what Redis does 10 times per second:
1. Test 20 random keys from the set of keys with an associated expire.
2. Delete all the keys found expired.
3. If more than 25% of keys were expired, start again from step 1.
因此,對於大量密鑰,選擇的隨機密鑰可能具有更高的 TTL,因此步驟 2 和 3 不會被執行。
我該如何解決這個問題,或者我可以使用 redis 以外的其他東西來實現這一點嗎?
Redis Keyspace Notifications頁面上提到了您的問題。
如果沒有命令始終針對密鑰,並且有許多密鑰與 TTL 相關聯,則密鑰生存時間降至零與生成過期事件的時間之間可能存在顯着延遲。
為了解決這個問題,您可以嘗試使用hz
配置值增加活動過期事件的頻率,默認為每秒 10 次。
為了解決這個問題,我們決定使用一個不同的 redis 數據庫,它只包含具有相同 TTL 的鍵。
我們繼續為所有其他鍵使用默認數據庫(索引 0)(例如不需要過期通知......)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.