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(七):RedisTemplate 操作API

    一、scan SCAN 命令用于迭代当前数据库中的数据库键。 SSCAN 命令用于迭代集合键中的元素。 HSCAN 命令用于迭代哈希键中的键值对。 ZSCAN 命令用于迭代有序集合中的元素(包括元素成员和元素分值)。 1. 数据库基本命令 1)扫描所有数据表 scan 0 2)扫描hash表Real_Gps中的两条记录 HSCAN Real_Gps 0 MA…

    Redis 2023年4月16日
    00
  • node js 操作redis promise

    连接 redis = require(‘redis’) var client = redis.createClient(‘6379’, ‘127.0.0.1’); client.on(‘connect’, function() { console.log(‘connected’); }); 基础操作 /** * 1、字符串数据类型 */ var res = …

    Redis 2023年4月11日
    00
  • Redis 如何实现按照 score 排序的有序集合?

    当我们需要按照分值(score)对数据进行排序时,Redis 提供了有序集合(Sorted Set)数据结构,可以存储多个成员和对应的分值,并且可以按照分值进行排序。本文将详细讲解 Redis 如何实现按照 score 排序的有序集合,包括实现原理和使用攻略。 Redis 按照 score 排序的有序集合的实现原理 Redis 按照 score 排序的有序集…

    python 2023年5月12日
    00
  • php,redis分布式锁防并发

        解决死锁   如果只用SETNX命令设置锁的话,如果当持有锁的进程崩溃或删除锁失败时,其他进程将无法获取到锁,问题就大了。 解决方法是在获取锁失败的同时获取锁的值,并将值与当前时间进行对比,如果值小于当前时间说明锁以过期失效,进程可运用Redis的DEL命令删除该锁。 setnx的作用和memcache的add方法类似 class rediss { …

    Redis 2023年4月11日
    00
  • Redis SLAVEOF命令

    Redis SLAVEOF命令完整攻略 命令说明 命令格式 SLAVEOF host port 功能说明 让当前 Redis 服务器成为另一个机器上 Redis 服务器的从属服务器(slave)(也就是采用复制的方式同步数据)。另一个 Redis 服务器必须先通过 CONFIG 命令的 SET 子命令来配置成为可被其他机器复制的服务器。执行这个命令之后,当前…

    Redis 2023年3月28日
    00
  • 如何为Redis中list中的项设置过期时间

    Redis是一个伟大的工具,用来在内存中存储列表是很合适的。 不过,如果你想要快速搜索列表,同时需要让列表中每项都在一定时间后过期,应该怎么做呢? 首先,当然不能使用不同的类似的key存储数据,然后使用keys命令来获取所有类似key的数据。这样的开销是不可接受的。 Redis并没有直接提供方法做这件事,但是这是可以做到的!虽然最后用的未必是Redis的Li…

    Redis 2023年4月13日
    00
  • Redis bitmap位图操作方法详解

    Redis的位图(Bitmap)是一种高效的数据结构,可以在极小的内存空间内存储大量的二进制数据。它是由一系列二进制位组成的连续序列,每个二进制位只能是0或1。 Redis提供了一系列操作命令,可以对位图进行高效的位操作,如设置、获取、统计、逻辑运算等。在平时开发过程中,经常会有一些 bool 类型数据需要存取。比如记录用户一年内签到的次数,签了是 1,没签…

    Redis 2023年3月18日
    00
  • Redis ZRANK命令

    Redis ZRANK命令用于获取有序集合中指定成员的排名(即该成员在有序集合中的索引位置),其中排名从0开始计数,表示成员在有序集合中从小到大排序后的位置。 此命令的使用格式为: ZRANK key member 其中key表示有序集合的键名,member表示要获取排名的成员名。 如果有序集合中存在该成员,则该命令会返回该成员的排名。如果有序集合中不存在该…

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