Redis 从入门到精通之Redis 订阅与发布

本文涉及的产品
性能测试 PTS,5000VUM额度
注册配置 MSE Nacos/ZooKeeper,118元/月
云原生网关 MSE Higress,422元/月
简介: Redis 是一个支持发布/订阅模式的高性能内存数据库,支持订阅频道和模式。在 Redis 中,客户端可以订阅一个或多个频道或模式,然后接收发布到这些频道或模式的消息。下面将介绍 Redis 中订阅与发布相关的命令和操作

Redis 是一个支持发布/订阅模式的高性能内存数据库,支持订阅频道和模式。在 Redis 中,客户端可以订阅一个或多个频道或模式,然后接收发布到这些频道或模式的消息。下面将介绍 Redis 中订阅与发布相关的命令和操作。
image.png

1.基本命令

1.1订阅频道

通过 SUBSCRIBE 命令可以订阅一个或多个频道:

SUBSCRIBE channel1 channel2

当客户端订阅一个频道时,它会一直等待,直到有消息发布到这个频道。当有消息发布到这个频道时,客户端会收到一条消息。

1.2 发送信息到频道

通过 PUBLISH 命令可以向一个频道发送消息:

PUBLISH channel1 "Hello, World!"

当有消息发布到一个频道时,所有订阅这个频道的客户端都会收到这条消息。

1.3 退订频道

通过 UNSUBSCRIBE 命令可以退订一个或多个频道:

UNSUBSCRIBE channel1 channel2

当客户端退订一个频道时,它将不再接收这个频道的消息。

1.4 订阅模式

通过 PSUBSCRIBE 命令可以订阅一个或多个模式:

PSUBSCRIBE pattern1 pattern2

当客户端订阅一个模式时,它会一直等待,直到有消息发布到一个与这个模式匹配的频道。当有消息发布到一个与这个模式匹配的频道时,客户端会收到一条消息。

1.5 发送信息到模式

通过 PUBLISH 命令可以向一个模式发送消息:

PUBLISH pattern1 "Hello, World!"

当有消息发布到一个与一个模式匹配的频道时,所有订阅这个模式的客户端都会收到这条消息。

1.6 退订模式

通过 PUNSUBSCRIBE 命令可以退订一个或多个模式:

PUNSUBSCRIBE pattern1 pattern2

当客户端退订一个模式时,它将不再接收与这个模式匹配的频道的消息。

2. Java代码示例

我们使用Java 代码示例来演示 Redis 订阅与发布功能的使用。

需要使用 Redis 客户端库,比如 Jedis。如果是已经工作几年的可以使用Spring 提供的RedisTemplate操作。在 Maven 项目中,可以添加以下依赖:

<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>3.7.0</version>
</dependency>

然后,可以使用以下代码来实现 Redis 订阅与发布的功能。

2.1 订阅频道

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPubSub;

public class Subscriber {
   
   
    public static void main(String[] args) {
   
   
        Jedis jedis = new Jedis("localhost");
        jedis.subscribe(new JedisPubSub() {
   
   
            @Override
            public void onMessage(String channel, String message) {
   
   
                System.out.println("Received message: " + message + " from channel: " + channel);
            }
        }, "channel1");
    }
}

创建了一个 Jedis 实例,然后使用 subscribe 方法订阅了一个名为 channel1 的频道,并在回调函数中处理接收到的消息。

2.2 发送信息到频道

import redis.clients.jedis.Jedis;

public class Publisher {
   
   
    public static void main(String[] args) {
   
   
        Jedis jedis = new Jedis("localhost");
        jedis.publish("channel1", "Hello, World!");
    }
}

在这个示例中,创建了一个 Jedis 实例,然后使用 publish 方法向名为 channel1 的频道发送了一条消息。

2.3 订阅模式

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPubSub;

public class PatternSubscriber {
   
   
    public static void main(String[] args) {
   
   
        Jedis jedis = new Jedis("localhost");
        jedis.psubscribe(new JedisPubSub() {
   
   
            @Override
            public void onPMessage(String pattern, String channel, String message) {
   
   
                System.out.println("Received message: " + message + " from channel: " + channel + " matching pattern: " + pattern);
            }
        }, "pattern*");
    }
}

2.4 发送信息到模式

import redis.clients.jedis.Jedis;

public class PatternPublisher {
   
   
    public static void main(String[] args) {
   
   
        Jedis jedis = new Jedis("localhost");
        jedis.publish("pattern1", "Hello, World!");
    }
}

