`
kingxss
  • 浏览: 968635 次
  • 性别: 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 jedis.jar

    jedis jar包; 版本:2.0 2.1

    jedis-2.9.0.jar

    jedis-2.9.0.jar jedis-2.9.0 jar 包,不包含源码,源码下载地址: http://download.csdn.net/download/tan3739/9993938 测试代码: 导入依赖包: commons-lang-2.5.jar commons-pool2-2.4.2.jar jedis-2.9.0 jar ...

    jedis依赖jar包

    jedis依赖jar包, jedis-2.7.0.jar

    jedis相关jar包

    jedis相关jar包:commons-pool2-2.3.jar、jedis-2.7.0.jar

    jedis-jedis-2.7.2

    jedis-jedis-2.7.2缓存技术应用

    jedis 2.8.1

    jedis jedis

    jedis-2.5.1.jar

    Jedis 是 Redis 官方首选的 Java 客户端开发包。 实例方法: ? 1 import redis.clients.jedis.* ? 1 2 3 Jedis jedis = new Jedis("localhost"); jedis.set("foo", "bar"); String value = jedis.get("foo"); 支持...

    jedis源码 (学习jedis)

    jedis源码 (学习jedis必备,附带测试用例)

    jedis-2.6.2.zip

    此资源为Java连接redis的工具jar,Jedis 版本为2.62; 有两个地方需要注意下;jedis 3.0新版本废弃了旧回收资源方法; 废弃方法为:JedisPool.returnResource(Jedis);回收资源 Jedis 3.0版本新回收资源: Jedis.close();...

    jedis-test.7z jedis 简单测试 项目工程

    jedis-test.7z jedis 简单测试 项目工程 lib 目录包含了依赖包: commons-lang-2.5.jar commons-pool2-2.4.2.jar jedis-2.9.0.jar 另: * Jedis 的源码工程(导入 eclipse 可直接运行): ...

    jedis-2.9.0-API文档-中文版.zip

    赠送jar包:jedis-2.9.0.jar; 赠送原API文档:jedis-2.9.0-javadoc.jar; 赠送源代码:jedis-2.9.0-sources.jar; 包含翻译后的API文档:jedis-2.9.0-javadoc-API文档-中文(简体)版.zip 对应Maven信息:groupId...

    jedis-2.8.0-API文档-中文版.zip

    赠送jar包:jedis-2.8.0.jar; 赠送原API文档:jedis-2.8.0-javadoc.jar; 赠送源代码:jedis-2.8.0-sources.jar; 赠送Maven依赖信息文件:jedis-2.8.0.pom; 包含翻译后的API文档:jedis-2.8.0-javadoc-API文档-...

    jedis安装包

    jedis安装包

    使用redisson替代jedis

    使用redisson替代jedis中的的对应方法,以及对应的redis的命令在这三方中对应查询及操作,

    jedis简单实例

    jedis

    jedis-jedis-2.6.2.tar.gz

    jedis 2.6.2 gz包

    jedis-2.6.2.jar最新的jedis包

    jedis-2.6.2.jar最新的jedis包

    jedis通过JedisSentinelPool获取jedis操作redis

    jedis通过JedisSentinelPool获取jedis操作redis,通过配置sentienl,获取sentinel连接池,通过sentinel,获取jedis信息

    Jedis-Sample

    jedis,jedis api ,jedisPool

    jedis-2.8.0.jar

    jedis-2.8.0.jar

Global site tag (gtag.js) - Google Analytics