一、相關命令概覽
1.subscribe 訂閱訊息
2.psubscribe 利用模式匹配訂閱訊息
3.publish 發布訊息
4.unsubscribe 取消普通訂閱
5.punsubscribe 取消模式匹配的訂閱
6.pubsub 自省命令
二、發布訂閱的作用
發布者無需將訊息傳送給特定的訂閱者,而是將訊息傳送給某一頻道,發布者並不關心訂閱者是誰,與此同時,訂閱者也不關心它所訂閱頻道的發布者是誰,只關注它自己訂閱的頻道訊息。這種模式的發布者和訂閱者之間不存在耦合關係,允許更大的可移植性和動態網路拓撲。
該功能可以構建即時通訊應用,比如網路聊天室(chatroom)和實時廣播、實時提醒等。
三、六大命令使用詳解
1.subscribe 訂閱訊息
開啟兩個redis資料庫客戶端,開啟兩個訂閱者,均訂閱message_1頻道。
127.0
.0.1:6379
> subscribe message_1
reading messages... (press ctrl-c
to quit)
1) "subscribe"
2) "message_1"
3) (integer) 1
1) "message"
2) "message_1"
3) "string_1"
2.publish 發布訊息
開啟了兩個redis客戶端,分別訂閱了message_1這個訊息,當發布message_1訊息時,返回結果為2,意味著有兩個訂閱者接收到訊息。
[root@10-6-3-198 ~]# redis-cli
127.0.0.1
:6379> publish message_1 string_1
(integer) 2
3.psubscribe 利用模式匹配訂閱訊息
開啟另乙個redis客戶端,利用模式匹配的方式訂閱頻道,模式匹配字串為message*,所以會訂閱到message_1這個頻道,由於之前已經有兩個訂閱者,所以此時發布者再發布訊息,返回結果為3。
127.0
.0.1:6379> psubscribe message*
reading messages... (press ctrl-c to quit)
1) "psubscribe"
2) "message*"
3) (integer) 1
# 訂閱了1個頻道
1) "pmessage"
# 訂閱訊息的方式
2) "message*"
# 匹配模式字串
3) "message_1"
# 具體匹配的頻道
4) "string_2"
# 接收到的訊息
發布者的狀態為:
127.0
.0.1
:6379> publish
message_1
string_2
(integer) 3
4.unsubscribe 取消普通訂閱
redis的客戶端工具並不能實現該操作,訂閱頻道時,提示press ctrl-c to quit,但是由於誤操作,press ctril-z,導致某個redis客戶端的訂閱者並沒有被取消,一直存在著。
解決方法是改變redis.conf配置引數client-output-buffer-limit,該引數的意義是
client-output-buffer-limit pubsub 32mb 8mb 60
5.punsubscribe 取消模式匹配的訂閱
redis客戶端工具同樣不能操作。
6.pubsub 自省命令
pubsub是一種可以檢查發布訂閱子系統的自省命令。其子命令以及時間複雜度如下:
channels :o(n) , n 是活躍頻道的數量,該命令返回活躍的頻道列表。活躍指的是至少被乙個訂閱者訂閱。
由於我已經取消了所有測試訂閱,只有之前誤操作ctrl+z的訂閱者沒有取消,所以有一下的結果,message_1頻道有2個訂閱者沒有取消,new_1頻道都正確取消了訂閱。
127.0
.0.1:6379> pubsub channels message_1
1) "message_1"
127.0
.0.1:6379> pubsub channels new_1
(empty
list
or set)
numsub :o(n),n是請求統計訂閱數數目的頻道的數量,下面語句的時間複雜度為o(2)。該語句只能統計非模式匹配型別的訂閱者,如果語句中的訂閱者包括*,則統計的結果為0,想要統計模式匹配的訂閱者,需要使用numpat子命令。
127.0.0.1:6379> pubsub numsub new_1 message_1
1) "new_1"
2) "0"
3) "message_1"
4) "2"
127.0.0.1:6379> pubsub numsub new_1 message_*
1) "new_1"
2) "0"
3) "message_*"
4) "0"
numpat :o(1),統計模式所有匹配訂閱者的數量。該命令無需頻道或者模式匹配引數。返回所有訂閱者的數量。
127.0
.0.1
:6379> pubsub
numpat
(integer) 2
Redis發布訂閱使用方法
發布訂閱模式中發布訊息的為publisher即發布者,接收訊息的為subscriber即訂閱者。在redis中,所有的訊息通過channel即頻道進行發布,乙個發布者可以向多個channel發布訊息,乙個訂閱者也可以訂閱多個channel。redis不對訊息進行持久化,如果訊息發布時訂閱者還沒有進行...
Redis發布訂閱方法
進入redis中 docker run it redis latest redis cli h 192.168.28.56 本機的ip位址 以下例項演示了發布訂閱是如何工作的。在我們例項中我們建立了訂閱頻道名為redischat redis 127.0.0.1 6379 subscribe redi...
Redis的發布訂閱
一般不用做訊息發布訂閱。簡介redis發布訂閱 pub sub 是一種訊息通訊模式 傳送者 pub 傳送訊息,訂閱者 sub 接收訊息。redis客戶端可以訂閱任意數量的頻道。下圖展示了頻道 channel1 以及訂閱這個頻道的三個客戶端 client2 client5 和 client1 之間的關...