查看 Redis 某种类型的所有 key

Redis 没有提供按类型查找 key 的方法。 我们自己通过管道组合命令来查询。

注意,这仅适合 key 不太多的情况,如果太多,可能会很卡。

方法

redis-cli -a [Password] KEYS "*" 2>/dev/null | xargs -t -I {} redis-cli -a [Password] TYPE "{}" 2>&1 | grep -x -B 2 [type] | grep -v Warning
  • [type] 替换成你要查找的类型
  • 当 Redis 存在密码时,使用 -a [Password]。这将导致 Redis 警告:Warning: Using a password with ‘-a’ or ‘-u’ option on the command line interface may not be safe.。所以 grep -B 2 打印结果前两行才能看到 key 名称。
  • grep -v Warning 排除 Redis 警告信息。

如果你的 grep 支持 -P 选项,那么你有一种更加完美的解决方式:
如果你的系统是 MacOS 且不支持 -P,可参考以下 《附录 - MacOS 安装 GUN grep》

redis-cli -a [Password] KEYS "*" 2>/dev/null | xargs -t -I {} redis-cli -a [Password] TYPE "{}" 2>&1 | grep -x -B 2 [type] | grep -o -P '(?<=TYPE ).*$'
  • grep -o -P '(?<=TYPE ).*$' 只打印 key
  • 如果你看不懂 ?<= 的含义,请自行学习正则表达式断言

示例

例如:查看 stream 类型的所有 key
假设密码为 abcd1234

$ redis-cli -a abcd1234 KEYS "*" 2>/dev/null | xargs -t -I {} redis-cli -a abcd1234 TYPE "{}" 2>&1 | grep -x -B 2 stream | grep -v Warning
# 打印结果
redis-cli -a abcd1234 TYPE userstream
stream
  • 第一行 userstream 即是我们查找出来的其中一个 key
  • 第二行 stream 是它的类型

同样的,用 -P 查询

$ redis-cli -a abcd1234 KEYS "*" 2>/dev/null | xargs -t -I {} redis-cli -a abcd1234 TYPE "{}" 2>&1 | grep -x -B 2 stream | grep -o -P '(?<=TYPE ).*$'
# 打印结果
userstream
  • 结果更加直观。

附录 - MacOS 安装 GUN grep

MacOS 系统自带的 grep 是 BSD grep, 它不支持 -P 选项,GNU grep 才支持 -P 选项。

  1. 安装
$ brew install grep
  1. 替换 grep 默认路径
$ vim ~/.zshrc
# 在末尾加入
export PATH="/usr/local/opt/grep/libexec/gnubin:$PATH"
  1. 立刻生效
$ source ~/.zshrc
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