个人学习参考所用,勿喷!
接上篇博客《Jedis的Publish/Subscribe功能的运用 》http://kingxss.iteye.com/blog/1420264
博客中根据Jedis的API,将自己对JedisPubSub抽象类的实现MyListener的实例对象传入到Jedis对象的psubscribe(...)方法中。博客中的第五步中可以见到如下代码:
jedis.psubscribe(listener, new String[]{"hello_*"});
查阅JedisPubSub的源码可以见到如下的方法(其他方法和具体代码已经忽略):
public abstract class JedisPubSub {
...
//取消所有订阅
public void unsubscribe() {
...
}
//取消订阅频道
public void unsubscribe(String... channels) {
...
}
//增加订阅频道
public void subscribe(String... channels) {
...
}
//增加订阅频道的匹配表达式
public void psubscribe(String... patterns) {
...
}
//取消所有按表达式的订阅
public void punsubscribe() {
...
}
//取消表达式匹配的频道
public void punsubscribe(String... patterns) {
...
}
...
}
从代码中可以看到这里有取消订阅的方式。具体使用按如下步骤:
1.进行订阅
这里以按表达式方式订阅为例,这里用线程的方式启动订阅,因为在订阅后代码会阻塞监听发布的内容,代码不会继续在Main线程中执行。具体代码如下:
ApplicationContext ac = SingletonContext.getInstance();
RedisUtil ru = (RedisUtil) ac.getBean("redisUtil");
final Jedis jedis = ru.getConnection();
final MyListener listener = new MyListener();
new Thread(new Runnable() {
@Override
public void run() {
jedis.psubscribe(listener, new String[] { "whty_*","demo_*" });
}
}).start();
这里进行订阅了两个表达式频道。
2.取消订阅
这里以取消上述订阅中的“demo_*”表达式频道为例。具体代码如下:
listener.punsubscribe(new String[] { "demo_*" });
这里取消了部分频道订阅。要注意的是,这里的listener就是上面步骤中的listener。
3.运行如下的测试代码:
ApplicationContext ac = new ClassPathXmlApplicationContext("beans-config.xml");
RedisUtil ru = (RedisUtil) ac.getBean("redisUtil");
Jedis jedis = ru.getConnection();
jedis.publish("whty_foo", "bar123");
jedis.publish("whty_test", "hello watson");
jedis.publish("demo_foo", "hello demo foo");
jedis.publish("demo_test", "hello demo test");
4.可得如下结果:
whty_*=whty_foo=bar123
whty_*=whty_test=hello watson
从上面的运行结果可以看到取消订阅已经成功。
分享到:
相关推荐
本文将深入探讨Jedis的Publish/Subscribe(发布/订阅)功能的运用,以及如何在实际项目中实现这一特性。 首先,发布/订阅是一种消息传递模式,允许发送者(Publisher)向多个接收者(Subscriber)广播消息,而无需...
此外,Jedis 2.0还支持事务处理、发布/订阅模式、管道传输(批量发送命令以提高性能)以及简单的Lua脚本执行。 随着版本的升级,Jedis 2.1.0在2.0的基础上做了改进和增强。这个版本可能包含了bug修复、性能优化、新...
2. **发布/订阅**:支持发布订阅模式,允许实现消息传递功能。 3. **管道(Pipeline)**:批量发送命令以减少网络延迟,提高性能。 4. **脚本支持**:使用`eval`方法执行Lua脚本,实现原子操作。 **最佳实践** 1. ...
使用这个版本的Jedis,开发者可以进行基本的数据操作,如设置和获取键值、操作集合类型(如列表、集合、有序集合)、事务处理、发布订阅等。 关于标签“Redis Jedis”,我们可以理解为这个压缩包是针对使用Java开发...
Jedis支持Redis的事务功能,`Multi`、`Exec`、`Discard`等方法用于开启、提交和取消事务。查看源码,了解这些方法如何与Redis的事务模型对应。 7. **发布订阅(Pub/Sub)**: Jedis提供了`subscribe`和`unsubscribe...
Jedis提供了丰富的API,能够帮助开发者轻松完成各种Redis操作,如设置和获取键值、执行事务、订阅/发布消息等。 Jedis的主要功能包括: 1. 基本操作:支持设置(set)、获取(get)、删除(del)等基本键值对操作。...
jedis5.1.0.jar
4. **发布/订阅**:Jedis提供了`subscribe()`和`publish()`方法,用于实现Redis的消息发布与订阅功能,从而构建基于消息的分布式系统。 5. **Pipeline**:为了提高性能,Jedis提供了管道模式,允许一次性发送多条...
Jedis 还支持 Redis 的发布/订阅功能,可以创建订阅者和发布者。订阅者通过 `jedis.subscribe(subscriber, "channel")` 监听指定频道,发布者使用 `jedis.publish("channel", "message")` 发布消息。 **六、持久化...
Jedis还支持Redis的事务(Transaction)和发布/订阅(Publish-Subscribe)功能: 1. 事务: ```java jedis.multi(); jedis.set("key1", "value1"); jedis.set("key2", "value2"); List<Object> results = jedis....
### 使用Redisson替代Jedis 在分布式系统中,Redis作为一种高性能的键值存储数据库,被广泛应用于缓存、消息队列、数据同步等场景。在Java开发领域,开发者可以选择多种客户端来与Redis进行交互,其中最常用的是...
4. **发布/订阅**:Jedis还提供了发布和订阅功能,允许应用程序之间通过消息传递进行通信。使用`subscribe(JedisPubSub, channels)`订阅指定频道,`publish(channel, message)`发布消息。 5. **关闭连接**:完成...
2. **全面支持**:Jedis支持Redis的所有主要命令,包括数据结构的操作、事务处理、发布订阅等。 3. **性能优秀**:Jedis通过优化的网络通信和序列化机制,确保了与Redis服务器交互的高效性。 4. **连接池管理**:...
Jedis API中文使用文档详解 Jedis 是 Redis 官方首选的 Java 客户端开发包,用于操作 Redis 数据库。下面是 Jedis API 的详细使用文档,适合新手和老程序员进行复习。 Jedis 的基本使用 Jedis 提供了多种方式来...
Jedis支持多种操作,包括基本的GET/SET命令,发布/订阅,事务处理,Lua脚本执行,以及对Redis的GeoSpatial功能的支持。 **Apache Commons Pool 2.6.0** Apache Commons Pool是Apache软件基金会的一个项目,提供了...
它提供了全面的Redis命令支持,包括数据类型操作、事务处理、发布订阅等功能,是Java开发者连接Redis的首选工具。Jedis 3.3.0是其较新的版本,带来了更多的优化和新特性,提高了与Redis服务器的交互效率和稳定性。 ...
Jedis支持的操作包括但不限于连接管理、字符串操作、哈希处理、列表操作、集合操作、有序集合操作、发布/订阅、事务处理、脚本执行等。 在Jedis 3.0版本中,有以下几个关键的改进和特性: 1. **连接池支持**:...
除此之外,Jedis还支持发布/订阅、事务、管道(pipelining)、Lua脚本执行等功能。例如,使用pipeline可以提高批量操作的效率: ```java Pipeline pipeline = jedis.pipelined(); for (int i = 0; i ; i++) { ...