【转】Redis之发布 订阅模式
本例包括
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之发布 订阅模式的更多相关文章
- redis的发布订阅模式
概要 redis的每个server实例都维护着一个保存服务器状态的redisServer结构 struct redisServer { /* Pubsub */ // 字典,键为频道, ...
- redis的发布订阅模式pubsub
前言 redis支持发布订阅模式,在这个实现中,发送者(发送信息的客户端)不是将信息直接发送给特定的接收者(接收信息的客户端),而是将信息发送给频道(channel),然后由频道将信息转发给所有对这个 ...
- 13、Redis的发布订阅模式
写在前面的话:读书破万卷,编码如有神 -------------------------------------------------------------------------------- ...
- Springboot+Redis(发布订阅模式)跨多服务器实战
一:redis中发布订阅功能(http://www.redis.cn/commands.html#pubsub) PSUBSCRIBE pattern [pattern -]:订阅一个或者多个符合pa ...
- 使用redis的发布订阅模式实现消息队列
配置文件 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://w ...
- Spring Boot中使用redis的发布/订阅模式
原文:https://www.cnblogs.com/meetzy/p/7986956.html redis不仅是一个非常强大的非关系型数据库,它同时还拥有消息中间件的pub/sub功能,在sprin ...
- 15天玩转redis —— 第九篇 发布/订阅模式
本系列已经过半了,这一篇我们来看看redis好玩的发布订阅模式,其实在很多的MQ产品中都存在这样的一个模式,我们常听到的一个例子 就是邮件订阅的场景,什么意思呢,也就是说100个人订阅了你的博客,如果 ...
- redis发布/订阅模式
其实在很多的MQ产品中都存在这样的一个模式,我们常听到的一个例子 就是邮件订阅的场景,什么意思呢,也就是说100个人订阅了你的博客,如果博主发表了文章,那么100个人就会同时收到通知邮件,除了这个 场 ...
- 使用EventBus + Redis发布订阅模式提升业务执行性能
前言 最近一直奔波于面试,面了几家公司的研发.有让我受益颇多的面试经验,也有让我感觉浪费时间的面试经历~因为疫情原因,最近宅在家里也没事,就想着使用Redis配合事件总线去实现下具体的业务. 需求 一 ...
随机推荐
- Linux下openoffice与SWFtools的安装
第一部份:OpenOffice的安装 1.Openoffice的官网:http://www.openoffice.org/download/index.html 选择Linux 64-bit(x860 ...
- Unity3D笔记 切水果 一
最终效果: 一.选择背景图片,选择GUI Texture 二.创建一个空的GameObject,然后添加背景音乐 三.创建GUISkin 四.主要代码 #pragma strict var myGUI ...
- JIRA - 使用指南(项目跟踪管理工具)
第一章.前言 JIRA 是澳大利亚 Atlassian 公司开发的一款优秀的问题跟踪管理软件工具,可以对各种类型的问题进行跟踪管理,包括缺陷.任务.需求.改进等.JIRA采用J2EE技术,能够跨 ...
- thinkphp结合layui上传图片
简单示例: <script type="text/javascript"> layui.use(['form', 'layedit','element', 'layda ...
- 号称简明实用的django上手教程
1 几个基本概念 前置条件:假设读者基本Python语言基础,或者具备某种编程语言的基础.你还熟悉web开发环境,懂些css,js,db等. Django是什么? Django是一个开放源代码的Web ...
- 9.12DjangoORM回顾和路由.
2018-9-12 13:44:41 周末继续整理一下博客!不知不觉记了好多! 越努力越幸运! 永远不要高估自己! 关于反射的复习 # /usr/bin/env python # -*- coding ...
- nginx 反向代理apache服务器 配置java与PHP共存环境
listen 80; listen 443; ssl on; ssl_certificate /passport.crt; ssl_certificate_key /passport.key; ssl ...
- vue 报错./lib/html5-entities.js this relative module was not
原文参考http://www.bozhiyue.com/web/yuyan/2017/0501/1236324.html 然后就把他俩注视了,是不报错了,但是也没有运行不出来: 居然是因为早上我360 ...
- HDU 5636 Shortest Path(Floyed,枚举)
Shortest Path Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) Tot ...
- ArcCatalog连接ArcSDE连接报:unable to create new database connection file,permission is denied
参考博文:链接 ArcCatalog连接ArcSDE连接报:unable to create new database connection file,permission is denied 最近经 ...