Redis 入门到精通2

一、发布订阅模式

  1. 概念:

    • 发布订阅(Publish/Subscribe)模式是一种消息通信模式,在这种模式中,发送者(发布者)不是直接将消息发送给特定的接收者(订阅者),而是将消息发布到一个特定的频道(channel),而对这个频道感兴趣的订阅者会接收到消息。
  2. 特点:

    • 解耦发布者和订阅者:发布者不需要知道有哪些订阅者,订阅者也不需要知道消息是由谁发布的。
    • 异步通信:发布者和订阅者可以在不同的时间和地点进行操作,消息会在合适的时候被传递。
    • 多对多通信:多个发布者可以向同一个频道发布消息,多个订阅者可以订阅同一个频道。
  3. 命令及示例:

    • SUBSCRIBE channel [channel...]:订阅一个或多个频道。

      SUBSCRIBE news
      

      输出:等待接收消息,当有发布者向“news”频道发布消息时,会显示消息内容。

    • PUBLISH channel message:向指定频道发布消息。

      PUBLISH news "Breaking news!"
      

      输出:返回订阅者的数量,表示有多少个订阅者接收到了这条消息。

  4. 应用场景:

    • 实时通知:例如在社交网络中,当一个用户发布了新的状态,其他关注该用户的用户可以通过订阅特定的频道来接收通知。
    • 日志系统:可以将不同类型的日志发布到不同的频道,让订阅者根据需要进行处理。

二、消息队列 Stream

  1. 概念:

    • Redis Stream 是 Redis 5.0 引入的一种新的数据类型,用于实现消息队列。它提供了一种可靠的、持久化的、可扩展的消息队列解决方案。
  2. 特点:

    • 消息持久化:Stream 中的消息可以持久化到磁盘,即使 Redis 服务器重启,消息也不会丢失。
    • 消费者组:可以将多个消费者组成一个消费者组,每个消费者组可以独立地消费消息,实现负载均衡和高可用性。
    • 消息确认:消费者在处理完消息后需要进行确认,确保消息被正确处理。如果消费者在处理消息过程中出现故障,消息会重新分配给其他消费者进行处理。
  3. 命令及示例:

    • XADD stream [MAXLEN [~] count] *|ID field value [field value...]:向 Stream 中添加消息。

      XADD mystream * name "John" age 30
      

      输出:返回生成的消息 ID。

    • XREAD [COUNT count] [BLOCK milliseconds] STREAMS stream1 [stream2...] ID [ID...]:读取 Stream 中的消息。

      XREAD BLOCK 0 STREAMS mystream $
      

      输出:显示读取到的消息内容,格式为一个数组,包含消息 ID 和字段值。

    • XGROUP CREATE stream groupname [MKSTREAM] [ID id]:创建消费者组。

      XGROUP CREATE mystream mygroup $
      

      输出:OK

    • XREADGROUP GROUP groupname consumer [COUNT count] [BLOCK milliseconds] STREAMS stream [stream...] ID [ID...]:消费者从消费者组中读取消息。

      XREADGROUP GROUP mygroup consumer1 COUNT 1 STREAMS mystream >
      

      输出:显示读取到的消息内容,格式为一个数组,包含消息 ID 和字段值。

    • XACK stream groupname id [id...]:消费者确认处理完消息。

      XACK mystream mygroup message_id
      

      输出:确认的消息数量。

  4. 应用场景:

    • 分布式任务队列:可以将任务作为消息添加到 Stream 中,然后由多个消费者从不同的节点上进行处理。
    • 事件驱动架构:可以将各种事件发布到 Stream 中,让订阅者根据事件进行相应的处理。

三、详细示例

一、发布订阅模式

  1. 引入依赖:
    • 如果使用 Maven,在pom.xml中添加以下依赖:
<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>4.4.0</version>
</dependency>
  1. 发布者代码:
import redis.clients.jedis.Jedis;

public class RedisPublisher {
   
    public static void main
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值