1、使用redis key 過期通知,需開啟key過期通知功能:
登錄進入redis-cli 客戶端,執行:
config set notify-keyspace-events Ex
【或者啟動redis前在redis.conf 添加配置:notify-keyspace-events "Ex" //過期時間監聽生效】
2、啟動監聽key過期
登錄進入redis-cli 客戶端,執行:( 訂閱一個或者多個符合pattern格式的頻道)
PSUBSCRIBE __keyevent@*__:expired
然后該客戶端處於監聽狀態,如果有key過期,則列出
Redis中發布與訂閱只有簡單的6個命令。即:
訂閱一個或者多個符合pattern格式的頻道
PSUBSCRIBE pattern [pattern ...]
發布消息到chanel中
PUBLISH channel message
查看訂閱與發布系統狀態
PUBSUB subcommand [argument [argument ...]]
退訂所有符合格式的頻道
PUNSUBSCRIBE [pattern [pattern ...]]
訂閱一個或者多個頻道
SUBSCRIBE channel [channel ...]
取消訂閱頻道
UNSUBSCRIBE [channel [channel ...]]
--------------------
測試:
3、另外開啟一個客戶端,添加test 為key,並設置5秒過期
setex test 5 test
5秒后,監聽窗口顯示:
pmessage
__keyevent@*__:expired
__keyevent@0__:expired
test
4.接下來上python代碼
#-*- coding:utf-8 -*- import time from redis import StrictRedis #創建redis連接 redis = StrictRedis(host='localhost', port=6379) #創建一個pubsub對象,該對象訂閱一個頻道並偵聽新消息 pubsub = redis.pubsub() #pubsub.psubscribe('__keyspace@0__:*') # 發布監聽key失效的訂閱 pubsub.psubscribe("__keyevent@0__:expired") #通過無限循環等待事件 print('Starting message loop') for data in pubsub.listen(): print(data)
此時我們運行python代碼,然后開一個redis-cli,搞一個keysvalue
setex keys 5 value
5秒以后keys會過期
python會打印 {'type': 'pmessage', 'pattern': b'__keyevent@0__:expired', 'channel': b'__keyevent@0__:expired' 'data': b'keys'}