官方網站做自適應好還是響應式廈門人才網個人會員
上一篇地址:持續(xù)總結中!2024年面試必問 20 道 Redis面試題(三)-CSDN博客
七、Redis過期鍵的刪除策略?
Redis 過期鍵的刪除策略主要涉及以下幾種方式:
1.?定時刪除(Timed Expiration)
這是最直接的過期鍵刪除策略。當為一個鍵設置過期時間后,Redis 會在該鍵達到過期時間時立即將其刪除。這種方式的優(yōu)點是確保了數據的實時性,過期數據能夠立即被清理出去,但缺點是可能會對性能產生影響,因為每個帶有過期時間的鍵都需要創(chuàng)建一個定時器來監(jiān)控。
2.?惰性刪除(Lazy Expiration)
在這種策略下,鍵并不會在過期時立即被刪除,而是在下一次訪問該鍵時才會被檢查并刪除。這種方式的優(yōu)點是可以節(jié)省CPU資源,因為它避免了定時器的開銷。但是,它可能會導致過期數據在內存中駐留較長時間,從而占用內存空間。
3.?定期掃描刪除(Periodic Expiration)
Redis 會定期掃描鍵空間以查找并刪除過期的鍵。這種策略通過隨機抽樣的方式來減少對性能的影響,但無法保證過期數據能夠及時被刪除。定期掃描可以配置不同的頻率和條件,以適應不同的性能和實時性需求。
4.?內存淘汰策略(Eviction Policies)
當內存不足時,Redis 會根據配置的內存淘汰策略來決定哪些鍵應該被刪除。這些策略包括但不限于:
- noeviction:不刪除任何數據,如果內存不足,寫入操作將被拒絕。
- allkeys-lru:從所有鍵中刪除最近最少使用的鍵。
- allkeys-random:從所有鍵中隨機刪除鍵。
- volatile-lru:從設置了過期時間的鍵中刪除最近最少使用的鍵。
- volatile-random:從設置了過期時間的鍵中隨機刪除鍵。
- volatile-ttl:刪除即將過期的鍵。
5.?內存碎片整理(Active Defragmentation)
在 Redis 4.0 及以上版本中,可以啟用內存碎片整理功能。這個功能可以在后臺異步地整理內存,減少內存碎片,從而提高內存的使用效率。雖然這個功能不直接刪除過期鍵,但它有助于提高內存的總體性能。
6.?使用 Redis 4.0 及以上版本的優(yōu)化特性
Redis 4.0 引入了一些新特性,比如 LAZY FREE
,可以在后臺線程中異步地釋放過期鍵占用的內存,減少對主線程的影響。
7.?過期時間分散策略
為了避免大量鍵在同一時間過期導致的性能問題,可以通過在設置的過期時間上增加一個隨機偏移量,使得過期時間分散在一段時間內,從而避免刪除操作的集中。
通過這些策略的組合使用,Redis 能夠在保證性能的同時,有效地管理過期鍵的刪除,確保緩存數據的時效性和內存使用的效率。
八、Redis的回收策略(淘汰策略)?
Redis 提供了多種數據淘汰策略,用于在內存不足時從鍵空間中選擇并移除數據。以下是 Redis 支持的主要淘汰策略:
1.?noeviction
此策略會阻止任何新寫入操作,如果內存限制達到,嘗試寫入數據時會返回錯誤。這種策略不會淘汰任何現(xiàn)有的鍵。
2.?allkeys-lru
這種策略會淘汰整個鍵空間中最久未被訪問的鍵(Least Recently Used)。它適用于那些訪問模式下舊數據很少被再次訪問的場景。
3.?allkeys-random
此策略會從所有鍵中隨機選擇并淘汰一個鍵。它是一種簡單且公平的淘汰方式,但可能不是最優(yōu)化的。
4.?volatile-lru
這種策略會淘汰那些設置了過期時間的鍵中最久未被訪問的鍵。如果鍵空間中沒有可淘汰的過期鍵,Redis 將嘗試使用 noeviction
策略。
5.?volatile-random
此策略會從設置了過期時間的鍵中隨機淘汰一個鍵。與 volatile-lru
類似,如果沒有過期鍵,Redis 將使用 noeviction
策略。
6.?volatile-ttl
這種策略會淘汰那些設置了過期時間的鍵中,剩余生存時間(Time To Live, TTL)最短的鍵。如果沒有過期鍵,Redis 同樣會使用 noeviction
策略。
7.?allkeys-lfu
這種策略會淘汰整個鍵空間中最少使用的鍵(Least Frequently Used)。適用于那些訪問模式下某些數據很少被訪問的場景。
8.?volatile-lfu
此策略會淘汰設置了過期時間的鍵中最少使用的鍵。如果沒有過期鍵,Redis 將使用 noeviction
策略。
配置淘汰策略
淘汰策略可以在 Redis 配置文件中設置,通過 maxmemory-policy
配置項進行配置。例如:
maxmemory-policy allkeys-lru
這行配置表示當 Redis 達到內存上限時,將使用 LRU 策略淘汰數據。
考慮因素
在選擇淘汰策略時,需要考慮以下因素:
- 數據訪問模式:不同的應用有不同的數據訪問模式,選擇一個與訪問模式相匹配的淘汰策略非常重要。
- 數據時效性:對于那些過期后不再需要的數據,使用考慮 TTL 的淘汰策略可能更合適。
- 內存限制:了解系統(tǒng)的內存限制,并根據可用內存選擇合適的淘汰策略。
- 業(yè)務需求:不同的業(yè)務對數據的準確性和實時性有不同的需求,需要根據業(yè)務需求選擇淘汰策略。
總結
Redis 的淘汰策略提供了靈活的選擇,以適應不同的應用場景和業(yè)務需求。正確配置和使用這些策略,可以幫助確保 Redis 在內存限制下依然能夠高效穩(wěn)定地運行。