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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python实现Redis订阅发布

發布時間:2023/12/20 python 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python实现Redis订阅发布 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Redis 發布訂閱

Redis 發布訂閱可以用在像消息通知,群聊,定向推送,參數刷新加載等業務場景

發布訂閱模型有三個角色:

  • 發布者(Publisher)
  • 訂閱者(Subscriber)
  • 頻道(channel)
  • 每個訂閱者可以訂閱多個頻道,發布者可以在某個頻道里發布消息,訂閱者會接受到自己訂閱頻道里發布的消息。

    1.相關命令 (參考)

    publish channel message 發布消息 subscribe [channel] 訂閱頻道 unsubscribe [channel] 取消訂閱 psubscribe [pattern...] 訂閱指定模式的頻道 punsubscribe [pattern...] 退訂指定模式的頻道 pubsub channels 列出至少有一個訂閱者的頻道 pubsub numsub [channel...] 列表給定頻道的訂閱者數量 pubsub numpat 列表被訂閱模式的數量

    在終端使用示例

    # 在 終端1 訂閱cctv1 127.0.0.1:8100> subscribe cctv1 Reading messages... (press Ctrl-C to quit) 1) "subscribe" 2) "cctv1" 3) (integer) 1 # 在 終端2 向cctv1 發布消息 127.0.0.1:8100> publish cctv1 "this is cctv1" (integer) 1 # 終端1 接受到終端2發的消息 127.0.0.1:8100> subscribe cctv1 Reading messages... (press Ctrl-C to quit) 1) "subscribe" 2) "cctv1" 3) (integer) 1 1) "message" 2) "cctv1" 3) "this is cctv1"

    2. python 實現

    訂閱者類,只寫了訂閱功能,退訂原理是一樣的,偷了懶,把訂閱頻道和接收消息寫到了一個方法里面,如果嚴格按面向對象的思想應該分開。

    from PublishAndSubscribe.Channel import Channel from PublishAndSubscribe.RedisTool import RedisToolclass Subscriber:def __init__(self, conn):self._conn = conndef subscribe(self, channel: Channel):# 獲取發布/訂閱對象pub = self._conn.pubsub()# 選擇要訂閱的頻道pub.subscribe(channel.name)while True:# 接收消息msg = pub.parse_response()print(msg)if __name__ == '__main__':client = RedisTool.redis_connection("0.0.0.0", 8100, "password")cctv1 = Channel("CCTV1")Subscriber(client).subscribe(cctv1)

    發布者類

    from PublishAndSubscribe.Channel import Channel from PublishAndSubscribe.RedisTool import RedisToolclass Publisher:def __init__(self, conn):self._conn = conndef publish(self, channel: Channel, mess: str):# 向特定頻道發布消息self._conn.publish(channel.name, mess)if __name__ == '__main__':cctv1 = Channel("CCTV1")client = RedisTool.redis_connection("0.0.0.0", 8100, "password")publisher = Publisher(client)while True:publisher.publish(cctv1, input("請輸入要發送的消息:"))

    頻道類,Redis中頻道的概念只是一個字符串

    class Channel:def __init__(self, name: str):self.name = name

    一個工具類,用來連接redis

    import redisclass RedisTool:@staticmethoddef redis_connection(address: str, port: int, password: str):"""用來連接RedisArgs:address: Redis 服務端IP地址port: [int] Redis 服務端口password: Redis client 登錄憑證Return:type[Redis]: 返回一個redis對象"""return redis.StrictRedis(address, port, password=password)
    • 為了簡便在訂閱者和發布者兩處都實例化了一個“CCTV1”的頻道,雖然用起來不會有什么問題(Redis中簡單的通過字符串區分頻道),但在實際中這應該是同一個對象。

    結果:

    總結

    以上是生活随笔為你收集整理的python实现Redis订阅发布的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。