[TOC]
redis常用语缓存操作,但是redis功能不仅仅于此。今天我们来看看redis的key失效事件
redis安装
- 为了方便安装。我们直接使用docker安装redis。这里不多赘述docker了。直接贴出代码自己搞成脚本执行就可以了
docker拉取
docker pull redis:3.2
启动
1 | bash复制代码 |
- 为了安全我们还是设置下密码,将上述脚本password修改为自己的密码即可
- 上面的/opt/soft/docker/redis/data这个我们只需要创建空文件夹就行了,这个我们是为了将redis日志映射出来方便定位问题。
- redis.conf文件去官网上下载就行了。docker安装的redis默认没有配置文件。或者直接复制我这里的。
1 | conf复制代码 |
redis 配置
- 这里的配置我在上面已经配置了。在官网下载的是默认的配置。上面我加了一个配置
notify-keyspace-events Ex
。关于Ex下表中有解释
属性 | 说明 |
---|---|
K | 键空间通知,所有通知keyspace@ 为前缀,追对key |
E | 键事件通知,所有通知已keyspace@为前缀,追对event |
g | DEL、EXPIRE、RENAME等类型无关的通用命令通知 |
$ | 字符串命令通知 |
l | 列表命令通知 |
s | 集合命令通知 |
h | 哈希命令通知 |
z | zset命令通知 |
x | 过期事件通知,每当key过期就会触发 |
e | 驱逐事件,每当有键因为maxmemory策略被清楚是触发 |
A | g$lshzxe总称 |
命令监听
- 完成上述配置后,我们打开redis客户端
1 | java复制代码 |
- myredis是上面安装redis容器的别名。这个读者可以自己设置
- 因为设置了密码,连接后我们需要进行密码验证
1 | java复制代码 |
- 然后注册监听器
PSUBSCRIBE __keyevent@*__:expired
- 其中expired就是我们注册类型 , @ 后面的* 表示DB。这里我们监听所有数据库的key过期事件。
问题
- 比如我们想监听DB0的key删除事件。我们可以这么注册
PSUBSCRIBE __keyevent@0__:del
- 127.0.0.1:6379后面没有数字说明使用的是默认的db0。
- 切换到DB1中查看hello没有查到。且6379后面有了数据库索引值。这个时候在DB1新增hello并进行删除。看看另外一个监听DB0的监听器会不会有响应
- 很明显,我们没有任何的通知。现在我们在DB0 中进行删除hello。看看监听器的效果
- 这个时候在DB0 中执行删除也没有监控到信息。这里不知道为什么。还望指点
程序监听
- springboot程序添加依赖
1 | xml复制代码 |
1 | java复制代码 |
- 这里只是为了演示过期事件的监听。所以这里的redisConfig没有加入太多的配置。
1 | xml复制代码 |
具体监听类
1 | java复制代码 |
效果
总结
- key过期事件的监听实际使用的不是很多。因为redis大部分都是缓存作用。缓存本来就会可有可无的。所以监听意义不大。但是也可以在不少场景下使用。
- 订单30分钟未付款自动取消场景
- 系统定时提醒功能
本文转载自: 掘金