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

本文介绍如何使用 Java 和 Jedis 库实现 Redis 的发布/订阅功能。通过具体代码示例展示了如何设置 PUB 和 SUB 端,以及如何在两端之间进行消息传递。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.准备

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.youkuaiyun.com/timo1160139211
小可不才,恭听指正.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值