Redis判断哪些key没有设置过期时间

半兽人 发表于: 2025-01-27   最后更新时间: 2025-01-27 01:13:23  
{{totalSubscript}} 订阅, 632 游览

1. 导出没设置过期的Key

Redis 的 TTL 用于表示 key 的过期时间:

  • 如果 TTL 返回 -1,说明 key 没有设置过期时间(永久存在)。
  • 如果 TTL 返回 -2,说明 key 已经过期或不存在。

可以使用 SCAN 遍历所有 key,并通过 TTL 判断哪些 key 没有设置过期时间。

#!/bin/bash

# 输出文件
output_file="no_ttl_keys.txt"

# 初始化游标
cursor=0
batch_size=1000  # 每次扫描的 key 数量,建议根据 Redis 性能调整

# 遍历所有 key
while$cursor -ne -ne 0 || $keys == "" ]]; do
    # 使用 SCAN 获取一批 key,显式设置 COUNT
    response=$(redis
    response=$(redis-cli SCAN $cursor COUNT $batch_size)
    cursor"$response" | head 1)  # 更新游标
    keys$(echo"$response" | tail -n2)   # 获取 key 列表

    # 遍历 key,检查 TTL
    forey$keys; do   ttledis TTL "$key")
        ifif$ttl -eq1 ]]; then            echo"$key" >> "$output_file"
        fi
donecho"没有设置 TTL 的 key 已保存到 $output_file"

2. 对 key 进行分类

一般情况下,key 有特定的命名规则(例如 prefix:subprefix:key),可以通过前缀进行分类。

使用 shell 脚本对 key 分类

cat no_ttl_keys.txt | awk -F: '{print $1}' | sort | uniq -c > key_classes.txt

输出示例:

150 user
 90 session
 60 product

这表示 user 前缀的 key 有 150 个,session 有 90 个。

更新于 2025-01-27

查看redis更多相关的文章或提一个关于redis的问题,也可以与我们一起分享文章