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

如何获取Redis所有现有键及其对应的最后访问时间

Redis查询所有键及对应最后访问时间方案

前置注意事项

生产环境禁止直接使用KEYS *命令,该命令会全量遍历所有键,长时间阻塞Redis主进程,影响线上业务。键数量超过1万的场景请使用SCAN迭代的方式查询。
OBJECT IDLETIME命令依赖Redis 2.2.3及以上版本支持,返回的是键距离最后一次访问的空闲秒数,最后访问Unix时间戳可通过当前时间戳 - 空闲秒数计算得到。

优先:机器可读格式输出方案

以下方案输出标准CSV格式,可直接被各类数据处理工具解析:

小数据量/测试环境方案

直接用单条命令完成输出:

redis-cli --csv KEYS '*' | xargs -L 1 -I {} sh -c 'last_access_ts=$(($(date +%s) - $(redis-cli OBJECT IDLETIME {}))); echo "{},$last_access_ts"'

输出格式示例:"user:1001",1698723456,第一列为键名,第二列为最后访问Unix时间戳(秒级)。

大数据量/生产环境方案

通过SCAN迭代查询,不会长时间阻塞Redis,配套bash脚本如下:

#!/bin/bash
cursor=0
# 每次迭代拉取的键数量,可根据实际场景调整
scan_count=1000
while :; do
    scan_result=$(redis-cli SCAN $cursor COUNT $scan_count)
    cursor=$(echo "$scan_result" | head -n 1)
    key_list=$(echo "$scan_result" | tail -n +2 | grep -v '^$')
    for key in $key_list; do
        idle_seconds=$(redis-cli OBJECT IDLETIME "$key")
        last_access_ts=$(( $(date +%s) - idle_seconds ))
        echo "\"$key\",$last_access_ts"
    done
    [ "$cursor" = "0" ] && break
done

如果使用Redis 7.0及以上版本,可直接通过SCAN的元数据返回能力一次性获取键和空闲时间,大幅降低请求开销,命令示例:

redis-cli --csv SCAN 0 RETURN 2 key idletime() | xargs -L 2 -I {} sh -c 'key=$(echo {} | cut -d, -f1); idle=$(echo {} | cut -d, -f2); last_access_ts=$(($(date +%s) - idle)); echo "$key,$last_access_ts"'

其他参考格式(人类可读)

如果需要直接查看格式化的时间,可使用以下命令输出带日期时间的结果:

redis-cli KEYS '*' | xargs -I {} sh -c 'idle=$(redis-cli OBJECT IDLETIME {}); last_access=$(date -d @$(( $(date +%s) - idle )) +"%Y-%m-%d %H:%M:%S"); echo "键名:{} 最后访问时间:$last_access"'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 04:45:06