Redis key过期事件的监听

2021/9/24 19:12:21

本文主要是介绍Redis key过期事件的监听,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

使用redis key 过期通知,需开启key过期通知功能:

登录进入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
gDEL 、 EXPIRE 、 RENAME 等类型无关的通用命令的通知
$字符串命令的通知
l列表命令的通知
s集合命令的通知
h哈希命令的通知
z有序集合命令的通知
x过期事件:每当有过期键被删除时发送
e驱逐(evict)事件:每当有键因为 maxmemory 政策而被删除时发送
A参数 g$lshzxe 的别名,相当于是All

启动监听key过期

登录进入redis-cli 客户端,执行:( 订阅一个或者多个符合pattern格式的频道)

# 进入1库
redis-cli -n 1--raw
# 订阅过期事件,*代表所有库
PSUBSCRIBE __keyevent@*__:expired    

然后该客户端处于监听状态,如果有key过期,则列出:

在这里插入图片描述

Python代码示例

from redis import StrictRedis
import requests
import sys
import logging
import logging.handlers

logger = logging.getLogger('mylogger')
logger.setLevel(logging.WARNING)

# handler 输出到控制台
ch = logging.StreamHandler()
ch.setLevel(logging.WARNING)
logger.addHandler(ch)

# redis
try:
    # 开启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)



这篇关于Redis key过期事件的监听的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程