You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Redis中批量添加带过期时间的键?

批量向Redis添加带过期时间的键值对并查询有效键

修改批量添加代码

要给批量创建的键加上过期时间,最稳妥的是在set操作时直接指定过期参数——这是原子操作,能避免出现键创建后没来得及设置过期时间的异常情况。修改后的代码如下:

import redis

r = redis.Redis()
pipe = r.pipeline()

# 自定义过期时间,这里设为300秒(5分钟),可根据需求调整
expire_seconds = 300

for i in range(10):
    # 用set方法的ex参数,直接为键绑定过期时间
    pipe.set(f'p{i}', i, ex=expire_seconds)

pipe.execute()

如果需要分开执行设置键值和过期时间(非原子操作,不推荐),也可以这么写:

for i in range(10):
    pipe.set(f'p{i}', i)
    pipe.expire(f'p{i}', expire_seconds)

查询时过滤已过期的键

Redis的过期键不会实时删除,而是通过惰性删除(访问时检查并删除)和定期删除(后台定时清理)机制处理。直接用KEYS命令可能会拿到已过期但未被清理的键,推荐用以下方式获取有效键:

  1. 用SCAN渐进式遍历键(不会阻塞Redis,适合生产环境)
  2. 对每个键做有效性校验,两种方式可选:

方式1:检查键的剩余过期时间

valid_keys = []
# 遍历所有以p开头的键,match参数可根据你的键名规则调整
for key in r.scan_iter(match='p*'):
    ttl = r.ttl(key)
    # ttl返回-2表示键已过期不存在;-1表示永不过期;正数是剩余过期时间
    if ttl != -2:
        valid_keys.append(key.decode())  # 转成字符串格式方便查看

print("有效键:", valid_keys)

方式2:直接尝试获取键值

利用Redis的惰性删除机制,访问已过期的键时会自动删除并返回None,所以可以直接判断值是否存在:

valid_keys = []
for key in r.scan_iter(match='p*'):
    value = r.get(key)
    if value is not None:
        valid_keys.append(key.decode())

print("有效键:", valid_keys)

注意:生产环境禁止使用KEYS命令,它会遍历所有键导致Redis阻塞,严重影响性能。

内容的提问来源于stack exchange,提问作者Govind Avireddi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 09:13:08