前言: 之前看过redis的订阅发布文档, 但是实际开发中并未使用.
最近同事有一个需求, 需要在key失效的时候做一些事情, 趁机研究了一下redis的订阅发布机制.
其命令就不多做介绍了,可以参考:http://www.redis.net.cn/order/3632.html
不过需要注意redis 2.8版本以后才支持对失效key的 订阅/发布
场景:
操作系统: mac os
redis: 4.0.11
步入正题:
redis安装就不过多介绍了
首先在本机启动redis测试一下redis的订阅发布
启动redis服务: redis-server
启动redis客户端并测试是否连接服务成功 : redis-cli
先打开一个客户端并订阅一个channel:
这个客户端不要关闭, 接收消息, 另外再启动一个终端并打开redis客户端发布消息:
另外一个客户端会接收到消息:
下面开始使用redis的key失效事件订阅:
由于redis默认没有开启失效key的订阅, 需要修改配置文件或者通过config命令打开
1. 命令: config set notify-keyspace-events Ex
命令打开的方式只是暂时的,服务重启后就会失效, 如果指定了配置文件, 可以使用 config rewrite将配置文件重写
2. 配置文件: 在redis文件夹下找到 redis.conf文件,打开找到1000行左右, 版本不一样可能行号位置不一样,
原始为: notify-keyspace-events '' 修改为 notify-keyspace-events Ex, 如下图
然后打开第一个redis客户端, 订阅channel : subscribe __keyevent@0__:expired
在另外一个客户端设置一个key, 失效时间3秒,三秒后订阅了key失效事件的客户端可以接受到消息
set test test Ex 3
以上本地测试完成. 下面在java中使用redis的订阅/发布key失效事件
maven依赖:
redis模板配置,网上一大堆,只上截图:
MyKeyExpiredListener为自己定义的监听器
此处订阅key失效事件: __keyevent@0__:expired
启动服务, 并通过redis客户端设置一个key :
set face:111 face Ex 3
控制台会打印出失效的key