安装 StackExchange.Redis

1
Install-Package StackExchange.Redis

Redis 开启键空间通知功能

打开 redis.conf 文件,找到 notify-keyspace-events 配置项,修改为 Ex,然后重启 redis 服务。

1
notify-keyspace-events "Ex"

notify-keyspace-events 的参数可以是以下字符的任意组合,它指定了服务器该发送哪些类型的通知:

字符发送的通知
K键空间通知,所有通知以 keyspace@ 为前缀
E键事件通知,所有通知以 keyevent@ 为前缀
gDEL 、 EXPIRE 、 RENAME 等类型无关的通用命令的通知
$字符串命令的通知
l列表命令的通知
s集合命令的通知
h哈希命令的通知
z有序集合命令的通知
x过期事件,每当有过期键被删除时发送
e驱逐事件,每当有键因为 maxmemory 政策而被删除时发送
A参数 g$lshzxe 的别名

.net 订阅键过期事件

1
2
3
4
5
6
7
ConnectionMultiplexer _redis = ConnectionMultiplexer.Connect("127.0.0.1:6379");;
var sub = _redis.GetSubscriber();
sub.Subscribe("__keyevent@0__:expired", (key, value) =>
{
    // __keyevent@0__:expired 123456
    Trace.WriteLine($"{key} {value}");
});
  • 0 表示数据库索引
  • expired 表示过期事件
  • keyevent 表示键
  • keyspace 表示键空间

通过订阅 __key*__: * 即可接收到所有操作的消息。

expired 可以用 * 代替,键过期回调事件时,key 为 keyevent@0:expired 。

可订阅的所有键空间事件参考: keyspace 所有键空间事件通知