redis 超时失效key 的监听触发
1. 事件通过 Redis 的订阅与发布功能(pub/sub)来进行分发,故需要订
阅 __keyevent@0__:expired 通道
0表示db0 根据自己的dbindex选择合适的数字
2. 修改 redis.conf 文件
修改 notify-keyspace-events Ex
# K 键空间通知,以__keyspace@<db>__为前缀
# E 键事件通知,以__keysevent@<db>__为前缀
# g del , expipre , rename 等类型无关的通用命令的通知, ...
# $ String命令
# l List命令
# s Set命令
# h Hash命令
# z 有序集合命令
# x 过期事件(每次key过期时生成)
# e 驱逐事件(当key在内存满了被清除时生成)
# A g$lshzxe的别名,因此”AKE”意味着所有的事件
3. 重启redis , 即可测试失效事件的触发, 监听获取的值为 key
<java>
1. 首先需要一个消息监听器类
package com.sogou.baike.testimport.testSubscribe; import redis.clients.jedis.JedisPubSub; /**
* Created by denglinjie on 2016/6/29.
*/
public class RedisMsgPubSubListener extends JedisPubSub {
@Override
public void unsubscribe() {
super.unsubscribe();
} @Override
public void unsubscribe(String... channels) {
super.unsubscribe(channels);
} @Override
public void subscribe(String... channels) {
super.subscribe(channels);
} @Override
public void psubscribe(String... patterns) {
super.psubscribe(patterns);
} @Override
public void punsubscribe() {
super.punsubscribe();
} @Override
public void punsubscribe(String... patterns) {
super.punsubscribe(patterns);
} @Override
public void onMessage(String channel, String message) {
System.out.println("channel:" + channel + "receives message :" + message);
this.unsubscribe();
} @Override
public void onPMessage(String pattern, String channel, String message) { } @Override
public void onSubscribe(String channel, int subscribedChannels) {
System.out.println("channel:" + channel + "is been subscribed:" + subscribedChannels);
} @Override
public void onPUnsubscribe(String pattern, int subscribedChannels) { } @Override
public void onPSubscribe(String pattern, int subscribedChannels) { } @Override
public void onUnsubscribe(String channel, int subscribedChannels) {
System.out.println("channel:" + channel + "is been unsubscribed:" + subscribedChannels);
}
}
该类需要继承JedisPubSub ,并实现其抽象方法,通过方法的名称很清楚的看出来,这个监听器是用来订阅一个频道,在订阅该频道,取消订阅,收到消息等状态会对应调用相关的方法
2. 订阅测试类
public class TestSubscribe {
@Test
public void testSubscribe() throws Exception{
Jedis jedis = new Jedis("localhost");
RedisMsgPubSubListener listener = new RedisMsgPubSubListener();
jedis.subscribe(listener, "__keyevent@0__:expired");
//other code
}
}
该类实现对频道redisChatTest的订阅监听,频道的订阅,取消订阅,收到消息都会调用listener对象的对应方法
注意:subscribe是一个阻塞的方法,在取消订阅该频道前,会一直阻塞在这,只有当取消了订阅才会执行下面的other code,参考上面代码,我在onMessage里面收到消息后,调用了this.unsubscribe(); 来取消订阅,这样才会执行后面的other code
3. 发布消息测试类
Public class TestPublish {
@Test
public void testPublish() throws Exception{
Jedis jedis = new Jedis("localhost");
jedis.publish("redisChatTest", "我是天才");
Thread.sleep(5000);
jedis.publish("redisChatTest", "我牛逼");
Thread.sleep(5000);
jedis.publish("redisChatTest", "哈哈");
}
}
这个类向频道redisChatTest发布消息,第二步因为订阅了该频道,所以会收到该消息。
redis 超时失效key 的监听触发的更多相关文章
- redis 超时失效key 的监听触发使用
redis自2.8.0之后版本提供Keyspace Notifications功能,允许客户订阅Pub / Sub频道,以便以某种方式接收影响Redis数据集的事件. 可能收到的事件的例子如下: 所有 ...
- JAVA实现redis超时失效key 的监听触发
过期事件通过Redis的订阅与发布功能(pub/sub)来进行分发. 而对超时的监听呢,并不需要自己发布,只有修改配置文件redis.conf中的:notify-keyspace-events Ex, ...
- redis过期事件,swoole监听
$serv = new Swoole\Server('0.0.0.0', 9501, SWOOLE_BASE, SWOOLE_SOCK_TCP); $serv->set(array( 'work ...
- waypoint+animate元素滚动监听触发插件实现页面动画效果
最近在做一个官网类型滚动加载动画,使用到waypoint监听事件插件和animate动画样式,两者结合完美实现向下滚动加载动画,但是没有做向上滚动撤消动画,留待以后有空研究 首先来介绍下jquery. ...
- layui 事件监听触发
1:监听select 改变 <!-- 不用form 用div也可以 --> <form class="layui-form"> <div class= ...
- java中的key事件监听机制
package com.at221; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import javax.sw ...
- Redis集群下过期key监听
1. 前言 在使用redis集群时,发现过期key始终监听不到.网上也没有现成的解决方案.于是想,既然不能监听集群,那我可以建立多个redis连接,分别对每个redis的key过期进行监听.以上做法可 ...
- spring boot 实现redis 的key的过期监听,执行自己的业务
最近几天进一步了解了一下redis,发现了key的过期监听功能,实现方式如下: 在redis的配置文件 redis.conf 中找到"EVENT NOTIFICATION"模块, ...
- 配置redis开机自启动和监听
redis安装好后,每次手动启动很不方便,配置开机自启动. 方法一:设置启动命令到/etc/rc.d/rc.local rc.local文件是系统全局脚本文件,会在其他开机进程脚本文件执行完毕后执行该 ...
随机推荐
- Python学习笔记(二):条件控制语句与循环语句及常用函数的用法
总结的内容: 1.条件控制语句 2.while循环语句 3.for循环语句 4.函数的用法 一.条件控制语句 1.介绍 Python条件语句是通过一条或多条语句的执行结果(True或者False)来决 ...
- ssh连接时提示THE AUTHENTICITY OF HOST XX CAN'T BE ESTABLISHED
问题描述:使用ssh远程连接的时候报如下错误: 解决办法: 输入如下命令: ssh -o StrictHostKeyChecking=no root@123.59.xx.xx 输入密码,链接成功 其他 ...
- 【原】使用Spring自带的JdbcTemplate。
使用Spring自带的JdbcTemplate,可以简化对数据库的操作,用起来十分方便.通过一下几个步骤的配置,即可以使用JdbcTemplate. (1)配置好Spring的数据源,加入mysql驱 ...
- 详解linux中的ps命令
Linux中的ps命令是Process Status的缩写.ps命令用来列出系统中当前运行的那些进程.ps命令列出的是当前那些进程的快照,就是执行ps命令的那个时刻的那些进程,如果想要动态的显示进程信 ...
- 主动找智能钥匙 PKE取代RKE是大势所趋
http://taobao.autos.cn.yahoo.com/ypen/20111128/725214.html 近日,在车友论坛上的一个热帖<悲喜交加:1分钟就能复制汽车遥控器?>在 ...
- sunstudio 12.3 on solaris 10
#include <stdio.h> #include <stdlib.h> #define RPT 10000000 int main() { int i=1; for( i ...
- [self removeAllSubviews]; // 删除所有子视图(包括 selfl.view) 所以,要慎用
[self removeAllSubviews]; //删除所有子视图(包括 selfl.view) 所以,要慎用
- strcmp实现
#include<stdio.h> #include<assert.h> int my_strcmp(const char*a,const char*b) { while(*a ...
- 读取siftgeo格式文件的matlab程序
% This function reads a siftgeo binary file %读取siftgeo格式的二进制文件 % % Usage: [v, meta] = siftgeo_read ( ...
- python植入后门backdoor程序的方法?
后门程序 from gevent.backdoor import BackdoorServer server = BackdoorServer((), banner="Hello from ...