
登录进入redis-cli客户端,执行:
config set notify-keyspace-events Ex
或者在redis.conf 添加配置:
notify-keyspace-events "Ex" //过期时间监听生效
或者通过代码设置:
# 连接redis库1 redisCli1 = StrictRedis(db=1, decode_responses=True) # 开启key过期通知功能 redisCli1.config_set("notify-keyspace-events", "Ex") # 清空库 redisCli1.flushdb() | 字符 | 发送通知 |
|---|---|
| K | 键空间通知,所有通知以 keyspace@ 为前缀,针对Key |
| E | 键事件通知,所有通知以 keyevent@ 为前缀,针对event |
| g | DEL 、 EXPIRE 、 RENAME 等类型无关的通用命令的通知 |
| $ | 字符串命令的通知 |
| l | 列表命令的通知 |
| s | 集合命令的通知 |
| h | 哈希命令的通知 |
| z | 有序集合命令的通知 |
| x | 过期事件:每当有过期键被删除时发送 |
| e | 驱逐(evict)事件:每当有键因为 maxmemory 政策而被删除时发送 |
| A | 参数 g$lshzxe 的别名,相当于是All |
登录进入redis-cli 客户端,执行:( 订阅一个或者多个符合pattern格式的频道)
# 进入1库redis-cli -n 1--raw# 订阅过期事件,*代表所有库PSUBSCRIBE __keyevent@*__:expired
然后该客户端处于监听状态,如果有key过期,则列出:
from redis import StrictRedisimport requestsimport sysimport loggingimport logging.handlerslogger = logging.getLogger('mylogger')logger.setLevel(logging.WARNING)# handler 输出到控制台ch = logging.StreamHandler()ch.setLevel(logging.WARNING)logger.addHandler(ch)# redistry: # 开启key过期通知功能 redisCli1 = StrictRedis(db=1, decode_responses=True) redisCli1.config_set("notify-keyspace-events", "Ex") redisCli1.flushdb()except: logging.error("redis服务未启动!") sys.exit(0)# 对库1 进行监听pubsub = redisCli1.pubsub()# 发布监听key失效的订阅pubsub.psubscribe("__keyevent@1__:expired")# 通过无限循环等待事件logger.info('Starting message loop')for data in pubsub.listen(): key = data.get("data") if key != 1: logger.warning("过期key是: %s", key)