• Redis七(发布订阅)


    发布与订阅(pub/sub)

    介绍

      Redis 通过 PUBLISH 、 SUBSCRIBE 等命令实现了订阅与发布模式, 这个功能提供两种信息机制, 分别是订阅/发布到频道和订阅/发布到模式

      订阅者可以订阅一个或多个频道,发布者向一个频道发送消息后,所有订阅这个频道的订阅者都将收到消息,而发布者也将收到一个数值,这个数值是收到消息的订阅者的数量。订阅者只能收到自它开始订阅后发布者所发布的消息,而之前发布的消息是收不到的。

    运行原理

      Redis 的 SUBSCRIBE 命令可以让客户端订阅任意数量的频道, 每当有新信息发送到被订阅的频道时, 信息就会被发送给所有订阅指定频道的客户端。

      当有新消息通过 PUBLISH 命令发送给频道 channel1 时, 这个消息就会被发送给订阅它的三个客户端:

    Python下实现Redis的发布和订阅

    Demo如下:

     redisPubSub.py

    #用来连接redis server并封装了发布与订阅的功能
    import redis
    
    class RedisPubSubHelper():
    
        def __init__(self):
            # redis连接对象
            self.__conn = redis.Redis(host='192.168.49.130')
    
        def publish(self, message, channel):
            # redis对象的publish方法(发布)
            # 往指定的频道中发布信息
            self.__conn.publish(channel, message)
            return True
    
        def subscribe(self, channel):
            # 返回了一个发布订阅的对象
            pub = self.__conn.pubsub()
            # 订阅到指定的频道上
            pub.subscribe(channel)
            pub.parse_response()
            return pub

    订阅者:

    #!/usr/bin/env/ python
    # -*-coding:utf-8 -*-
    import redisPubSub
    
    # 创建一个连接redis的对象(使用发布与订阅模式的redis对象)
    r = redisPubSub.RedisPubSubHelper()
    
    #创建发布订阅的对象
    redis_sub=r.subscribe('fm104.9')# 指定订阅频道
    while True:
    # 接收频道中的内容,代码会阻塞到这里,直到收到消息
        msg=redis_sub.parse_response()
        print(msg)

    发布者:

    #!/usr/bin/env/ python
    # -*-coding:utf-8 -*-
    import redisPubSub
    
    # 创建一个连接redis的对象(使用发布与订阅模式的redis对象)
    r = redisPubSub.RedisPubSubHelper()
    # 向指定的频道发布消息
    r.publish('hello world', 'fm104.9')

    更多参见:https://github.com/andymccurdy/redis-py/

    http://doc.redisfans.com/

  • 相关阅读:
    BZOJ2243: [SDOI2011]染色(树链剖分/LCT)
    BZOJ2157: 旅游(LCT)
    BZOJ3510首都(LCT)
    BZOJ4530 [BJOI2014]大融合(LCT)
    BZOJ2631: tree(LCT)
    BZOJ2002: [Hnoi2010]Bounce 弹飞绵羊(LCT)
    BZOJ3282: Tree (LCT模板)
    [NOI2008]假面舞会(DFS)
    斜率优化dp练习
    BZOJ2049[Sdoi2008]Cave 洞穴勘测(LCT模板)
  • 原文地址:https://www.cnblogs.com/freely/p/6848350.html
Copyright © 2020-2023  润新知