Redis PUBLISH命令

Redis的PUBLISH命令用于向指定的频道(channel)发布一条消息(message),所有订阅该频道的客户端都能接收到这条消息。其基本格式为:PUBLISH channel message。

PUBLISH命令是Redis发布/订阅(pub/sub)功能的基础命令之一,常用于实现聊天室、实时消息推送等场景。下面就来详细讲解它的使用方法及示例:

标题

命令格式

PUBLISH channel message

参数说明

  • channel:要发布消息的频道名称。
  • message:要发布的消息内容。

使用方法

  1. 在Redis-cli客户端中使用PUBLISH命令,例如向名为“chat_room”的频道发布一条“Hello World!”的消息:
PUBLISH chat_room "Hello World!"
  1. 也可以在程序中使用Redis的客户端库,比如Python的redis模块,实现PUBLISH命令的调用,如下所示:
import redis
r = redis.Redis(host='localhost', port=6379, decode_responses=True)
r.publish('chat_room', 'Hello World!')

示例说明

  1. 聊天室实现
    假设有一个在线聊天室,多个用户可以在该聊天室中发送和接收消息,那么在聊天室服务器中,可以通过调用PUBLISH命令将用户输入的消息实时广播到所有订阅了该频道的客户端中:
// 服务器端
import redis
import asyncio

async def handle(reader, writer):
    addr = writer.get_extra_info('peername')
    print('Accepted connection from {}'.format(addr))
    p = await redis.ConnectionPool.create(host='localhost', port=6379, db=0)
    r = redis.Redis(connection_pool=p)
    channel = 'chat_room'
    while True:
        data = await reader.read(1024)
        message = data.decode('utf-8').strip()
        if not message:
            break
        r.publish(channel, message)
    print('Close the client socket')
    writer.close()

async def main():
    server = await asyncio.start_server(handle, 'localhost', 8888)
    addr = server.sockets[0].getsockname()
    print(f'Serving on {addr}')
    async with server:
        await server.serve_forever()

asyncio.run(main())
// 客户端
import asyncio
import sys

async def tcp_echo_client():
    reader, writer = await asyncio.open_connection('localhost', 8888)

    while True:
        message = input("> ")
        if not message:
            break
        writer.write(message.encode())
        await writer.drain()

    print('Close the socket')
    writer.close()
    await writer.wait_closed()

async def main():
    await tcp_echo_client()

asyncio.run(main())

多个客户端连接到服务器后,输入的消息将被实时发布到订阅了该频道的其他客户端中。

  1. 实时数据更新
    比如一个在线商城,当有商品库存更新时,需要及时通知所有客户端,可以通过调用PUBLISH命令实现该功能:
import redis
import time

r = redis.Redis(host='localhost', port=6379, decode_responses=True)
channel = 'product_update'
while True:
    # 假设每隔5秒自动刷新一次页面,查询库存
    stock = query_stock()
    r.publish(channel, stock)
    time.sleep(5)

在客户端中订阅该频道,就可以实时接收到商品库存的变化信息,从而及时更新页面数据。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Redis PUBLISH命令 - Python技术站

(0)
上一篇 2023年3月28日
下一篇 2023年3月28日

相关文章

  • redis缓存数据库Hash,list,set操作

    Hash操作 hash表现形式上有些像python中的dict,可以存储一组关联性较强的数据,redis中Hash在内存中的存储格式如下图: 1、hset(name,key,value) #name对应的hash中设置一个键值对(不存在,则创建;否则,修改) #参数: #name,redis的name #key,name对应的hash中的key #vale,…

    Redis 2023年4月12日
    00
  • php redis通用类

    <?php /** * redis操作类 * 说明,任何为false的串,存在redis中都是空串。 * 只有在key不存在时,才会返回false。 * 这点可用于防止缓存穿透 * */ class Redis { private $redis; //当前数据库ID号 protected $dbId=0; //当前权限认证码 protected $au…

    Redis 2023年4月11日
    00
  • Redis知识网络

    作者:运维君莫笑链接:https://www.zhihu.com/question/470465324/answer/2006650219 Redis为什么这么快? 根据官方数据。官方的基准程序测试,Redis 的 QPS 可以达到约 100000(每秒请求数) 基于内存实现 。Redis 是基于内存的数据库,不论读写操作都是在内存上完成的,跟磁盘数据库相比…

    Redis 2023年4月12日
    00
  • Redis MONITOR命令

    Redis MONITOR命令 Redis MONITOR 命令用于实时监控客户端与 Redis 服务器之间的交互流。它不具有参数、选项和返回值。MONITOR 命令将 Redis 服务器从常规状态更改为监视状态,并在服务器接收到后续客户端命令时打印出命令及它们的参数。该命令用于调试、性能测试和协议开发。 使用方法 # 直接在命令行输入 redis-cli …

    Redis 2023年3月28日
    00
  • Redis CONFIG REWRITE命令

    Redis CONFIG REWRITE命令的作用是将redis.conf配置文件中的配置选项以SET命令的形式保存到redis数据库中,以便在后续Redis重新启动时使用。可以认为,该命令是一种持久化配置文件的方式。 使用该命令的方法如下: 使用CONFIG GET命令获取redis服务器当前的所有配置信息: # CONFIG GET * 修改redis服…

    Redis 2023年3月28日
    00
  • Centos6.6 安装Redis

    一.介绍   redis在做数据库缓存,session存储,消息队列上用的比较多   二.安装 $ yum install -y wget gcc make tcl $ wget http://download.redis.io/releases/redis-3.0.2.tar.gz $ tar zxvf redis-3.0.2.tar.gz $ cd re…

    Redis 2023年4月13日
    00
  • ehcache memcache redis 区别

    之前用过redis 和 memcache ,没有ehcache 的开发经验,最近也查阅不少文档和博客,写一些总结,也有不少内容总结与诸多博客中的博主总结:  Ehcache EhCache 是一个纯Java的进程内缓存框架,具有快速、精干等特点,是Hibernate中默认的CacheProvider,所以被用于大型复杂分布式web application的各…

    Redis 2023年4月12日
    00
  • redis 哨兵集群原理及部署 Redis哨兵模式(sentinel)学习总结及部署记录(主从复制、读写分离、主从切换)

    复制粘贴自: https://www.cnblogs.com/kevingrace/p/9004460.html 请点击此链接查看原文. 仅供本人学习参考, 如有侵权, 请联系删除, 多谢! Redis的集群方案大致有三种:1)redis cluster集群方案;2)master/slave主从方案;3)哨兵模式来进行主从替换以及故障恢复。 一、sentin…

    Redis 2023年4月11日
    00
合作推广
合作推广
分享本页
返回顶部