日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

Redis高级实用特性:发布及订阅消息

發(fā)布時間:2023/12/19 数据库 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Redis高级实用特性:发布及订阅消息 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

在之前的文章中,介紹過Redis數(shù)據(jù)庫高級實用特性中的持久化機制,今天為大家介紹Redis的另一高級實用特性——發(fā)布及訂閱消息。

  發(fā)布訂閱(pub/sub)是一種消息通信模式,主要的目的是解耦消息發(fā)布者和消息訂閱者之間的耦合,這點和設(shè)計模式中的觀察者模式比較相似。pub/sub不僅僅解決發(fā)布者和訂閱者直接代碼級別耦合也解決兩者在物理部署上的耦合。redis作為一個pub/sub的server,在訂閱者和發(fā)布者之間起到了消息路由的功能。訂閱者可以通過subscribe和psubscribe命令向redis server訂閱自己感興趣的消息類型,redis將消息類型稱為通道(channel)。當(dāng)發(fā)布者通過publish命令向redis server發(fā)送特定類型的消息時。訂閱該消息類型的全部client都會收到此消息。這里消息的傳遞是多對多的。一個client可以訂閱多個channel,也可以向多個channel發(fā)送消息。

  下面做個實驗。這里使用3不同的client, client1用于訂閱tv1這個channel的消息,client2用于訂閱tv1和tv2這2個chanel的消息,client3用于發(fā)布tv1和tv2的消息。

?

?? Client 1 Client 2 Client 3
?? redis 127.0.0.1:6379>subscribe tv1 Reading messages... (press Ctrl-C to quit) 1) "subscribe" 2) "tv1" 3) (integer) 1 redis 127.0.0.1:6379>subscribe tv1 tv2 Reading messages... (press Ctrl-C to quit) 1) "subscribe" 2) "tv1" 3) (integer) 1 1) "subscribe" 2) "tv2" 3) (integer) 2
?? redis 127.0.0.1:6379>publish tv1 program1 (integer) 2 redis 127.0.0.1:6379>
?? redis 127.0.0.1:6379> subscribe tv1 Reading messages... (press Ctrl-C to quit) 1) "subscribe" 2) "tv1" 3) (integer) 1 1) "message" 2) "tv1" 3) "program1" redis 127.0.0.1:6379> subscribe tv1 tv2 Reading messages... (press Ctrl-C to quit) 1) "subscribe" 2) "tv1" 3) (integer) 1 1) "subscribe" 2) "tv2" 3) (integer) 2 1) "message" 2) "tv1" 3) "program1"
?? redis 127.0.0.1:6379>publish tv2 program2 (integer) 1 redis 127.0.0.1:6379>
?? redis 127.0.0.1:6379> subscribe tv1 Reading messages... (press Ctrl-C to quit) 1) "subscribe" 2) "tv1" 3) (integer) 1 1) "message" 2) "tv1" 3) "program1" redis 127.0.0.1:6379> subscribe tv1 tv2 Reading messages... (press Ctrl-C to quit) 1) "subscribe" 2) "tv1" 3) (integer) 1 1) "subscribe" 2) "tv2" 3) (integer) 2 1) "message" 2) "tv1" 3) "program1" 1) "message" 2) "tv2" 3) "program2"

?

  下面將詳細(xì)的解釋一下上面的例子

  1、client1訂閱了tv1這個channel這個頻道的消息,client2訂閱了tv1和tv2這2個頻道的消息

  2、client3 是用于發(fā)布tv1和tv2這2個頻道的消息發(fā)布者

  3、接下來我們在client3發(fā)布了一條消息”publish tv1 program1”,大家可以看到這條消息是發(fā)往tv1這個頻道的

  4、理所當(dāng)然的client1和client2都接收到了這個頻道的消息

  5、 然后client3又發(fā)布了一條消息”publish tv2 program2”,這條消息是發(fā)往tv2的,由于client1并沒有訂閱tv1,所以client1的結(jié)果中并沒有顯示出任何結(jié)果,但client2訂閱了這個頻道,所以client2是會有返回結(jié)果的。

  我們也可以用psubscribe tv*的方式批量訂閱以tv開頭的頻道的內(nèi)容。

  看完這個小例子后應(yīng)該對pub/sub功能有了一個感性的認(rèn)識。需要注意的是當(dāng)一個連接通過subscribe或者psubscribe訂閱通道后就進(jìn)入訂閱模式。在這種模式除了再訂閱額外的通道或者用unsubscribe或者punsubscribe命令退出訂閱模式,就不能再發(fā)送其他命令。另外使用 psubscribe命令訂閱多個通配符通道,如果一個消息匹配上了多個通道模式的話,會多次收到同一個消息。

轉(zhuǎn)載于:https://www.cnblogs.com/eefeng/archive/2013/05/14/3077126.html

總結(jié)

以上是生活随笔為你收集整理的Redis高级实用特性:发布及订阅消息的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。