我们可以看到如何使用 Jedis 客户端库实现 Redis 订阅与发布的功能,包括订阅频道、发送信息到频道、订阅模式、发送信息到模式等。需要注意的是,在实际的应用中,需要根据实际情况进行适当的容错处理和调优。

总结

通过 Redis 的订阅与发布功能,客户端可以方便地实现消息的发布和订阅,从而实现一些实时通知、聊天和实时数据更新等功能。在使用 Redis 订阅与发布功能时,需要注意以下几点:

  • Redis 订阅与发布功能是基于内存的,因此不适合用于存储大量数据。
  • Redis 订阅与发布功能在集群环境下的表现可能会有所不同,需要根据实际情况进行测试和调优。
  • Redis 订阅与发布功能不是消息队列,无法保证消息的顺序和可靠性,因此需要在实际应用中进行适当的处理和容错机制。
相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
1月前
|
缓存 NoSQL Java
springboot的缓存和redis缓存,入门级别教程
本文介绍了Spring Boot中的缓存机制,包括使用默认的JVM缓存和集成Redis缓存,以及如何配置和使用缓存来提高应用程序性能。
98 1
springboot的缓存和redis缓存,入门级别教程
|
11天前
|
消息中间件 NoSQL Redis
【赵渝强老师】Redis的消息发布与订阅
本文介绍了Redis实现消息队列的两种场景:发布者订阅者模式和生产者消费者模式。其中,发布者订阅者模式通过channel频道进行解耦,订阅者监听特定channel的消息,当发布者向该channel发送消息时,所有订阅者都能接收到消息。文章还提供了相关操作命令及示例代码,展示了如何使用Redis实现消息的发布与订阅。
|
1月前
|
存储 消息中间件 NoSQL
Redis 入门 - C#.NET Core客户端库六种选择
Redis 入门 - C#.NET Core客户端库六种选择
60 8
|
1月前
|
SQL 分布式计算 NoSQL
大数据-42 Redis 功能扩展 发布/订阅模式 事务相关的内容 Redis弱事务
大数据-42 Redis 功能扩展 发布/订阅模式 事务相关的内容 Redis弱事务
25 2
|
3月前
|
SQL 存储 NoSQL
Redis6入门到实战------ 一、NoSQL数据库简介
这篇文章是关于NoSQL数据库的简介,讨论了技术发展、NoSQL数据库的概念、适用场景、不适用场景,以及常见的非关系型数据库。文章还提到了Web1.0到Web2.0时代的技术演进,以及解决CPU、内存和IO压力的方法,并对比了行式存储和列式存储数据库的特点。
Redis6入门到实战------ 一、NoSQL数据库简介
|
3月前
|
NoSQL 算法 安全
Redis6入门到实战------ 四、Redis配置文件介绍
这篇文章详细介绍了Redis配置文件中的各种设置,包括单位定义、包含配置、网络配置、守护进程设置、日志记录、密码安全、客户端连接限制以及内存使用策略等。
Redis6入门到实战------ 四、Redis配置文件介绍
|
3月前
|
NoSQL Redis 数据安全/隐私保护
Redis6入门到实战------ 二、Redis安装
这篇文章详细介绍了Redis 6的安装过程,包括下载、解压、编译、安装、配置以及启动Redis服务器的步骤。还涵盖了如何设置Redis以在后台运行,如何为Redis设置密码保护,以及如何配置Redis服务以实现开机自启动。
Redis6入门到实战------ 二、Redis安装
|
3月前
|
NoSQL Java Redis
Redis6入门到实战------思维导图+章节目录
这篇文章提供了Redis 6从入门到实战的全面学习资料,包括思维导图和各章节目录,涵盖了NoSQL数据库、Redis安装配置、数据类型、事务、持久化、主从复制、集群等核心知识点。
Redis6入门到实战------思维导图+章节目录
|
3月前
|
NoSQL 安全 Java
Redis6入门到实战------ 三、常用五大数据类型(字符串 String)
这篇文章深入探讨了Redis中的String数据类型,包括键操作的命令、String类型的命令使用,以及String在Redis中的内部数据结构实现。
Redis6入门到实战------ 三、常用五大数据类型(字符串 String)
|
3月前
|
NoSQL 关系型数据库 Redis
Redis6入门到实战------ 九、10. Redis_事务_锁机制_秒杀
这篇文章深入探讨了Redis事务的概念、命令使用、错误处理机制以及乐观锁和悲观锁的应用,并通过WATCH/UNWATCH命令展示了事务中的锁机制。
Redis6入门到实战------ 九、10. Redis_事务_锁机制_秒杀