一步一步学习Redis——Java实现Redis的发布订阅功能

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 一步一步学习Redis——Java实现Redis的发布订阅功能

1.代码实例


有关Redis发布订阅功能更详细的内容,请参考我的这篇博文:https://blog.csdn.net/weixin_43823808/article/details/113833905

下面直接放上具体的实现代码:👇👇👇


package MyRedis;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPubSub;
public class JedisUtil {
    /**
     * 该方法用于发布消息,这里指定两个参数的意思是:向某个频道发布某些消息
     * 使用静态方法,方便调用
     * @param channel
     * @param message
     */
    public static void publishMessage(String channel,String message) {
        Jedis jedis=new Jedis("127.0.0.1",6379);
        try {
            jedis.publish(channel,message);
        }catch (Exception e) {
            System.out.println(e.getMessage());
        }finally {
            jedis.close();
        }
    }
    /**
     * 该方法用于接受消息,调用之后,会一直执行下去
     * 当有发布对应消息时,会在jedisPubSub中接收到!!!
     * @param channel
     */
    public static void subscribeMessage(String channel) {
        Jedis jedis=new Jedis("127.0.0.1",6379);
        new Thread(()->{
            try {
                jedis.subscribe(jedisPubSub,channel);
            }catch (Exception e) {
                System.out.println(e.getMessage());
            }finally {
                jedis.close();
            }
        }).start();
    }
    /**
     * 这里使用内部类JedisPubSub
     * 对 接收消息、订阅频道、取消订阅频道 三个方法进行重写
     */
    public static JedisPubSub jedisPubSub=new JedisPubSub() {
        @Override
        public void onMessage(String channel, String message) {
            System.out.println("此时收到了" + channel + "频道发来的消息:" + message);
            System.out.println(channel + ":" + message);
        }
        @Override
        public void onSubscribe(String channel, int subscribedChannels) {
            System.out.println("此时订阅了" + channel + "频道");
            System.out.println(channel + ":" + subscribedChannels);
        }
        @Override
        public void onUnsubscribe(String channel, int subscribedChannels) {
            System.out.println("此时取消订阅了" + channel + "频道");
            System.out.println(channel + ":" + subscribedChannels);
        }
    };
}


package MyRedis;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPubSub;
public class Main {
    public static void main(String[] args) {
        Jedis jedis=new Jedis("127.0.0.1",6379);
        System.out.println(jedis.ping() + ":此时与Redis成功连接!!!");
        //订阅WeChat频道
        JedisUtil.subscribeMessage("WeChat");
        /*
            这里肯定是先订阅频道,之后才可以向该频道发布消息,也即发布在订阅之后
            所以这里调用Thread类的sleep()方法先睡眠200ms,之后再进行发布
         */
        try {
            Thread.sleep(200);
        }catch (InterruptedException e) {
            e.printStackTrace();
        }finally {
            //
        }
        JedisUtil.publishMessage("WeChat","Hello Redis!!!");
        JedisUtil.publishMessage("WeChat","Java and Redis!!!");
    }
}


相关实践学习
基于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
相关文章
|
2月前
|
NoSQL Redis
Redis 发布订阅
10月更文挑战第18天
33 1
Redis 发布订阅
|
1月前
|
安全 Java 测试技术
🎉Java零基础:全面解析枚举的强大功能
【10月更文挑战第19天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
116 60
|
2月前
|
XML Java 编译器
Java学习十六—掌握注解:让编程更简单
Java 注解(Annotation)是一种特殊的语法结构,可以在代码中嵌入元数据。它们不直接影响代码的运行,但可以通过工具和框架提供额外的信息,帮助在编译、部署或运行时进行处理。
95 43
Java学习十六—掌握注解:让编程更简单
|
26天前
|
Java
Java 8 引入的 Streams 功能强大,提供了一种简洁高效的处理数据集合的方式
Java 8 引入的 Streams 功能强大,提供了一种简洁高效的处理数据集合的方式。本文介绍了 Streams 的基本概念和使用方法,包括创建 Streams、中间操作和终端操作,并通过多个案例详细解析了过滤、映射、归并、排序、分组和并行处理等操作,帮助读者更好地理解和掌握这一重要特性。
27 2
|
27天前
|
存储 消息中间件 NoSQL
使用Java操作Redis数据类型的详解指南
通过使用Jedis库,可以在Java中方便地操作Redis的各种数据类型。本文详细介绍了字符串、哈希、列表、集合和有序集合的基本操作及其对应的Java实现。这些示例展示了如何使用Java与Redis进行交互,为开发高效的Redis客户端应用程序提供了基础。希望本文的指南能帮助您更好地理解和使用Redis,提升应用程序的性能和可靠性。
35 1
|
1月前
|
存储 NoSQL PHP
如何用Redis高效实现点赞功能?用Set?还是Bitmap?
在众多软件应用中,点赞功能几乎成为标配。本文从实际需求出发,探讨如何利用 Redis 的 `Set` 和 `Bitmap` 数据结构设计高效点赞系统,分析其优缺点,并提供 PHP 实现示例。通过对比两种方案,帮助开发者选择最适合的存储方式。
28 3
|
1月前
|
Java 大数据 API
14天Java基础学习——第1天:Java入门和环境搭建
本文介绍了Java的基础知识,包括Java的简介、历史和应用领域。详细讲解了如何安装JDK并配置环境变量,以及如何使用IntelliJ IDEA创建和运行Java项目。通过示例代码“HelloWorld.java”,展示了从编写到运行的全过程。适合初学者快速入门Java编程。
|
2月前
|
存储 SQL 小程序
JVM知识体系学习五:Java Runtime Data Area and JVM Instruction (java运行时数据区域和java指令(大约200多条,这里就将一些简单的指令和学习))
这篇文章详细介绍了Java虚拟机(JVM)的运行时数据区域和JVM指令集,包括程序计数器、虚拟机栈、本地方法栈、直接内存、方法区和堆,以及栈帧的组成部分和执行流程。
36 2
JVM知识体系学习五:Java Runtime Data Area and JVM Instruction (java运行时数据区域和java指令(大约200多条,这里就将一些简单的指令和学习))
|
1月前
|
JavaScript Java 项目管理
Java毕设学习 基于SpringBoot + Vue 的医院管理系统 持续给大家寻找Java毕设学习项目(附源码)
基于SpringBoot + Vue的医院管理系统,涵盖医院、患者、挂号、药物、检查、病床、排班管理和数据分析等功能。开发工具为IDEA和HBuilder X,环境需配置jdk8、Node.js14、MySQL8。文末提供源码下载链接。