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 个。
