缓存超时策略(2):缓存过期时自动触发事件

https://blog.csdn.net/github_26672553/article/details/82014804

缓存超时策略(2):缓存过期时自动触发事件_第1张图片
用redis的订阅/发布功能来做的好处是
如果我们是多个服务器节点,每个节点都订阅,这样只要向频道发送命令,每个节点都会执行。
缓存超时策略(2):缓存过期时自动触发事件_第2张图片

redis 2.8之后有一个功能叫做 Keyspace通知

https://redis.io/topics/notifications
触发某些事件后可以向指定的频道发送通知。

K   键空间通知,所有通知以 __keyspace@<db>__ 为前缀,针对key
E   键事件通知,所有通知以 __keyevent@<db>__ 为前缀,针对event
g   DEL, EXPIRE, RENAME等类型无关的t通用命令的通知
$   字符串命令的通知
l   列表命令的通知
s   集合命令的通知
h   哈希命令的通知
z   有序集合命令的通知
x   过期事件:每当有过期键被删除时发送
e   驱逐(Evict)事件:每当有键因为maxmemory政策而被删除时发送
A   参数g$lshzxe的别名,相当于All

默认情况下,禁用keyspace事件通知。
使用redis的notify-keyspace-events启用通知。

vi redis.conf

notify-keyspace-events EX

基础知识

为了分区数据,redis支持数据库(db)的切换。默认连接的是0.
配置文件中有databases属性可以设置数量,默认是16

1、通过 select x 来进行切换(注意是从0开始的)
2、flushall 则清空所有db的数据;flushdb是清空当前db的数据

回到正题

都统一对 db0进行操作

#一个客户端订阅 过期事件
subscribe __keyevent@0__:expired

#另外一个客户端
setex name 10 jack

10秒过后,过期,订阅端就会收到消息。

你可能感兴趣的:(Redis)