redis 過(guò)期策略有兩種:定期刪除和惰性刪除。定期刪除在后臺(tái)主動(dòng)掃描數(shù)據(jù)庫(kù),立即刪除過(guò)期的鍵值對(duì),節(jié)省內(nèi)存空間,但可能影響性能。惰性刪除只有在客戶端訪問(wèn)已過(guò)期的鍵值對(duì)時(shí)才會(huì)刪除,性能開銷低,但過(guò)期的鍵值對(duì)可能繼續(xù)占用內(nèi)存空間。應(yīng)用程序應(yīng)根據(jù)需求選擇策略,如需要立即刪除或性能優(yōu)先。優(yōu)化措施包括使用短 ttl 值、redis cluster 分布數(shù)據(jù)、監(jiān)控內(nèi)存使用情況。
Redis 過(guò)期策略設(shè)置
1. 概述
Redis 過(guò)期策略定義了當(dāng)鍵值對(duì)過(guò)期后 Redis 如何處理它們。有兩種主要策略:“定期刪除”和“惰性刪除”。
2. 定期刪除
使用 expires 命令設(shè)置鍵值對(duì)的生存時(shí)間(TTL)。
Redis 在后臺(tái)定期掃描數(shù)據(jù)庫(kù),刪除過(guò)期的鍵值對(duì)。
優(yōu)點(diǎn): 確保所有過(guò)期的鍵值對(duì)及時(shí)刪除,節(jié)省內(nèi)存空間。
缺點(diǎn): 掃描過(guò)程可能影響 Redis 性能,尤其是當(dāng)數(shù)據(jù)庫(kù)很大時(shí)。
3. 惰性刪除
當(dāng)客戶端嘗試訪問(wèn)已過(guò)期的鍵值對(duì)時(shí),Redis 才會(huì)刪除它。
此策略不會(huì)主動(dòng)掃描數(shù)據(jù)庫(kù),因此不會(huì)影響 Redis 性能。
優(yōu)點(diǎn): 性能開銷低。
缺點(diǎn): 過(guò)期的鍵值對(duì)可能在一段時(shí)間內(nèi)繼續(xù)占用內(nèi)存空間。
4. 設(shè)置方法
4.1 定期刪除
EXPIRE mykey 60 # 設(shè)置 mykey 的 TTL 為 60 秒
登錄后復(fù)制
4.2 惰性刪除
Redis 默認(rèn)使用惰性刪除策略。可使用以下命令禁用惰性刪除,啟用定期刪除:
config set lazyfree-lazy-eviction no
登錄后復(fù)制
5. 選擇策略
選擇哪種策略取決于應(yīng)用程序的特定需求:
如果需要立即刪除過(guò)期的鍵值對(duì),則選擇定期刪除。
如果性能是優(yōu)先考慮因素,則選擇惰性刪除。
6. 優(yōu)化
使用短 TTL 值以減少過(guò)期的鍵值對(duì)數(shù)量。
考慮使用 Redis Cluster,它可以將數(shù)據(jù)分布在多個(gè)節(jié)點(diǎn)上,從而減少單個(gè)節(jié)點(diǎn)的掃描負(fù)擔(dān)。
定期監(jiān)視 Redis 內(nèi)存使用情況,并在需要時(shí)調(diào)整 TTL 值和刪除策略。