1. 事件通过 Redis 的订阅与发布功能(pub/sub)来进行分发,故需要订

阅 __keyevent@0__:expired 通道

0表示db0 根据自己的dbindex选择合适的数字

2. 修改 redis.conf 文件 

修改 notify-keyspace-events Ex

  1. # K 键空间通知,以__keyspace@<db>__为前缀
  2. # E 键事件通知,以__keysevent@<db>__为前缀
  3. # g del , expipre , rename 等类型无关的通用命令的通知, ...
  4. # $ String命令
  5. # l List命令
  6. # s Set命令
  7. # h Hash命令
  8. # z 有序集合命令
  9. # x 过期事件(每次key过期时生成)
  10. # e 驱逐事件(当key在内存满了被清除时生成)
  11. # A g$lshzxe的别名,因此”AKE”意味着所有的事件

3. 重启redis , 即可测试失效事件的触发, 监听获取的值为 key

<java>

1.  首先需要一个消息监听器类

  1. package com.sogou.baike.testimport.testSubscribe;
  2.  
  3. import redis.clients.jedis.JedisPubSub;
  4.  
  5. /**
  6. * Created by denglinjie on 2016/6/29.
  7. */
  8. public class RedisMsgPubSubListener extends JedisPubSub {
  9. @Override
  10. public void unsubscribe() {
  11. super.unsubscribe();
  12. }
  13.  
  14. @Override
  15. public void unsubscribe(String... channels) {
  16. super.unsubscribe(channels);
  17. }
  18.  
  19. @Override
  20. public void subscribe(String... channels) {
  21. super.subscribe(channels);
  22. }
  23.  
  24. @Override
  25. public void psubscribe(String... patterns) {
  26. super.psubscribe(patterns);
  27. }
  28.  
  29. @Override
  30. public void punsubscribe() {
  31. super.punsubscribe();
  32. }
  33.  
  34. @Override
  35. public void punsubscribe(String... patterns) {
  36. super.punsubscribe(patterns);
  37. }
  38.  
  39. @Override
  40. public void onMessage(String channel, String message) {
  41. System.out.println("channel:" + channel + "receives message :" + message);
  42. this.unsubscribe();
  43. }
  44.  
  45. @Override
  46. public void onPMessage(String pattern, String channel, String message) {
  47.  
  48. }
  49.  
  50. @Override
  51. public void onSubscribe(String channel, int subscribedChannels) {
  52. System.out.println("channel:" + channel + "is been subscribed:" + subscribedChannels);
  53. }
  54.  
  55. @Override
  56. public void onPUnsubscribe(String pattern, int subscribedChannels) {
  57.  
  58. }
  59.  
  60. @Override
  61. public void onPSubscribe(String pattern, int subscribedChannels) {
  62.  
  63. }
  64.  
  65. @Override
  66. public void onUnsubscribe(String channel, int subscribedChannels) {
  67. System.out.println("channel:" + channel + "is been unsubscribed:" + subscribedChannels);
  68. }
  69. }

该类需要继承JedisPubSub ,并实现其抽象方法,通过方法的名称很清楚的看出来,这个监听器是用来订阅一个频道,在订阅该频道,取消订阅,收到消息等状态会对应调用相关的方法

2.  订阅测试

  1. public class TestSubscribe {
  2. @Test
  3. public void testSubscribe() throws Exception{
  4. Jedis jedis = new Jedis("localhost");
  5. RedisMsgPubSubListener listener = new RedisMsgPubSubListener();
  6. jedis.subscribe(listener, "__keyevent@0__:expired");
  7. //other code
  8. }
  9. }

该类实现对频道redisChatTest的订阅监听,频道的订阅,取消订阅,收到消息都会调用listener对象的对应方法

注意:subscribe是一个阻塞的方法,在取消订阅该频道前,会一直阻塞在这,只有当取消了订阅才会执行下面的other code,参考上面代码,我在onMessage里面收到消息后,调用了this.unsubscribe(); 来取消订阅,这样才会执行后面的other code

3.  发布消息测试

  1. Public class TestPublish {
  2. @Test
  3. public void testPublish() throws Exception{
  4. Jedis jedis = new Jedis("localhost");
  5. jedis.publish("redisChatTest", "我是天才");
  6. Thread.sleep(5000);
  7. jedis.publish("redisChatTest", "我牛逼");
  8. Thread.sleep(5000);
  9. jedis.publish("redisChatTest", "哈哈");
  10. }
  11. }

这个类向频道redisChatTest发布消息,第二步因为订阅了该频道,所以会收到该消息。

