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

如何按TTL或过期时间查询Redis键?避免高开销遍历操作

Redis按TTL/过期时间查询键的方案

Redis本身没有原生命令支持直接按TTL或过期时间查询键,遍历所有键再逐个获取TTL的方式确实开销极高——KEYS命令会阻塞服务,SCAN虽非阻塞但仍需遍历全量键,都不适合大规模场景。

推荐两种高效的解决方案:

  • 维护有序集合(Sorted Set)追踪过期时间
    在设置带过期时间的键时,同步将键和它的绝对过期时间戳(或剩余TTL)存入有序集合,把过期时间作为score、键名作为member:

    # 设置Test1并指定2天后过期(2*86400=172800秒)
    SET Test1 "value" EX 172800
    # 计算绝对过期时间戳,存入有序集合
    ZADD exp_keys $(($(date +%s) + 172800)) Test1
    

    之后就能通过有序集合的范围查询快速筛选:

    • 查询1天内过期的键:
      ZRANGEBYSCORE exp_keys $(date +%s) $(($(date +%s) + 86400))
      
    • 查询剩余TTL在1天到2天之间的键:
      ZRANGEBYSCORE exp_keys 86400 172800
      

    注意:需配合键空间通知处理键被主动删除或自然过期的情况,收到过期/删除事件时从有序集合中移除对应member,避免数据不一致。

  • 使用Redis模块扩展功能
    比如RedisSearch模块支持创建包含TTL字段的索引,通过查询语句筛选符合条件的键,但这种方式需要额外部署模块,适合有复杂查询需求的场景。

内容的提问来源于stack exchange,提问作者ujwal dhakal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 02:06:26