jedis调用redis之pubsub

package com.alex.xiyoubang;

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

public class JedisPubSubDemo {

    public static JedisPool pool;

    static {
        JedisPoolConfig config = new JedisPoolConfig();
        config.setMaxIdle(1);
        config.setMaxTotal(20);
        config.setMaxWaitMillis(6000);
        pool = new JedisPool(config, "192.168.1.171", 6379);
    }

    public static void main(String[] args) {
        Jedis redisClient1 = pool.getResource();
        Jedis redisClient2 = pool.getResource();
        MyListener listener = new MyListener();
        //发布消息渠道
        Publisher pub = new Publisher();
        //发布一个频道
        pub.publish(redisClient2); 
        //订阅消息
        Subscriber sub = new Subscriber();
        // 订阅一个频道
        sub.psub(redisClient1, listener);
    }
}

//发布消息渠道
class Publisher {
    public void publish(final Jedis redisClient) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    Thread.currentThread();
                    Thread.sleep(2000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println("发布:com.alex.xiyoubang");
                //发布消息
                redisClient.publish("com.alex.xiyoubang", "悟空");
                redisClient.publish("com.alex.xiyoubang", "八戒");
            }
        }).start();
    }
}

//接收消息渠道
class Subscriber {
    public void psub(final Jedis redisClient, final MyListener listener) {
        new Thread(new Runnable() {
            @Override
            public void run() {

                System.out.println("订阅:com.alex.xiyoubang");
                // 订阅得到信息在lister的onMessage(...)方法中进行处理
                // 订阅多个频道
                redisClient.psubscribe(listener, new String[]{"com.alex.xiyoubang"});// 使用模式匹配的方式设置频道
            }
        }).start();
    }
}

class MyListener extends JedisPubSub {

    // 取得订阅的消息后的处理
    public void onMessage(String channel, String message) {
        System.out.println(channel + "=" + message);
    }

    // 初始化订阅时候的处理
    public void onSubscribe(String channel, int subscribedChannels) {
        System.out.println(channel + "=" + subscribedChannels);
    }

    // 取消订阅时候的处理
    public void onUnsubscribe(String channel, int subscribedChannels) {
        System.out.println(channel + "=" + subscribedChannels);
    }

    // 初始化按表达式的方式订阅时候的处理
    public void onPSubscribe(String pattern, int subscribedChannels) {
        System.out.println(pattern + "=" + subscribedChannels);
    }

    // 取消按表达式的方式订阅时候的处理
    public void onPUnsubscribe(String pattern, int subscribedChannels) {
        System.out.println(pattern + "=" + subscribedChannels);
    }


    // 取得按表达式的方式订阅的消息后的处理
    public void onPMessage(String pattern, String channel, String message) {
        System.out.println(pattern + "=" + channel + "=" + message);
    }
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值