Redis键空间通知
有需求,Key到期的时候需要一个通知给服务器端用于感知数据的改变。刚好Redis提供了一个Keyspace Notifications功能,可以让服务器端监听某个Key的到期事件。
官方文档说,这个功能是很耗费CPU的,所以,默认是关闭的。需要开启的话,可以使用命令:
config set notify-keyspace-events KEA
如果要监听数据库0的所有key的到期事件,可以使用以下命令:
psubscribe __keyevent@0__:expired
但是上面这个命令并不支持cli使用,必须要在程序中使用。
测试
加入测试数据,过期时间20秒
SETEX coolName 20 value
我们使用golang的go-redis来测试监听事件。
ctx := context.Background()
cli := createRedisClient()
// 打开键事件通知
cli.ConfigSet(ctx, "notify-keyspace-events", "AE")
// 订阅事件
sub := cli.PSubscribe(context.Background(), "__keyevent@0__:expired")
defer sub.Close()
for msg := range sub.Channel() {
// 打印收到的消息
fmt.Println(msg.Channel)
fmt.Println(msg.Payload)
}