如何通过redis-cli命令行认证?带密码批量删密钥方法
我来帮你搞定这两个Redis命令行的问题,都是日常使用中很常见的场景:
1. 如何通过redis-cli从命令行进行身份认证?
有两种常用的方式,看你哪种更顺手:
交互式认证:先正常启动redis-cli进入交互模式,然后输入认证命令:
AUTH your_redis_password验证成功后会返回
OK,之后就能执行其他Redis命令了。启动时直接带密码:如果不想进入交互模式再输入密码,可以在启动redis-cli的时候直接指定密码参数:
# 短参数形式 redis-cli -a your_redis_password # 长参数形式,更清晰 redis-cli --auth your_redis_password要是你的密码里包含特殊字符(比如空格、
@、&这类),记得给密码加上引号,避免被shell解析出错:redis-cli -a "your@pass&word_with_spaces"
2. 带密码时如何删除匹配
abc*的所有密钥? 没错,Redis加了密码之后,原来的命令因为没有携带认证信息,所以每个redis-cli调用都会报错认证失败,必须在命令里加入密码参数才行。有两种修改方式:
方式一:给每个redis-cli调用都加上密码参数
直接修改原来的命令,在两个redis-cli后面都加上-a(或--auth)参数:
redis-cli -a your_redis_password --raw keys "abc*" | xargs redis-cli -a your_redis_password del
同样,密码有特殊字符的话记得加引号。
方式二:更安全的写法(避免命令行暴露密码)
上面的写法会把密码明文显示在命令行历史和ps进程列表里,不太安全。你可以改用环境变量传递密码,这样密码不会出现在命令行里:
# 先通过环境变量设置密码 export REDISCLI_AUTH=your_redis_password # 再执行删除命令 redis-cli --raw keys "abc*" | xargs redis-cli del
⚠️ 额外提醒:keys命令在Redis生产环境要谨慎使用,因为它会遍历所有键,阻塞Redis服务一段时间。如果你的Redis里键很多,建议改用scan命令来分批获取匹配的键,再删除,比如可以写个简单的shell脚本:
#!/bin/bash export REDISCLI_AUTH=your_redis_password redis-cli --raw scan 0 MATCH "abc*" COUNT 100 | while read -r key; do if [[ -n "$key" ]]; then redis-cli del "$key" fi done
这个脚本会分批扫描并删除,不会长时间阻塞Redis。
内容的提问来源于stack exchange,提问作者Bravo




