使用 SCAN 命令高效遍历所有键:redis-cli --scan --pattern '*' | xargs redis-cli type
方法一:使用 KEYS 命令
Redis 中 KEYS 命令可以列出符合指定模式的键。语法:KEYS pattern。例如,KEYS * 会返回数据库中的所有键。但在生产环境中不推荐使用,因为它会阻塞服务器。
方法二:使用 SCAN 命令
SCAN 命令用于增量迭代集合中的元素,避免 KEYS 的阻塞问题。语法:SCAN cursor [MATCH pattern] [COUNT count]。示例:SCAN 0 MATCH user:* COUNT 100。每次返回一个游标和部分键,继续使用下一个游标直到游标为 0。
获取键对应的值
遍历键后,使用 TYPE key 检查键类型,然后用 GET、HGETALL 等命令获取值。例如,对于字符串键:GET mykey;对于哈希:HGETALL myhash。
Python 示例代码
import redis r = redis.Redis() cursor = 0 keys = [] while True: cursor, partial_keys = r.scan(cursor=cursor, match='*', count=100) keys.extend(partial_keys) if cursor == 0: break for key in keys: print(key, r.type(key))
生产环境注意事项
避免在主库使用 KEYS,使用 SCAN 分批处理。考虑使用 Redis 集群的 SCAN 兼容模式。对于海量键,结合管道(PIPELINE)批量获取值以提高效率。
FAQ
Q: KEYS 和 SCAN 的区别?
A: KEYS 一次性返回所有匹配键,会阻塞服务器;SCAN 增量返回,不会阻塞,适合生产环境。
Q: 如何批量获取键值对?
A: 遍历键后,使用 PIPELINE 批量执行 GET/HGET 等命令减少网络往返。
Q: Redis 集群怎么遍历所有键?
A: 对每个节点执行 SCAN,并聚合结果。
Q: 有什么工具可以可视化查看所有键?
A: RedisInsight、redis-cli 的 MONITOR 或第三方如 Redis Desktop Manager。