" />

欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Redis之Key過期策略的用法解讀

 更新時間:2025年04月23日 08:59:21   作者:zru_9602  
這篇文章主要介紹了Redis之Key過期策略的用法,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

一、什么是 Key 的過期策略?

在 Redis 中,Key 的過期策略是指管理鍵生命周期的機制。通過設(shè)置過期時間(TTL - Time To Live),Redis 能夠自動刪除那些已經(jīng)過期的鍵,從而釋放內(nèi)存空間。

這對于緩存場景尤為重要,因為它確保了數(shù)據(jù)不會永久性地占用內(nèi)存,同時保持了系統(tǒng)的高效運行。

二、過期策略的核心概念

生存時間(TTL)

  • TTL 表示一個鍵在 Redis 中存活的時間長度。
  • 可以通過 EXPIREPXPIRE 命令分別以秒和毫秒為單位設(shè)置 TTL。

過期時間戳(Expiry Timestamp)

  • 每個帶有過期時間的鍵都會被賦予一個具體的過期時間戳,表示該鍵將在何時失效。
  • EXPIREATPEXPIREAT 命令分別以秒和毫秒為單位設(shè)置過期時間戳。

三、過期鍵的刪除策略

Redis 提供了兩種主要的策略來處理過期的鍵:

惰性刪除(Lazy Deletion)

工作原理

  • 當一個鍵過期后,并不會立即被刪除。
  • 只有在下一次訪問該鍵時,Redis 才會檢查其是否已過期。
  • 如果已經(jīng)過期,則該鍵會被刪除。

優(yōu)點

  • 減少了 CPU 和內(nèi)存的使用,因為不需要頻繁掃描和刪除過期鍵。
  • 適用于對延遲不敏感的應(yīng)用場景。

缺點

  • 過期鍵可能會在內(nèi)存中存在較長時間
  • 占用不必要的空間

積極刪除(Active Deletion)

工作原理

  • Redis 定期運行后臺任務(wù),主動掃描并刪除已經(jīng)過期的鍵。
  • 這種策略確保了內(nèi)存不會被過多的過期鍵占用。

優(yōu)點

  • 及時釋放內(nèi)存空間,避免過期鍵堆積影響系統(tǒng)性能。
  • 適用于高并發(fā)和對延遲敏感的應(yīng)用場景。

缺點

  • 增加了 CPU 的負載
  • 因為后臺掃描任務(wù)需要一定的計算資源

四、設(shè)置過期時間的命令

Redis 提供了多種命令來設(shè)置鍵的過期時間:

EXPIRE key seconds

  • 以秒為單位設(shè)置鍵 key 的生存時間。
  • 示例:EXPIRE myKey 3600 表示 myKey 在 3600 秒后過期。

PXPIRE key milliseconds

  • 以毫秒為單位設(shè)置鍵 key 的生存時間,提供了更高的精度。
  • 示例:PXPIRE myKey 1800000 表示 myKey 在 1,800,000 毫秒(即 30 分鐘)后過期。

EXPIREAT key timestamp

  • 設(shè)置鍵 key 的過期時間為指定的 Unix 時間戳(以秒為單位)。
  • 示例:EXPIREAT myKey 1728000000 表示 myKey 將在時間戳 1,728,000,000 對應(yīng)的時間點過期。

PEXPIREAT key timestamp

  • 設(shè)置鍵 key 的過期時間為指定的 Unix 時間戳(以毫秒為單位)。
  • 示例:PEXPIREAT myKey 1728000000000 表示 myKey 將在時間戳 1,728,000,000,000 對應(yīng)的時間點過期。

五、查詢剩余生存時間

Redis 提供了兩個命令來查詢鍵的剩余生存時間:

TTL key

  • 返回以秒為單位的鍵 key 的剩余生存時間。
  • 示例:TTL myKey 可能返回 300,表示該鍵還有 300 秒未過期。

PTTL key

  • 返回以毫秒為單位的鍵 key 的剩余生存時間。
  • 示例:PTTL myKey 可能返回 180000,表示該鍵還有 180,000 毫秒(即 3 分鐘)未過期。

六、批量設(shè)置和處理

在實際應(yīng)用中,可能需要對多個鍵進行批量的過期時間設(shè)置或管理。為此,可以結(jié)合使用 Redis 的管道(Pipeline)功能來提高操作效率:

管道(Pipeline)

將多個命令一次性發(fā)送給 Redis 服務(wù)器,減少網(wǎng)絡(luò)往返次數(shù),提升性能。

示例:

import redis

r = redis.Redis(host='localhost', port=6379, db=0)
pipe = r.pipeline()

# 批量設(shè)置過期時間
pipe.expire('key1', 3600)
pipe.expire('key2', 3600)
pipe.expire('key3', 3600)

# 執(zhí)行管道中的命令
pipe.execute()

七、選擇合適的刪除策略

在實際應(yīng)用中,應(yīng)根據(jù)具體需求和系統(tǒng)負載情況來選擇過期鍵的刪除策略:

惰性刪除

  • 適用于對延遲不敏感、內(nèi)存資源較為充足的場景。
  • 可以通過調(diào)整 maxmemorymaxmemory-policy 來優(yōu)化內(nèi)存使用。

