需求:redis中的缓存数据时间到了,消失的时候,需要发出通知
解析:
https://redis.io/topics/notifications
利用redis的 Keyspace notifications订阅和发布即可实现。
实现步骤:
- a) 修改redis的配置文件:
1 2 3 | vi /etc/redis.conf # 不同系统可能路径不一样 # 找到notify-keyspace-events 改为"Ex" notify-keyspace-events "Ex" |
- b) 重启redis:
1 2 3 4 5 6 7 | # linux下 service redis restart # mac下 brew services restart redis |
- c) redis-cli测试:
1 2 3 4 5 6 7 8 | # redis-cli # 语法:@0 代表监听0号数据库 127.0.0.1:6379> psubscribe __keyevent@0__:expired # 执行后会发生阻塞 新开一个redis-cli # 新开一个redis-cli 127.0.0.1:6379> setex test 5 "test_value" |
5秒过后,前一个redis-cli会显示出test这个key名称
- d) python代码实现:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | import redis # 创建redis客户端链接对象:默认localhost,和0号数据库 client = redis.StrictRedis() # 创建发布订阅对象 psub = client.pubsub() # 发布监听key失效的订阅 psub.psubscribe("__keyevent@0__:expired") # 开始监听: # psub.listen返回一个迭代器 for data in psub.listen(): print(data) |
启动刚刚py文件,同样会发生阻塞,另外新开一个redis-cli
1 2 | # 新开一个redis-cli 127.0.0.1:6379> setex test 5 "test_value" |
5秒过后, 也会打印出对应的数据