Redis之過期時間


1.命令介紹

expire key seconds    設置key的有效時間,單位為秒
expire命令返回1表示設置成功,返回0表示鍵不存在或設置失敗。

ttl key
ttl命令返回值是鍵的剩余時間(單位是秒)。當鍵不存在時,ttl命令會返回-2。沒有為鍵設置過期時間(即永久存在,這是建立一個鍵后的默認情況)返回-1。

persist key
取消鍵的過期時間設置,如果過期時間被成功清除則返回1,否則返回0(因為鍵不存在或鍵本來就是永久的)。

使用set或getset命令為鍵賦值也會同時清除鍵的過期時間。

使用expire命令會重新設置鍵的過期時間。

其他只對鍵值進行操作的命令(如incr、lpush、hset、zrem)均不會影響鍵的過期時間。

expire命令的seconds參數必須是整數,所以最小單位是1秒。如果想要更精確的控制鍵的過期時間應該使用pexpire命令,單位是毫秒。對應的可以使用pttl命令查看鍵的剩余時間。

如果使用watch命令監測了一個擁有過期時間的鍵,該鍵時間到期自動刪除並不會被watch命令認為該鍵被改變。

2.實現緩存

    當服務器內存有限時,如果大量使用緩存鍵且過期時間設置得過長就會導致redis占滿內存;另一方面如果為了防止redis占用內存過大而將緩存鍵的過期時間設得太短,就可能導致緩存命中率過低並且大量內存白白閑置。實際開發中會發現很難為緩存鍵設置合理的過期時間,為此可以限制redis能夠使用的最大內存,並讓redis按照一定的規則淘汰不需要的緩存鍵,這種方式在只將redis用作緩存系統時非常實用。

    具體設置方法為:修改配置文件的maxmemory參數,限制redis最大可用內存大小(單位是字節),當超出這個限制是redis會根據maxmemory-policy參數指定的策略來刪除不需要的鍵值直到redis占用的內存小於指定內存。

LRU(Least Recently Used)算法即最少最近使用,其認為最近最少使用的鍵在未來一段時間內也不會被用到,即當需要空間時這些鍵是可以被刪除的。

redis支持的淘汰鍵的規則:

volatile-lru            使用LRU算法刪除一個鍵(只對設置了過期時間的鍵)
allkeys-lru             使用LRU算法刪除一個鍵
volatile-random    隨機刪除一個鍵(只對設置了過期時間的鍵)
allkeys-random     隨機刪除一個鍵
volatile-ttl             刪除過期時間最近的一個鍵
noeviction            不刪除鍵,只返回錯誤
事實上redis並不會准確地將整個數據庫中最久未被使用的鍵刪除,而是每次從數據庫中隨機取3個鍵並刪除這3個鍵中最久未被使用的鍵。刪除過期時間最接近的鍵的實現方法也是這樣。3這個數字可以通過redis的配置文件中的maxmemoery-samples參數設置。
---------------------
作者:panzm_csdn
來源:CSDN
原文:https://blog.csdn.net/panzm_csdn/article/details/79738510
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM