本例包括

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. MassTransit

    http://stackoverflow.com/questions/15485317/newbie-is-a-consumer-queue-necessary-in-order-for-publis ...

  2. Testlink自动执行用例小程序

    记得原来在一个公司时,具体很多原因,testlink上项目中的用例都需要执行形成漂亮的报告,但实际测试中又不需要去执行,所以就必须将用例根据上一次测试报告一个一个手工去贴结果刷用例,几百条用例,几天就 ...

  3. Android LayoutCast 初探

    今天无意间看见了一个神器,顿时让我血气蓬勃! 废话不多说,先上网址:https://github.com/mmin18/LayoutCast 把代码和资源文件的改动直接同步到手机上,应用不需要重启.省 ...

  4. ElasticSearch 聚合函数

    一.简单聚合 桶 :简单来说就是满足特定条件的文档的集合. 指标:大多数 指标 是简单的数学运算(例如最小值.平均值.最大值,还有汇总),这些是通过文档的值来计算. 桶能让我们划分文档到有意义的集合, ...

  5. 浅析JSONP

    什么是JSONP? JSONP是JSON with Padding的略称.它是一个非官方的协议,它允许在服务器端集成Script tags返回至客户端,通过javascript callback的形式 ...

  6. Docker镜像制作

    使用docker原始源为centos制作一个nginx镜像 pull一个centos镜像 docker pull centos 运行进入容器 docker run -it centos 容器内安装wg ...

  7. HDFS体系结构(NameNode、DataNode详解)

    hadoop项目地址:http://hadoop.apache.org/ NameNode.DataNode详解 (一)分布式文件系统概述 数据量越来越多,在一个操作系统管辖的范围存不下了,那么就分配 ...

  8. UESTC 1059 - 秋实大哥与小朋友

    题目链接:http://acm.uestc.edu.cn/#/problem/show/1059 Time Limit: 3000/1000MS (Java/Others)     Memory Li ...

  9. Docker命令详解(build篇)

    命令格式:docker build [OPTIONS] <PATH | URL | -> Usage: Build an image from a Dockerfile. 中文意思即:使用 ...

  10. Ubuntu 14.04 配置 LAMP+phpMyAdmin PHP开发环境!

             先安装 Apache Web服务器,终端:sudo apt-get install apache2  apache2-doc,然后测试是否安装成功.浏览器地址栏输入:http://l ...