Redis Key 过期事件订阅
需求
在自建企业内部威胁情报的过程中, 需要通过Redis统一管理过期时间的Key。因此需要对过期的Key进行实时监听, 并进行回调处理。
思路
在 Redis 的 2.8.0 版本之后,其推出了一个新的特性——键空间消息(Redis Keyspace Notifications),它配合 2.0.0 版本之后的 SUBSCRIBE 就能完成这个定时任务的操作了。
Redis 的键空间通知支持 订阅指定 Key 的所有事件 与 订阅指定事件 两种方式。
Keyspace notifications are implemented sending two distinct type of events for every operation affecting the Redis data space. For instance a DEL operation targeting the key named mykey in database 0 will trigger the delivering of two messages, exactly equivalent to the following two PUBLISH commands:
1 | PUBLISH __keyspace@0__:mykey del |
通过 Redis 的键空间通知(keyspace notification)可以做到:将IoC数据写入Redis,设置过期时间10分钟,利用 Redis 键过期回调提醒,如果未被消费,则进行处理。
实现
1. 修改 redis.conf 开启redis key过期提醒
By default keyspace events notifications are disabled because while not very sensible the feature uses some CPU power. Notifications are enabled using the notify-keyspace-events of redis.conf or via the CONFIG SET.
由于键空间通知比较耗CPU, 所以 Redis默认是关闭键空间事件通知的, 需要手动开启 notify-keyspace-events
后才启作用。
1 | K:keyspace事件,事件以__keyspace@<db>__为前缀进行发布; |
notify-keyspace-events Ex
表示开启键过期事件提醒
redis.conf
1 | # RDB Config |
2. RedisHelper
1 | #!/usr/bin/env python3 |