發佈和訂閱
每當有消息被髮送至給定頻道時, 頻道的所有訂閱者都會收到消息.
訂閱
SUBSCRIBE channel [channel …]
訂閱給定的一個或多個頻道的信息.
返回接收到的信息(請參見下面的代碼說明).
# 訂閱 msg 和 chat_room 兩個頻道
# 1 - 6 行是執行 subscribe 之後的反饋信息
# 第 7 - 9 行纔是接收到的第一條信息
# 第 10 - 12 行是第二條
redis> subscribe msg chat_room
Reading messages... (press Ctrl-C to quit)
1) "subscribe" # 返回值的類型:顯示訂閱成功
2) "msg" # 訂閱的頻道名字
3) (integer) 1 # 目前已訂閱的頻道數量
1) "subscribe"
2) "chat_room"
3) (integer) 2
1) "message" # 返回值的類型:信息
2) "msg" # 來源(從那個頻道發送過來)
3) "hello moto" # 信息內容
1) "message"
2) "chat_room"
3) "testing...haha"
UNSUBSCRIBE [channel [channel …]]
指示客戶端退訂給定的頻道.
如果沒有頻道被指定, 也即是, 一個無參數的 UNSUBSCRIBE
調用被執行, 那麼客戶端使用 SUBSCRIBE
命令訂閱的所有頻道都會被退訂. 在這種情況下, 命令會返回一個信息, 告知客戶端所有被退訂的頻道.
PSUBSCRIBE pattern [pattern …]
訂閱一個或多個符合給定模式的頻道.
每個模式以 *
作爲匹配符, 比如 it*
匹配所有以 it
開頭的頻道( it.news
it.blog
it.tweets
等等), news.*
匹配所有以 news
. 開頭的頻道( news.it
news.global.today
等等), 諸如此類.
返回接收到的信息(請參見下面的代碼說明)
# 訂閱 news.* 和 tweet.* 兩個模式
# 第 1 - 6 行是執行 psubscribe 之後的反饋信息
# 第 7 - 10 纔是接收到的第一條信息
# 第 11 - 14 是第二條
# 以此類推。。。
redis> psubscribe news.* tweet.*
Reading messages... (press Ctrl-C to quit)
1) "psubscribe" # 返回值的類型:顯示訂閱成功
2) "news.*" # 訂閱的模式
3) (integer) 1 # 目前已訂閱的模式的數量
1) "psubscribe"
2) "tweet.*"
3) (integer) 2
1) "pmessage" # 返回值的類型:信息
2) "news.*" # 信息匹配的模式
3) "news.it" # 信息本身的目標頻道
4) "Google buy Motorola" # 信息的內容
1) "pmessage"
2) "tweet.*"
3) "tweet.huangz"
4) "hello"
1) "pmessage"
2) "tweet.*"
3) "tweet.joe"
4) "@huangz morning"
1) "pmessage"
2) "news.*"
3) "news.life"
4) "An apple a day, keep doctors away"
PUNSUBSCRIBE [pattern [pattern …]]
指示客戶端退訂所有給定模式.
如果沒有模式被指定, 也即是, 一個無參數的 PUNSUBSCRIBE
調用被執行, 那麼客戶端使用 PSUBSCRIBE pattern [pattern …]
命令訂閱的所有模式都會被退訂. 在這種情況下, 命令會返回一個信息, 告知客戶端所有被退訂的模式.
發佈
PUBLISH channel message
將信息 message
發送到指定的頻道 channel
.
返回接收到信息 message
的訂閱者數量.
# 對沒有訂閱者的頻道發送信息
redis> publish bad_channel "can any body hear me?"
(integer) 0
# 向有一個訂閱者的頻道發送信息
redis> publish msg "good morning"
(integer) 1
# 向有多個訂閱者的頻道發送信息
redis> publish chat_room "hello~ everyone"
(integer) 3
鍵的過期時間
在使用 Redis 存儲數據的時候, 有些數據可能在某個時間點之後就不再有用了, 用戶可以使用 DEL
命令顯示的刪除這些無用元素, 也可以通過 Redis 的過期時間特性來讓鍵在給定的時限之後自動刪除.
當我們說一個鍵"帶有生存時間" 或 "會在特定時間之後過期" 時, 我們指的是 Redis 會在這個鍵的過期時間達到時自動刪除該鍵.
EXPIRE key seconds
爲給定 key
設置生存時間, 當 key
過期時(生存時間爲 0 ), 它會被自動刪除.
在 Redis 中, 帶有生存時間的 key
被稱爲『易失的』(volatile).
生存時間可以通過使用 DEL
命令來刪除整個 key 來移除, 或者被 SET
和 GETSET
命令覆寫(overwrite), 這意味着, 如果一個命令只是修改(alter)一個帶生存時間的 key
的值而不是用一個新的 key
值來代替(replace)它的話, 那麼生存時間不會被改變.
比如說, 對一個 key
執行 INCR
命令, 對一個列表進行 LPUSH
命令, 或者對一個哈希表執行 HSET
命令, 這類操作都不會修改 key
本身的生存時間.
另一方面, 如果使用 RENAME
對一個 key
進行改名, 那麼改名後的 key
的生存時間和改名前一樣.
RENAME
命令的另一種可能是, 嘗試將一個帶生存時間的 key
改名成另一個帶生存時間的 another_key
, 這時舊的 another_key
(以及它的生存時間)會被刪除, 然後舊的 key
會改名爲 another_key
, 因此, 新的 another_key
的生存時間也和原本的 key
一樣.
使用 PERSIST
命令可以在不刪除 key
的情況下, 移除 key
的生存時間, 讓 key
重新成爲一個『持久的』(persistent) key.
更新生存時間
可以對一個已經帶有生存時間的 key
執行 EXPIRE
命令, 新指定的生存時間會取代舊的生存時間.
過期時間的精確度
設置成功返回 1. 當 key 不存在或者不能爲 key 設置生存時間時, 返回 0.
TTL key
以秒爲單位, 返回給定 key 的剩餘生存時間(TTL, time to live).
當 key 不存在時, 返回 -2. 當 key 存在但沒有設置剩餘生存時間時, 返回 -1. 否則, 以秒爲單位, 返回 key 的剩餘生存時間.
PEXPIRE key milliseconds
這個命令和 EXPIRE
命令的作用類似, 但是它以毫秒爲單位設置 key 的生存時間, 而不像 EXPIRE
命令那樣, 以秒爲單位.
設置成功, 返回 1 key 不存在或設置失敗, 返回 0.