Redis 里搜索 key 的几种方式
一、KEYS
KEYS *
按模式搜索:
KEYS user:*
️ 问题
会阻塞 Redis
数据多时会卡死
生产环境应该避免使用
只适合:
本地开发
key 数量很少
二、✓ 推荐:SCAN(安全方式)
1. 基础用法
SCAN 0
返回:
1) "next_cursor"
2) 1) "key1"
2) "key2"
第一个值是游标
第二个是 key 列表
当游标返回 0 时结束
2. 带模式匹配
SCAN 0 MATCH user:* COUNT 100
解释:
MATCH → 模式
COUNT → 每次扫描数量(不是精确值)
三、最常用(推荐写法)
直接用 redis-cli 封装好的方式:
redis-cli --scan
按模式:
redis-cli --scan --pattern "user:*"
这个命令内部就是用 SCAN 实现的,安全不阻塞。
四、统计某类 key 数量
redis-cli --scan --pattern "user:*" | wc -l
五、删除匹配的 key(安全)
️ 千万别用:
redis-cli KEYS "user:*" | xargs redis-cli DEL
正确方式:
redis-cli --scan --pattern "user:*" | xargs -n 100 redis-cli DEL
数据很多时更安全:
redis-cli --scan --pattern "user:*" | xargs -L 100 redis-cli DEL
六、搜索指定类型的 key
先查 key:
redis-cli --scan --pattern "user:*"
再看类型:
TYPE keyname
七、查找大 key(排查卡顿)
redis-cli --bigkeys
八、如果是集群模式
必须加:
redis-cli -c --scan --pattern "user:*"
九、模式匹配规则
Redis 使用 glob 风格:
| 表达式 | 说明 |
|---|---|
| * | 任意字符 |
| ? | 单个字符 |
| [abc] | a 或 b 或 c |
| user:* | user: 开头 |