redis的pub/sub

代码:

sub:

import redis
import json
from redis import Redis, ConnectionPool

def jsonStandFormat(jsondata):
    return json.dumps(jsondata, sort_keys=True, indent=4, separators=(',', ':'), ensure_ascii=False)

 
# 连接到Redis
if 0:
    r = redis.Redis(host='localhost', port=6379, db=0)
else:
    pool = ConnectionPool(host='localhost', port=6379, db=0, max_connections=10)
    r = Redis(connection_pool=pool)
 
# 订阅频道
pubsub = r.pubsub()

pubsub.subscribe('news')

# 订阅以'news_'开头的所有频道
pubsub.psubscribe('news.*')

# 监听并打印收到的消息
for message in pubsub.listen():
    for k,v in message.items():
        message[k] = v.decode() if type(v) == bytes else v
        
    if message['type'] == 'message':
        #print(jsonStandFormat(message))
        print(f"频道[{message['channel']}]: {message['data']}")
        
    if message['type'] == 'pmessage':
        #print(jsonStandFormat(message))
        print(f"频道[{message['channel']}]: {message['data']}")
        
pubsub.unsubscribe()

pub:

import redis
from redis import Redis, ConnectionPool
import random
 
# 连接到Redis
if 0:
    r = redis.Redis(host='localhost', port=6379, db=0)
else:
    pool = ConnectionPool(host='localhost', port=6379, db=0, max_connections=10)
    r = Redis(connection_pool=pool)
 
# 发布消息到频道
r.publish('news', '这是我的消息%s' % random.randint(1,999))
r.publish('news.%s' % random.randint(1,999), '这是我的消息%s' % random.randint(1,999))

 

测试情况:

 

posted @ 2025-05-22 17:16  河北大学-徐小波  阅读(246)  评论(0)    收藏  举报