積極刪除

  • 適用于高并發(fā)、需要快速響應(yīng)的應(yīng)用場景。
  • 需要注意的是,積極刪除會增加 CPU 的負載,因此在配置時應(yīng)權(quán)衡系統(tǒng)資源的使用情況。

八、注意事項

過期時間的精度

  • 使用 PXPIREPEXPIREAT 命令可以設(shè)置更精確的過期時間,適用于需要嚴格控制時間的應(yīng)用場景。

鍵不存在時的行為

  • 如果嘗試對一個不存在的鍵設(shè)置過期時間,Redis 會返回錯誤。
  • 因此,在操作前應(yīng)確保鍵的存在性,或使用 SET 等命令同時設(shè)置值和過期時間。

內(nèi)存管理

  • 過期鍵不會立即被刪除,而是會在一定時間內(nèi)被 Redis 的后臺任務(wù)清理。
  • 為了避免內(nèi)存不足的問題,建議合理配置 maxmemory 和選擇合適的內(nèi)存淘汰策略。

總結(jié)

Redis 提供了靈活的過期時間設(shè)置和多種刪除策略,能夠滿足不同應(yīng)用場景的需求。

在實際使用中,應(yīng)根據(jù)系統(tǒng)的負載情況和應(yīng)用的特點來選擇合適的命令和策略,以優(yōu)化性能和資源利用率。

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • redis客戶端連接錯誤 NOAUTH Authentication required

    redis客戶端連接錯誤 NOAUTH Authentication required

    本文主要介紹了redis客戶端連接錯誤 NOAUTH Authentication required,詳細的介紹了解決方法,感興趣的可以了解一下
    2021-07-07
  • 如何使用注解方式實現(xiàn)?Redis?分布式鎖

    如何使用注解方式實現(xiàn)?Redis?分布式鎖

    這篇文章主要介紹了如何使用注解方式實現(xiàn)Redis分布式鎖,文章圍繞主題展開詳細的內(nèi)容介紹,教大家如何優(yōu)雅的使用Redis分布式鎖,感興趣的小伙伴可以參考一下
    2022-07-07
  • redis?手機驗證碼實現(xiàn)示例

    redis?手機驗證碼實現(xiàn)示例

    本文主要介紹了redis?手機驗證碼實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • 圖解Redis主從復(fù)制與Redis哨兵機制

    圖解Redis主從復(fù)制與Redis哨兵機制

    這篇文章主要介紹了圖解Redis主從復(fù)制與Redis哨兵機制,今天分享一下Redis的持久化、事務(wù)、管道相關(guān)的知識點,需要的朋友可以參考下
    2023-03-03
  • Redis獲取某個前綴的key腳本實例

    Redis獲取某個前綴的key腳本實例

    這篇文章主要給大家介紹了關(guān)于Redis獲取某個前綴的key腳本的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Redis具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。
    2018-04-04
  • Redis的BitMap使用操作命令

    Redis的BitMap使用操作命令

    Redis 為我們提供了位圖這一數(shù)據(jù)結(jié)構(gòu),每個用戶每天的登錄記錄只占據(jù)一位,365天就是365位,僅僅需要46字節(jié)就可存儲,極大地節(jié)約了存儲空間,這篇文章主要介紹了Redis的BitMap使用操作命令,需要的朋友可以參考下
    2023-10-10
  • 解析Redis Cluster原理

    解析Redis Cluster原理

    redis最開始使用主從模式做集群,若master宕機需要手動配置slave轉(zhuǎn)為master;后來為了高可用提出來哨兵模式,該模式下有一個哨兵監(jiān)視master和slave,若master宕機可自動將slave轉(zhuǎn)為master,但它也有一個問題,就是不能動態(tài)擴充;所以在3.x提出cluster集群模式
    2021-06-06
  • 查看Redis內(nèi)存信息的命令

    查看Redis內(nèi)存信息的命令

    Redis 是一個開源、高性能的Key-Value數(shù)據(jù)庫,被廣泛應(yīng)用在服務(wù)器各種場景中。本文介紹幾個查看Redis內(nèi)存信息的命令,包括常用的info memory、info keyspace、bigkeys等。
    2020-09-09
  • Redis Cluster集群收縮主從節(jié)點詳細教程

    Redis Cluster集群收縮主從節(jié)點詳細教程

    集群收縮的源端就是要下線的主節(jié)點,目標端就是在線的主節(jié)點,這篇文章主要介紹了Redis Cluster集群收縮主從節(jié)點詳細教程,需要的朋友可以參考下
    2021-11-11
  • Redis發(fā)布訂閱和實現(xiàn).NET客戶端詳解

    Redis發(fā)布訂閱和實現(xiàn).NET客戶端詳解

    發(fā)布訂閱在應(yīng)用級其作用是為了減少依賴關(guān)系,通常也叫觀察者模式。主要是把耦合點單獨抽離出來作為第三方,隔離易變化的發(fā)送方和接收方。下面這篇文章主要給大家介紹了關(guān)于Redis發(fā)布訂閱和實現(xiàn).NET客戶端的相關(guān)資料,需要的朋友可以參考下
    2017-03-03

最新評論