`
kingxss
  • 浏览: 973450 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Jedis取消订阅的运用

阅读更多

个人学习参考所用,勿喷!

 

接上篇博客《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
 

从上面的运行结果可以看到取消订阅已经成功。

 

分享到:
评论
2 楼 lccforever 2012-08-01  
学习了,感谢楼主!
1 楼 stwei1983 2012-04-06  
很有用处,谢谢

相关推荐

    Jedis的Publish/Subscribe功能的运用

    本文将深入探讨Jedis的Publish/Subscribe(发布/订阅)功能的运用,以及如何在实际项目中实现这一特性。 首先,发布/订阅是一种消息传递模式,允许发送者(Publisher)向多个接收者(Subscriber)广播消息,而无需...

    jedis jedis.jar

    此外,Jedis 2.0还支持事务处理、发布/订阅模式、管道传输(批量发送命令以提高性能)以及简单的Lua脚本执行。 随着版本的升级,Jedis 2.1.0在2.0的基础上做了改进和增强。这个版本可能包含了bug修复、性能优化、新...

    jedis依赖jar包

    2. **发布/订阅**:支持发布订阅模式,允许实现消息传递功能。 3. **管道(Pipeline)**:批量发送命令以减少网络延迟,提高性能。 4. **脚本支持**:使用`eval`方法执行Lua脚本,实现原子操作。 **最佳实践** 1. ...

    jedis相关jar包

    使用这个版本的Jedis,开发者可以进行基本的数据操作,如设置和获取键值、操作集合类型(如列表、集合、有序集合)、事务处理、发布订阅等。 关于标签“Redis Jedis”,我们可以理解为这个压缩包是针对使用Java开发...

    jedis源码 (学习jedis)

    Jedis支持Redis的事务功能,`Multi`、`Exec`、`Discard`等方法用于开启、提交和取消事务。查看源码,了解这些方法如何与Redis的事务模型对应。 7. **发布订阅(Pub/Sub)**: Jedis提供了`subscribe`和`unsubscribe...

    Jedis所需jar包

    Jedis提供了丰富的API,能够帮助开发者轻松完成各种Redis操作,如设置和获取键值、执行事务、订阅/发布消息等。 Jedis的主要功能包括: 1. 基本操作:支持设置(set)、获取(get)、删除(del)等基本键值对操作。...

    jedis5.1.0.jar

    jedis5.1.0.jar

    jedis-jedis-2.7.2

    4. **发布/订阅**:Jedis提供了`subscribe()`和`publish()`方法,用于实现Redis的消息发布与订阅功能,从而构建基于消息的分布式系统。 5. **Pipeline**:为了提高性能,Jedis提供了管道模式,允许一次性发送多条...

    jedis-2.9.0.jar

    Jedis 还支持 Redis 的发布/订阅功能,可以创建订阅者和发布者。订阅者通过 `jedis.subscribe(subscriber, "channel")` 监听指定频道,发布者使用 `jedis.publish("channel", "message")` 发布消息。 **六、持久化...

    jedis安装包

    Jedis还支持Redis的事务(Transaction)和发布/订阅(Publish-Subscribe)功能: 1. 事务: ```java jedis.multi(); jedis.set("key1", "value1"); jedis.set("key2", "value2"); List<Object> results = jedis....

    使用redisson替代jedis

    ### 使用Redisson替代Jedis 在分布式系统中,Redis作为一种高性能的键值存储数据库,被广泛应用于缓存、消息队列、数据同步等场景。在Java开发领域,开发者可以选择多种客户端来与Redis进行交互,其中最常用的是...

    jedis-2.4.2版本

    4. **发布/订阅**:Jedis还提供了发布和订阅功能,允许应用程序之间通过消息传递进行通信。使用`subscribe(JedisPubSub, channels)`订阅指定频道,`publish(channel, message)`发布消息。 5. **关闭连接**:完成...

    jedis.jar下载

    2. **全面支持**:Jedis支持Redis的所有主要命令,包括数据结构的操作、事务处理、发布订阅等。 3. **性能优秀**:Jedis通过优化的网络通信和序列化机制,确保了与Redis服务器交互的高效性。 4. **连接池管理**:...

    Jedis API中文使用文档.-比较详细

    Jedis API中文使用文档详解 Jedis 是 Redis 官方首选的 Java 客户端开发包,用于操作 Redis 数据库。下面是 Jedis API 的详细使用文档,适合新手和老程序员进行复习。 Jedis 的基本使用 Jedis 提供了多种方式来...

    jedis-2.9.0.jar和commons-pool2-2.6.0.jar下载(jedis连接redis数据库)

    Jedis支持多种操作,包括基本的GET/SET命令,发布/订阅,事务处理,Lua脚本执行,以及对Redis的GeoSpatial功能的支持。 **Apache Commons Pool 2.6.0** Apache Commons Pool是Apache软件基金会的一个项目,提供了...

    jedis-3.3.0.jar文件

    它提供了全面的Redis命令支持,包括数据类型操作、事务处理、发布订阅等功能,是Java开发者连接Redis的首选工具。Jedis 3.3.0是其较新的版本,带来了更多的优化和新特性,提高了与Redis服务器的交互效率和稳定性。 ...

    jedis.jar包

    Jedis支持的操作包括但不限于连接管理、字符串操作、哈希处理、列表操作、集合操作、有序集合操作、发布/订阅、事务处理、脚本执行等。 在Jedis 3.0版本中,有以下几个关键的改进和特性: 1. **连接池支持**:...

    jedis-3.0.0.jar、jedis-3.0.0-javadoc.jar、jedis-3.0.0-sources.jar

    除此之外,Jedis还支持发布/订阅、事务、管道(pipelining)、Lua脚本执行等功能。例如,使用pipeline可以提高批量操作的效率: ```java Pipeline pipeline = jedis.pipelined(); for (int i = 0; i ; i++) { ...

Global site tag (gtag.js) - Google Analytics