<input id="ohw05"></input>
  • <table id="ohw05"><menu id="ohw05"></menu></table>
  • <var id="ohw05"></var>
  • <code id="ohw05"><cite id="ohw05"></cite></code>
    <label id="ohw05"></label>
    <var id="ohw05"></var>
  • 【Redis 系列】redis 學習九,Redis 的發布和訂閱是咋玩的

    Redis 發布訂閱

    Redis 發布訂閱(pub / sub)是一種消息通信模式

    • 發送者發送消息 pub
    • 接受者訂閱消息 sub

    例如微信,微博這樣的關注系統

    Redis 的客戶端可以訂閱任意數量的頻道,不受限制

    來看看圖示

    • 消息發布者
    • 消息訂閱者
    • 頻道

    這里的消息發布者,和消息訂閱者都是 redis 客戶端, 訂閱者訂閱某個頻道,發布者在該頻道中發布相關信息,例如文章,例如沸點,等等,消息訂閱者就能實時收到剛才發布者發送的內容了

    如下圖中,頻道 channel1

    以及訂閱這個頻道的三個客戶端 —— client2 、 client5 和 client1 之間的關系:

    當有新消息通過 PUBLISH 命令發送給頻道 channel1 時

    這個消息就會被發送給訂閱它的三個客戶端:

    常用命令

    下表列出了 redis 發布訂閱常用命令:

    序號 命令及描述
    1 PSUBSCRIBE pattern [pattern ...]
    訂閱一個或多個符合給定模式的頻道。
    2 PUBSUB subcommand [argument [argument ...]
    查看訂閱與發布系統狀態。
    3 PUBLISH channel message
    將信息發送到指定的頻道。
    4 [PUNSUBSCRIBE [pattern [pattern ...]
    退訂所有給定模式的頻道。
    5 SUBSCRIBE channel [channel ...]
    訂閱給定的一個或多個頻道的信息。
    6 UNSUBSCRIBE [channel [channel ...]
    指退訂給定的頻道。

    實際測試和驗證

    • subscribe channel [channel ...]

    訂閱一個或者多個通道

    • PUBLISH channel message

    向頻道中發送消息

    接收端:

    接收端訂閱 xiaomotong 頻道,只要發送端有 publish 消息到頻道中,接收端就能馬上收到

    127.0.0.1:6379> subscribe xiaomotong
    Reading messages... (press Ctrl-C to quit)
    1) "subscribe"
    2) "xiaomotong"
    3) (integer) 1
    1) "message"
    2) "xiaomotong"
    3) "hellowrold"
    1) "message"
    2) "xiaomotong"
    3) "hello_redis"
    1) "message"
    2) "xiaomotong"
    3) "xiaozhupeiqi"
    

    發送端:

    發送端向 xiaomotong 頻道依次發送 message ,hellowrold,hello_redis,xiaozhupeiqi

    root@iZuf66y3tuzn4wp3h02t7pZ:~# redis-cli
    127.0.0.1:6379> publish xiaomotong hellowrold
    (integer) 1
    127.0.0.1:6379> publish xiaomotong hello_redis
    (integer) 1
    127.0.0.1:6379> publish xiaomotong xiaozhupeiqi
    (integer) 1
    
    

    那么這個實現的原理是啥呢?

    實現原理

    redis 是 C 語言實現的,單進程的開源組件

    通過分析 redis 源碼里面的 publish.c 文件,我們可以了解到 redis 發布訂閱的底層實現,這能加深我們對 redis 的理解

    redis 通過 publish ,subscribe 和 psubscribe 等命令來實現發布和訂閱功能

    例如我們每個人都會使用的微信:

    subscribe

    通過 subscribe 訂閱某個頻道后,redis-server 內部會維護一個字典,字典的鍵就是這個頻道的名字,而字典的值是一個鏈表,這個鏈表里面保存了所有訂閱這個頻道的客戶端

    因此,我們就知道,subscribe 指令就是將客戶端添加到頻道的訂閱鏈表里面

    publish

    redis 通過 publish 向頻道中發送消息,redis-server 會使用給定的鍵作為頻道的名字,在它自己維護的頻道字典里面記錄了訂閱這個頻道所有的客戶端的鏈表,遍歷這個鏈表,將消息發送給所有的訂閱者

    pub / sub

    pub / sub 見名知意就是發布(publish)和訂閱(subscribe)

    在 redis 里面,我們可以設定對某一個 key 值,進行消息發布及消息訂閱,當在一個 key 值上面進行了消息發布后,所有訂閱他的客戶端都會收到它剛才發布的消息,這一功能最明顯的用法就是用作實時消息系統

    例如我們平常都會使用到的聊天系統,即時通信系統等等

    但是這里我們需要注意

    Redis 集群為了實現所有訂閱的客戶端都可以接收到發布的消息,但是不同的客戶端可能連接的是不同的主節點,為此 redis 會廣播所有的發布的消息到所有的節點,如果發布的消息較大,網絡開銷將會很大,因此需要避免發送大消息

    Redis 發布/訂閱應用場景

    1、實時消息系統

    2、即時通信,頻道作為聊天室,將信息回顯給訂閱頻道的所有人

    3、訂閱系統,關注系統都是 ok 的

    對于復雜的場景,我們就不用考慮 redis 了,可以直接使用專業的 MQ 開源組件,例如 rabbitMQ 或者 kafka

    使用 Redis 發布/訂閱 需要注意的點

    使用 Redis 發布/訂閱是有缺陷的

    1、對于消息處理可靠性要求不強

    2、消費能力無需通過增加消費方進行增強

    參考資料:

    redis_doc

    歡迎點贊,關注,收藏

    朋友們,你的支持和鼓勵,是我堅持分享,提高質量的動力

    好了,本次就到這里

    技術是開放的,我們的心態,更應是開放的。擁抱變化,向陽而生,努力向前行。

    我是小魔童哪吒,歡迎點贊關注收藏,下次見~

    posted @ 2022-03-25 21:57  小魔童哪吒  閱讀(19)  評論(0編輯  收藏  舉報
    国产美女a做受大片观看