Redis學習筆記(八)高階之生存時間

2021-07-06 05:34:57 字數 2451 閱讀 5369

redis

中可以使用

expire

命令設定乙個鍵的生存時間,到時間後

redis

會自動刪除它。

expirekey seconds

如果想知道乙個鍵還有多久的時間會被刪除,可以使用

ttl命令,返回值是鍵的剩餘時間。當鍵不存在或者沒有設定生存時間時,返回-1。

redis>set foo bar ok

redis>expire foo 20

(integer)1

redis>ttl foo

(integer)15

redis>ttl foo

(integer)-1

如果想取消鍵的生存時間設定,可以使用

persist

命令。如果生存時間被成功清除則返回

1;否則返回

0(因為鍵不存在或鍵本來就是永久的)。 使用

set、或者

getset

命令為鍵賦值也會同時清除鍵的生存時間。

redis> expire foo 20

(integer)1

redis> set foo bar ok

redis> ttl foo

(integer)-1

其他只對鍵值進行操作的命令(如

incr

、lpush

、hset

、zrem

)均不會影響鍵的生存時間。

pexpire

與expire

命令相似,但是其單位是毫秒。

expireat

和pexpireat

不常用,

expireat

的單位是

unix

時間,表示鍵的生存時間的截止時間。

pexpireat

命令的單位是毫秒。

redis> set foo bar ok

redis> expireat foo 1351858600

(integer)1

redis> ttl foo

(integer)142

redis> pexpireat foo 1351858700000

(integer)1

實現訪問頻率限制之一:

$iskeyexists= exists rate.limiting:$ip

if$iskeyexists is 1

$times = incr rate.limiting:$ip

if $times > 100

print

訪問頻率超過了限制,請稍後再試。

exist

else

multi

incr rate.limiting:$ip

expire $keyname 60

exec

實現訪問頻率限制之二:

$listlen= llen rate.limiting:$ip

if$listlen < 10

lpush rate.limiting:$ip now()

else

$time = lindex rate.limiting:$ip -1

if now() - $time < 60

print

訪問頻率超過了限制,請稍後再試。

else

lpush rate.limiting:$ip now()

ltrim rate.limiting:$ip 0 9

實現快取:

可以限制

redis

能夠使用的最大記憶體,並讓

redis

按照一定的規則淘汰不需要的快取鍵,這種方式在只將

redis

用作快取系統時非常的使用。

具體設定方法:修改配置檔案的

maxmemory

引數,限制

redis

最大可用記憶體大小(單位位元組),當超出了這個限制時,

redis

會依據max

memory-policy

引數指定的策略來刪除不需要的鍵,直到

redis

占用的記憶體小於指定記憶體。

lru(least

recently used)

規則說明

volatile

-lru 使用

lru演算法刪除乙個鍵(只對設定了生存時間的鍵)

allkeys

-lru 使用

lru演算法刪除乙個鍵

volatile-

random

隨機刪除乙個鍵(只對設定了生存時間的鍵)

allkeys-random

隨機刪除乙個鍵

volatile

-ttl

刪除生存時間最近的乙個鍵

noeviction

不刪除鍵,只返回錯誤

Redis 學習筆記(八)事務

更多的資料型別命令可在redis中文官網中查詢和學習,下面學習redis的事務。原子性是指乙個操作或者多個操作,要麼全部執行並且執行的過程不會被任何因素打斷,要麼就都不執行。事務是指一系列操作,這些操作要麼同時成功,要麼同時失敗,它是一種原子操作。事務沒有隔離級別的概念。redis的單條命令都具有原...

Redis學習之AOF八

aof是以日誌的形式來記錄每個寫操作,將redis執行過的所有寫指令記錄下來 讀操作不記錄 只許追加檔案但不可以改寫檔案,redis啟動之初會讀取改檔案重新構架資料,換言之,redis重啟的話就根據日誌檔案的內容將寫指令從前到後執行一次以完成資料的恢復工作。1.預設情況下 everysec 出廠預設...

redis學習 事物,生存時間

事物 1 multi exec 2 錯誤處理 語法錯誤可以檢測到,執行錯誤無法檢測,即使事物裡一條命令出現了語法錯誤,事物裡其他的命令依然會繼續執行 3 watch 檢測鍵值被修改後阻止之後的乙個事物的執行,並不能保證其他客戶端不修改這個鍵值 unwatch可以取消監控 生存時間 expire ke...