python实现 redis订阅与发布

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介:

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

                                           多的不说看代码!!!

面向过程的方法

#!/usr/bin/python

#coding:utf-8


#服务器端

import redis  

r = redis.Redis(host='127.0.0.1',port='6379') #连接redis

p = r.pubsub()        #开启订阅

p.subscribe('6379')  #接收订阅的数据,订阅的频道 


for item in p.listen():  #读取接收的数据

    print item 

    if item['type'] == 'message': #判断数据是否是用户发布的数据   

        data = item['data']      #取出用户要发布的数据

        print data   #打印要发布的数据


        if item['data'] == 'Q' or item['data'] == 'q':    

            break;       #退出程序

p.unsubscribe('6379') #关闭频道  

print '取消订阅'


#客户端

#!/usr/bin/py

#coding:utf-8

import redis  

r = redis.Redis(host='127.0.0.1',port=6379) #连接redis

  

while True:  

    my_input = raw_input("请输入发布内容:") #输入发布的内容  

    r.publish('6379', my_input) #发送到的频道,发布的内容   


    if my_input == 'Q' or my_input == 'q':       #判断用户是否要退出程序

        print '停止发布'  

        break; 


面向对象的方法

#服务器端

#!/usr/bin/python

#coding:utf-8

import redis


class server(object):

    def __init__(self,ip='127.0.0.1',port=6379,sub='A'):

        self.ip = ip

        self.port = port

        self.connect = redis.Redis(host=self.ip,port=self.port)   #连接redis

        self.sub = sub  #监听频道

    def se(self):

        spub = self.connect.pubsub() #打开订阅

        spub.subscribe(self.sub) #开始监听

        spub.listen() #用户发布的数据

        return spub


x = server()

p = x.se()

for item in p.listen():     #打印接收到的数据

    print item


#客户端

#!/usr/bin/python

#coding:utf-8

import redis


class client(object):

    def __init__(self,ip='127.0.0.1',port=6379,pub='A'):

        self.ip = ip

        self.port = port

        self.connect = redis.Redis(host=self.ip,port=self.port)

        self.pub = pub         #连接的频道

    def cl(self,content):

        self.connect.publish(self.pub,content) #频道,发送的数据


x = client()

while True:

    my_input = raw_input('请输入发布内容:')     #发布的数据

    x.cl(my_input)


        个人比较喜欢第二种方法,也推荐各位朋友使用第二种方法,第二种方法中我没有对接收到的数据进行过多的处理,如果各位朋友喜欢可以拿去自行修改

本文转自  红尘世间  51CTO博客,原文链接:http://blog.51cto.com/hongchen99/1909790

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
5月前
|
NoSQL Unix 网络安全
【Azure Cache for Redis】Python Django-Redis连接Azure Redis服务遇上(104, 'Connection reset by peer')
【Azure Cache for Redis】Python Django-Redis连接Azure Redis服务遇上(104, 'Connection reset by peer')
【Azure Cache for Redis】Python Django-Redis连接Azure Redis服务遇上(104, 'Connection reset by peer')
|
2月前
|
消息中间件 NoSQL Redis
【赵渝强老师】Redis的消息发布与订阅
本文介绍了Redis实现消息队列的两种场景:发布者订阅者模式和生产者消费者模式。其中,发布者订阅者模式通过channel频道进行解耦,订阅者监听特定channel的消息,当发布者向该channel发送消息时,所有订阅者都能接收到消息。文章还提供了相关操作命令及示例代码,展示了如何使用Redis实现消息的发布与订阅。
|
3月前
|
SQL 分布式计算 NoSQL
大数据-42 Redis 功能扩展 发布/订阅模式 事务相关的内容 Redis弱事务
大数据-42 Redis 功能扩展 发布/订阅模式 事务相关的内容 Redis弱事务
35 2
|
4月前
|
NoSQL Linux Redis
linux安装单机版redis详细步骤,及python连接redis案例
这篇文章提供了在Linux系统中安装单机版Redis的详细步骤,并展示了如何配置Redis为systemctl启动,以及使用Python连接Redis进行数据操作的案例。
104 3
|
3月前
|
消息中间件 存储 NoSQL
python 使用redis实现支持优先级的消息队列详细说明和代码
python 使用redis实现支持优先级的消息队列详细说明和代码
56 0
|
5月前
|
缓存 NoSQL 网络安全
【Azure Redis 缓存】 Python连接Azure Redis, 使用redis.ConnectionPool 出现 "ConnectionResetError: [Errno 104] Connection reset by peer"
【Azure Redis 缓存】 Python连接Azure Redis, 使用redis.ConnectionPool 出现 "ConnectionResetError: [Errno 104] Connection reset by peer"
|
5月前
|
API 开发工具 Python
【Azure Developer】Python 获取 Azure 中订阅(subscription)信息,包含ID, Name等
【Azure Developer】Python 获取 Azure 中订阅(subscription)信息,包含ID, Name等
|
5月前
|
开发工具 数据安全/隐私保护 Python
【Azure 环境】通过Python SDK收集所有订阅简略信息,例如订阅id 名称, 资源组及组内资源信息等,如何给Python应用赋予相应的权限才能获取到信息呢?
【Azure 环境】通过Python SDK收集所有订阅简略信息,例如订阅id 名称, 资源组及组内资源信息等,如何给Python应用赋予相应的权限才能获取到信息呢?
|
5月前
|
缓存 监控 NoSQL
【Azure Redis 缓存】使用Python代码获取Azure Redis的监控指标值 (含Powershell脚本方式)
【Azure Redis 缓存】使用Python代码获取Azure Redis的监控指标值 (含Powershell脚本方式)
|
5月前
|
NoSQL 网络安全 Redis
用python安装redis并设置服务自启
用python安装redis并设置服务自启
34 0