redis 超时失效key 的监听触发的更多相关文章

  1. redis 超时失效key 的监听触发使用

    redis自2.8.0之后版本提供Keyspace Notifications功能,允许客户订阅Pub / Sub频道,以便以某种方式接收影响Redis数据集的事件. 可能收到的事件的例子如下: 所有 ...

  2. JAVA实现redis超时失效key 的监听触发

    过期事件通过Redis的订阅与发布功能(pub/sub)来进行分发. 而对超时的监听呢,并不需要自己发布,只有修改配置文件redis.conf中的:notify-keyspace-events Ex, ...

  3. redis过期事件,swoole监听

    $serv = new Swoole\Server('0.0.0.0', 9501, SWOOLE_BASE, SWOOLE_SOCK_TCP); $serv->set(array( 'work ...

  4. waypoint+animate元素滚动监听触发插件实现页面动画效果

    最近在做一个官网类型滚动加载动画,使用到waypoint监听事件插件和animate动画样式,两者结合完美实现向下滚动加载动画,但是没有做向上滚动撤消动画,留待以后有空研究 首先来介绍下jquery. ...

  5. layui 事件监听触发

    1:监听select 改变 <!-- 不用form 用div也可以 --> <form class="layui-form"> <div class= ...

  6. java中的key事件监听机制

    package com.at221; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import javax.sw ...

  7. Redis集群下过期key监听

    1. 前言 在使用redis集群时,发现过期key始终监听不到.网上也没有现成的解决方案.于是想,既然不能监听集群,那我可以建立多个redis连接,分别对每个redis的key过期进行监听.以上做法可 ...

  8. spring boot 实现redis 的key的过期监听,执行自己的业务

    最近几天进一步了解了一下redis,发现了key的过期监听功能,实现方式如下: 在redis的配置文件 redis.conf 中找到"EVENT NOTIFICATION"模块, ...

  9. 配置redis开机自启动和监听

    redis安装好后,每次手动启动很不方便,配置开机自启动. 方法一:设置启动命令到/etc/rc.d/rc.local rc.local文件是系统全局脚本文件,会在其他开机进程脚本文件执行完毕后执行该 ...

随机推荐

  1. servlet生命周期和执行流程

    一 .生命周期 servlet 声明周期可以分四个阶段: 类装载过程 init() 初始化过程 service() 服务过程,选择doGet \ doPost destroy() 销毁过程 servl ...

  2. poj 1062 昂贵的聘礼 最短路 dijkstra

    #include <cstdio> #include <cmath> #include <cstring> #include <ctime> #incl ...

  3. 读书笔记_Effective_C++_条款三十一:将文件间的编译依存关系降至最低(第三部分)

    下面来谈谈书中的第二部分,用Interface Classes来降低编译的依赖.从上面也可以看出,避免重编的诀窍就是保持头文件(接口)不变化,而保持接口不变化的诀窍就是不在里面声明编译器需要知道大小的 ...

  4. Git_分支管理

    分支就是科幻电影里面的平行宇宙,当你正在电脑前努力学习Git的时候,另一个你正在另一个平行宇宙里努力学习SVN. 如果两个平行宇宙互不干扰,那对现在的你也没啥影响.不过,在某个时间点,两个平行宇宙合并 ...

  5. SVN服务端的版本对比及创建仓库时的注意事项

    SVN是一个开放源代码的版本控制系统,分为客户端和服务端.就windows系统而言,客户端通常使用 TortoiseSVN,下载地址:https://tortoisesvn.net/  ,而服务端通常 ...

  6. WinPE作为启动硬盘

    之前我一直是用UltraISO将U盘制作为启动盘,这种方式本身简单易用,但也有一些令人不爽的地方 每次都要重新格式化U盘, 本身WinPE并不大,只需要几百兆空间,一旦U盘在使用时,明明都有足够的空间 ...

  7. php 可以动态的new一个变量类名

    <?PHPheader("content-type:text/html; charset=utf-8");//echo ucfirst('a b'); class Stude ...

  8. vc 6.0 远程调试

    http://blog.sina.com.cn/s/blog_45eaa01a01014eb5.html

  9. FT网站开发过程遇到的问题汇总

    1.jar包不兼容问题.主要是mybatis,spring jar包不兼容.同时jstl标签也需要jar包,是jstl.jar,standard.jar. 2.mybatis的mapper.xml映射 ...

  10. 【docker-compose】使用docker-compose部署运行spring boot+mysql 【处理容器的时区问题】【详解】【福利:使用docker-compose构建 wordpress+mysql】

    ==================================================================================================== ...