English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Redis 发布订阅

Redis pubblicazione/abbonamento (pub/sub) è un modello di comunicazione di messaggi: il mittente (pub) invia messaggi, l'abbonato (sub) riceve messaggi.

Il client Redis può abbonarsi a qualsiasi numero di canali.

La seguente figura mostra il canale channel1 e i tre client che lo abbonano - client2, client5 e client1 - tra loro:

Quando un nuovo messaggio viene inviato al canale channel1 tramite il comando PUBLISH, questo messaggio viene inviato ai tre client che lo abbonano:

Esempio online

Di seguito è riportato un esempio che dimostra come funziona la pubblicazione e l'abbonamento, è necessario avviare due client redis-cli.

Nel nostro esempio abbiamo creato un canale di abbonamento chiamato w3codeboxChat:

第一个 redis-cli 客户端

redis 127.0.0.1:6379> SUBSCRIBE w3codeboxChat
Leggi messaggi... (premi Ctrl-C per uscire)
1) "subscribe"
2) "redisChat"
3) (integer) 1

Ora, riavviamo un client redis, quindi pubblichiamo due messaggi nella stessa frequenza w3codeboxChat, l'abbonato può ricevere i messaggi.

第二个 redis-cli 客户端

redis 127.0.0.1:6379> PUBLISH w3codeboxChat "Redis PUBLISH test"
(integer) 1
redis 127.0.0.1:6379> PUBLISH w3codeboxChat "Impara Redis con oldtoolbag.com"
(integer) 1
# Il client abbonato mostrerà il seguente messaggio
 1) "message"
2) "w3codeboxChat"
3) "Redis PUBLISH test"
 1) "message"
2) "w3codeboxChat"
3) "Impara Redis con oldtoolbag.com"

Il flusso di lavoro è il seguente:

  • Avvia il servizio Redis locale, avvia due client redis-cli.

  • 第一个 redis-cli 客户端输入 SUBSCRIBE w3codeboxChat,意思是订阅 w3codeboxChat 频道。

  • 第二个 redis-cli 客户端输入 PUBLISH w3codeboxChat "Redis PUBLISH test" 往 w3codeboxChat 频道发送消息,这个时候在第一个 redis-cli 客户端就会看到由第二个 redis-cli 客户端发送的测试消息。

Redis 发布订阅命令

下表列出了 redis 发布订阅常用命令:

序号命令及描述
1PSUBSCRIBE pattern [pattern ...]
订阅一个或多个符合给定模式的频道。
2PUBSUB subcommand [argument [argument ...]]
查看订阅与发布系统状态。
3PUBLISH channel message
将信息发送到指定的频道。
4PUNSUBSCRIBE [pattern [pattern ...]]
退订所有给定模式的频道。
5SUBSCRIBE channel [channel ...]
订阅给定的一个或多个频道的信息。
6UNSUBSCRIBE [channel [channel ...]]
指退订给定的频道。