如何使用Python Redis库的info方法解决"CommandError: command not found"错误

问题现象与背景

当开发者使用Python的redis-py库执行r.info()方法时,可能遇到如下报错:

redis.exceptions.CommandError: command not found

这个错误通常发生在以下场景:

  • Redis服务端版本低于2.6(INFO命令在2.4及以下版本功能受限)
  • 使用了集群模式但未正确配置
  • 连接到了非Redis数据库(如Memcached)
  • 网络代理或中间件拦截了命令
  • 客户端库与服务器协议不兼容

深度解决方案

1. 验证Redis服务器版本

通过redis-server --version检查版本,2.6+版本才支持完整INFO命令:

import redis
r = redis.Redis()
print(r.execute_command('INFO')) # 原始命令测试

2. 检查连接配置

错误的连接参数会导致命令路由失败:

# 正确配置示例
r = redis.Redis(
    host='10.0.0.1',
    port=6379,
    db=0,
    socket_connect_timeout=5
)

3. 集群环境特殊处理

Redis Cluster需要遍历所有节点:

from redis.cluster import RedisCluster
rc = RedisCluster(startup_nodes=[...])
for node in rc.get_primaries():
    print(node.info())

4. 协议兼容性检查

RESP2/RESP3协议差异可能导致问题:

r = redis.Redis(protocol=3) # 显式指定协议版本

5. 网络中间件排查

使用tcpdump抓包分析命令传输:

sudo tcpdump -i any port 6379 -A

底层原理分析

Redis的INFO命令实现涉及:

  1. 命令注册机制:服务端在redisCommandTable中注册命令
  2. 协议解析器:将RESP格式转换为内存对象
  3. 数据分片逻辑:集群模式下命令的路由过程

性能优化建议

场景 优化方案 效果提升
高频调用 使用ConnectionPool复用连接 减少30%延迟
大数据量 指定section参数获取部分信息 降低80%网络负载

错误预防方案

推荐的生产环境实践: