本例包括

jedis_demo:入口类

jedis_control:jedis控制器(jedis的连接池)

jedis_pub_sub_listener:订阅的监听器

singleton_agent:单例的代理类(连接池配置)

 
package com.larry.jedis;  

import redis.clients.jedis.Jedis;  

/**
* 入口类 */
public class jedis_demo {
jedis_control redis_util = jedis_control.get_singleton(); public static void main(String[] args) {
jedis_demo jedis_demo = new jedis_demo(); new Thread(new Runnable(){
@Override
public void run() {
jedis_control redis_util = jedis_control.get_singleton();
Jedis jedis = redis_util.get_connection();
jedis_pub_sub_listener pub_sub_listener = new jedis_pub_sub_listener();
// 可以订阅多个频道
// 订阅得到信息在lister的onMessage(...)方法中进行处理
// jedis.subscribe(listener, "news.share", "news.log");
// jedis.subscribe(listener, new String[]{"news.share","news.log"});
jedis.psubscribe(pub_sub_listener, new String[] { "news.share" });// 使用模式匹配的方式设置频道
}
}).start(); jedis_demo.publish();
} /**
* 发布
*/
public void publish() {
Jedis jedis = redis_util.get_connection();
jedis.publish("news.share", "ok");
jedis.publish("news.share", "hello word");
}
} package com.larry.jedis; import redis.clients.jedis.Jedis; /**
* jedis控制器
* @author 吕桂强
* @email larry.lv.word@gmail.com
* @version 创建时间:2012-3-28 下午12:03:40
*/
public final class jedis_control {
//单例
private static jedis_control _jedis_control;
public static jedis_control get_singleton(){
if(_jedis_control == null){
_jedis_control = new jedis_control();
}
return _jedis_control;
} /**
* 获取连接实例
* @return jedis
*/
public Jedis get_connection() {
Jedis jedis = null;
try {
jedis = singleton_agent.get_jedispool().getResource();
} catch (Exception e) {
e.printStackTrace();
}
return jedis;
} /**
* 释放数据库连接
* @param conn
*/
public void close_connection(Jedis jedis) {
if (null != jedis) {
try {
singleton_agent.get_jedispool().returnResource(jedis);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}

package com.larry.jedis; import redis.clients.jedis.JedisPubSub; /**
* 监听订阅事件
**/
public class jedis_pub_sub_listener 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);
}
} [java] view plain copy
package com.larry.jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig; /**
* 所有单例的代理类 */
public class singleton_agent {
//****************单例一个连接池***************
private static JedisPool jedispool = null;
/**
* 获取连接池
* @return 数据源
*/
public static JedisPool get_jedispool() {
if(jedispool == null){
JedisPoolConfig jedispool_config = new JedisPoolConfig();
jedispool_config.maxActive = 20;
jedispool_config.maxIdle = 0;
jedispool_config.maxWait = 1000;
jedispool_config.testOnBorrow = true;
jedispool = new JedisPool(jedispool_config, "localhost", 6379);
}
return jedispool;
}
//end****************单例一个连接池***************
}

【转】Redis之发布 订阅模式的更多相关文章

  1. redis的发布订阅模式

    概要 redis的每个server实例都维护着一个保存服务器状态的redisServer结构 struct redisServer {     /* Pubsub */     // 字典,键为频道, ...

  2. redis的发布订阅模式pubsub

    前言 redis支持发布订阅模式,在这个实现中,发送者(发送信息的客户端)不是将信息直接发送给特定的接收者(接收信息的客户端),而是将信息发送给频道(channel),然后由频道将信息转发给所有对这个 ...

  3. 13、Redis的发布订阅模式

     写在前面的话:读书破万卷,编码如有神 -------------------------------------------------------------------------------- ...

  4. Springboot+Redis(发布订阅模式)跨多服务器实战

    一:redis中发布订阅功能(http://www.redis.cn/commands.html#pubsub) PSUBSCRIBE pattern [pattern -]:订阅一个或者多个符合pa ...

  5. 使用redis的发布订阅模式实现消息队列

    配置文件 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://w ...

  6. Spring Boot中使用redis的发布/订阅模式

    原文:https://www.cnblogs.com/meetzy/p/7986956.html redis不仅是一个非常强大的非关系型数据库,它同时还拥有消息中间件的pub/sub功能,在sprin ...

  7. 15天玩转redis —— 第九篇 发布/订阅模式

    本系列已经过半了,这一篇我们来看看redis好玩的发布订阅模式,其实在很多的MQ产品中都存在这样的一个模式,我们常听到的一个例子 就是邮件订阅的场景,什么意思呢,也就是说100个人订阅了你的博客,如果 ...

  8. redis发布/订阅模式

    其实在很多的MQ产品中都存在这样的一个模式,我们常听到的一个例子 就是邮件订阅的场景,什么意思呢,也就是说100个人订阅了你的博客,如果博主发表了文章,那么100个人就会同时收到通知邮件,除了这个 场 ...

  9. 使用EventBus + Redis发布订阅模式提升业务执行性能

    前言 最近一直奔波于面试,面了几家公司的研发.有让我受益颇多的面试经验,也有让我感觉浪费时间的面试经历~因为疫情原因,最近宅在家里也没事,就想着使用Redis配合事件总线去实现下具体的业务. 需求 一 ...

随机推荐

  1. docker 镜像详解

    镜像的大小不等于通过docker images 看到的每个镜像大小的合集,docker镜像采用了分层的机制.上层使用共同下层,各自不同部门构建各自的独立分层. docker的镜像通过联合文件系统(un ...

  2. backBone.js之Model篇 (1) 简单实例

    “Model是js应用的核心,包括基础的数据以及围绕着这些数据的逻辑:数据转换.验证.属性计算和访问控制”. 一.初始化方法 我们先来看一个demo,initialize,这是一个初始化方法,但是写这 ...

  3. Python:lambda表达式(匿名函数)

    lambda表达式: 通常是在需要一个函数,但是又不想费神去命名一个函数的场合下使用,也就是指匿名函数. 当我们在传入函数时,有些时候,不需要显式地定义函数,直接传入匿名函数更方便. 在Python中 ...

  4. https-->http and http-->https bitransfer

    openssl s_client -connect myupload.mysite.net:443/cgi-bin/posupload.cgi -status -cert client.pem -ve ...

  5. 2018/03/16 每日一个Linux命令 之 rm

    最痛快的指令,没有之一. 一次永久删除,恢复很麻烦. 我会告诉你我第一次上服务器的时候删除了项目代码?(还好我提前备份了一下) -- rm [-参数][文件或者文件夹/支持正则通配] 参数: -i 删 ...

  6. 【python-opencv】16-图像平滑

    [微语]“你以后向成为什么样的人?”    “什么意思,难道我以后就不能成为我自己吗?”    ----<阿甘正传> 补充知识点:如何理解图像的低频是轮廓,高频是噪声和细节 图像的频率:灰 ...

  7. 用 Python 替代 Bash 脚本(转)

    add by zhj: 其实作者是想说用Python来做那些Bash实现起来比较麻烦的部分,即将Bash与Python结合使用. 英文原文:http://www.linuxjournal.com/co ...

  8. table切换(自己写)

    <!DOCTYPE HTML><html> <head> <meta charset="utf-8"> <meta name= ...

  9. html 1:1比例显示

    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale= ...

  10. 新版微信小程序即将上线 新增微信支付功能

    <经济参考报>消息,新版微信小程序正在测试中,有可能将在近期正式上线.新版小程序增加了“附近门店”功能的接口,微信用户可以通过定位功能,查看提供线下服务的各类门店,并直接利用小程序实现包括 ...