概述
键空间通知使得客户端可以通过订阅频道或模式, 来接收那些以某种方式改动了 Redis 数据集的事件。如Redis数据库中键的过期事件也是通过订阅功能实现。本文主要基于Azure PaaS Redis演示相关功能的具体实现。
配置
因为开启键空间通知功能需要消耗一些 CPU , 所以在默认配置下, 该功能处于关闭状态。因为Azure Redis屏蔽了部分指令,不能直接使用cli指令设置notify-keyspace-events参数,目前可以通过Azure Portal管理门户直接设置。注意: 基本版的Redis还不支持设置该参数。
操作演示
pub/sub
-
使用Azure Console发布消息
-
使用Cli工具订阅消息(注意使用cli连接Azure redis需要打开6379端口)
sub expired key event
-
设置带有过期时间的key
-
订阅过期key事件
注意
Redis 使用以下两种方式删除过期的键:
1、当一个键被访问时,程序会对这个键进行检查,如果键已经过期,那么该键将被删除。
2、底层系统会在后台渐进地查找并删除那些过期的键,从而处理那些已经过期、但是不会被访问到的键。
当过期键被以上两个程序的任意一个发现、 并且将键从数据库中删除时, Redis 会产生一个 expired 通知。
Redis 并不保证生存时间(TTL)变为 0 的键会立即被删除: 如果程序没有访问这个过期键, 或者带有生存时间的键非常多的话, 那么在键的生存时间变为 0 , 直到键真正被删除这中间, 可能会有一段比较显著的时间间隔。