Java端实现RedisPUB/SUB(订阅发布)

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介: 一准备二代码三成果四声明一.准备1.1 - 自行下载jedis jar包. 用maven的话<dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId>

一.准备

1.1 - 自行下载jedis jar包.
用maven的话

<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>2.9.0</version>
    <type>jar</type>
    <scope>compile</scope>
</dependency>

1.2 - 打开 redis 服务器待命.

二.代码

1/3.
先打开
SUB端:

package example.me.PubSub;

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

public class MySub {

    public static void main(String[] args) {

        final String host = "127.0.0.1";// Redis服务所在地址

        final int port = 6379;          // 主机端口

        @SuppressWarnings("resource")
        Jedis subJedis = new Jedis(host, port);

        JedisPubSub jedissubSub = new JedisPubSub() {

            public void onUnsubscribe(String channel, int num) {
            }

            public void onSubscribe(String channel, int num) {
            }

            public void onMessage(String channel, String msg) {
                System.out.println(channel + " : " + msg);
            }

            public void onPUnsubscribe(String channel, int num) {
            }

            /*
             * num 订阅数量
             */
            public void onPSubscribe(String channel, int num) {
            }

            /*
             * channel0订阅的channel正则表达式
             * channel 匹配上该正则channel值
             * msg 收到的消息
             */
            public void onPMessage(String channel0, String channel, String msg) {
            }

        };

        /*
         * 启动订阅,当该方法启动时,将阻塞等待消息
         * 说明:
         * 1.subscribe(JedisPubSub jedisPubSub, String... channels)
         *    是常规订阅方法,channel值基于完全匹配,方法中channels是多个要订阅的channel值
         * 2.psubscribe(JedisPubSub jedisPubSub, String... patterns)
         *    是正则订阅方法,channel值基于正则匹配,方法中的patterns是多个订阅到正则表达式
         *    不同的订阅将会触发JedisPubSub中不同的方法
         */
        subJedis.subscribe(jedissubSub, "news", "tvshow");//完全匹配
    }

}

2/3.
PUB端:

package example.me.PubSub;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

public class MyPub {

    public static void main(String[] args) {


        JedisPoolConfig poolConfig = new JedisPoolConfig();
        poolConfig.setMaxIdle(5);
        poolConfig.setMinIdle(1);
        poolConfig.setMaxWaitMillis(30000);

        JedisPool jedisPool = new JedisPool(poolConfig,"localhost", 6379, 100);

        Jedis pubJedis = jedisPool.getResource();

        try{
        pubJedis.publish("news", "Hello,MySubs~ ");//发送广播

        }catch(Exception e){
            e.printStackTrace();
        }finally{
            jedisPool.returnResource(pubJedis);
            jedisPool.close();
        }


    }

}

3/3.
同时我们在 redis-cli 端也订阅相同channel:
这里写图片描述

三.成果

jedis-SUB端:
这里写图片描述

redis-cli端:
这里写图片描述

四.声明

4.1 - 本篇仅作为基础,还有很多功能未展现.
4.2 - Redis-Clients-Officialsite已有很多十分优秀的开源项目供参考.

参考资料:https://redis.io/clients
本文原文地址:http://blog.csdn.net/timo1160139211
小可不才,恭听指正.

相关实践学习
基于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
目录
相关文章
|
Java
Java 实现汉字按照首字母分组排序
Java 实现汉字按照首字母分组排序
556 0
|
分布式计算 Java Hadoop
Java实现单词计数MapReduce
本文分享实现单词计数MapReduce的方法
301 0
|
Java 数据安全/隐私保护
JAVA 实现上传图片添加水印(详细版)(上)
JAVA 实现上传图片添加水印(详细版)
922 0
JAVA 实现上传图片添加水印(详细版)(上)
|
存储 Java
Java实现图书管理系统
本篇文章是对目前Java专栏已有内容的一个总结练习,希望各位小主们在学习完面向对象的知识后,可以阅览本篇文章后,自己也动手实现一个这样的demo来加深总结应用已经学到知识并进行巩固。
373 0
Java实现图书管理系统
|
Java Windows Spring
java实现spring boot项目启动时,重启Windows进程
java实现spring boot项目启动时,重启Windows进程
474 0
|
数据可视化 Java
Java实现拼图小游戏(1)—— JFrame的认识及界面搭建
如果要在某一个界面里面添加功能的话,都在一个类中,会显得代码难以阅读,而且修改起来也会很困难,所以我们将游戏主界面、登录界面、以及注册界面都单独编成一个类,每一个类都继承JFrame父类,并且在类中创建方法来来实现页面
456 0
Java实现拼图小游戏(1)—— JFrame的认识及界面搭建
|
网络协议 Java
Java网络编程:UDP/TCP实现实时聊天、上传图片、下载资源等
ip地址的分类: 1、ipv4、ipv6 127.0.0.1:4个字节组成,0-255,42亿;30亿都在北美,亚洲就只有4亿 2011年就用尽了。
Java网络编程:UDP/TCP实现实时聊天、上传图片、下载资源等
|
数据可视化 Java 容器
Java实现拼图小游戏(7)—— 计步功能及菜单业务的实现
注意由于我们计步功能的步数要在重写方法中用到,所以不能将初始化语句写在方法体内,而是要写在成员位置。在其名字的时候也要做到“见名知意”,所以我们给它起名字为step
263 0
Java实现拼图小游戏(7)—— 计步功能及菜单业务的实现
|
Java
Java实现拼图小游戏(7)—— 作弊码和判断胜利
当我们好不容易把拼图复原了,但是一点提示也没有,完全看不出来是成功了,那么我们就需要有判断胜利的功能去弹出“成功”类的图片,以便于玩家选择是重新开始还是退出小游戏
238 0
Java实现拼图小游戏(7)—— 作弊码和判断胜利
|
Java
Java实现拼图小游戏(7)——查看完整图片(键盘监听实例2)
由于在移动和图片中我们已经添加了键盘监听,也继承了键盘监听的接口,那么我们只需要在重写方法内输入我们的代码即可
174 0