Python操作redis中的订阅、发布

该博客介绍使用Python建立3个py文件。monitor.py将订阅、发布、保活封装成类,用线程定时向Redis发ping保活;publish.py用于消息发布;subscribe.py用于消息接收。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

建立了3个py文件
1. monitor.py文件将订阅、发布、保存服务器连接存活三者封装成一个class,这里使用线程,每隔一段时间,向redis服务器发一次ping连接,保证长时间连接redis服务器,不会和客户端断开。
# -*- coding:utf-8 -*-
import threading
import time
import redis


class RedisTest(object):
    def __init__(self):
        self.__conn = redis.Redis(host='127.0.0.1', port=6379, password='XXXX')  # 连接Redis

    def publish(self, channel, msg):  # 定义发布方法
        self.__conn.publish(channel, msg)
        return True

    def subscribe(self, channel):  # 定义订阅方法
        self.keep_alive()  # 保证和redis服务器连接存活
        pub = self.__conn.pubsub() # 可以看作是打开收音机
        pub.psubscribe(channel)   # psubscribe可以订阅多个频道
        pub.parse_response()  # 接收信息
        return pub

    def _ping(self):
        """
        发个消息,刷存在感
        """
        while True:
            time.sleep(1)
            # 尝试向redis-server发一条消息
            print ('和redis服务器的连接是否连接:{0}'.format(self.__conn.ping()))
            if not self.__conn.ping():
                print('和redis服务器的连接是否连接:{0}'.format(self.__conn.ping()))
                # 重新建立连接
                del self.__conn
                self.__conn = redis.Redis('127.0.0.1', port=6379, password='XXXX')

    def keep_alive(self):
        """
        保持客户端长连接
        """
        thread_test = threading.Thread(target=self._ping)
        thread_test.start()

2. publish.py用于消息的发布
# -*- coding:utf-8 -*-
# 发布
from monitor import RedisTest


def publish_test():
    obj = RedisTest()
    obj.publish('channel2', 'hello')  # 发布


if __name__ == '__main__':
    publish_test()
3. subscribe.py调用订阅,用于消息的接受。
# -*- coding:utf-8 -*-
# 订阅
from monitor import RedisTest


def subscribe_test():
    obj = RedisTest()
    channel_list = ['channel1', 'channel2']
    redis_sub = obj.subscribe(channel_list)  # 调用订阅方法
    while True:
        msg = redis_sub.parse_response()
        print (msg)


if __name__ == '__main__':
    subscribe_test()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值