Redis容器内redis-cli keys *返回空数组,但指定key可查询的问题
Redis容器中
keys *返回空但实际存在key的问题解决 问题现象
在Docker容器运行Redis,外部脚本已向log_list列表推送数据,但进入容器执行redis-cli keys *返回(empty array)。通过redis-cli info keyspace确认db0存在1个key,直接指定log_list查询能正常返回,已排除数据库选择错误,终端输出如下:
/redis_data $ redis-cli info keyspace # Keyspace db0:keys=1,expires=0,avg_ttl=0 /redis_data $ redis-cli keys * (empty array) /redis_data $ redis-cli select 0 OK /redis_data $ redis-cli keys * (empty array) /redis_data $ redis-cli keys log_list # 我推送数据的目标key 1) "log_list" /redis_data $ redis-cli keys dne # 确认不存在的key (empty array)
原因&解决办法
这种情况基本是Redis配置限制了keys *命令的使用,以下是具体排查和解决方式:
1. 检查keys命令是否被重命名/禁用
进入容器查看Redis配置文件(默认路径/etc/redis/redis.conf),搜索rename-command KEYS:
- 如果配置是
rename-command KEYS "",说明keys命令被直接禁用; - 如果是
rename-command KEYS "new_cmd_name",则需要用新的命令名执行查询操作。
2. 用安全命令替代keys *
keys *会一次性遍历所有key,数据量大时会阻塞Redis,生产环境不建议使用。可以用scan命令渐进式遍历所有key:
redis-cli scan 0
执行后会返回下一个遍历游标和当前批次的key,重复执行直到游标返回0,即可获取所有key。
3. 恢复keys命令(按需操作)
如果确实需要使用keys命令,修改配置文件注释掉或删除rename-command KEYS相关行,然后重启Redis容器:
docker restart <你的Redis容器名>
内容的提问来源于stack exchange,提问作者Drake
相关产品推荐
相关产品推荐

