Redis的發布訂閱的使用方法

2021-08-07 03:23:27 字數 3007 閱讀 6363

一、相關命令概覽

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 之間的關...