安装redis-py库 Redis 数据库数量探测脚本 功能 1. 连接到 Redis 实例 2. 通过 CONFIG GET databases 获取配置的数据库数量 3. 以遍历 SELECT 的方式兜底验证找出实际可用的最大 db 索引 4. 统计每个 db 的 key 数量 用法 直接运行使用默认连接参数 (localhost:6379, 无密码) 或通过命令行参数 / 环境变量自定义连接信息 python count_redis_dbs.py --host 127.0.0.1 --port 6379 --password yourpass importargparseimportosimportsysimportredisdefconnect_redis(host,port,password,db0,socket_timeout5):建立 Redis 连接并执行 PING 验证可用性clientredis.Redis(hosthost,portport,passwordpasswordifpasswordelseNone,dbdb,socket_timeoutsocket_timeout,decode_responsesTrue,protocol2,# 强制 RESP2避免 HELLO 命令retry_on_timeoutFalse,# 禁用自动重试报错更直接)try:pongclient.ping()print(f[连接成功]{host}:{port}- PING:{pong})exceptredis.AuthenticationError:print(f[连接失败] 密码错误请检查 --password 参数)sys.exit(1)exceptredis.ConnectionErrorase:print(f[连接失败] 无法连接到{host}:{port}-{e})sys.exit(1)exceptredis.TimeoutError:print(f[连接超时]{host}:{port}在{socket_timeout}s 内无响应)sys.exit(1)exceptredis.exceptions.ResponseErrorase:msgstr(e)ifHELLOinmsg:print(f[连接失败] 该 Redis 实例不支持 HELLO 命令可能是低版本或代理模式)print(f 提示请确保脚本已设置 protocol2。如果仍有问题需升级 Redis 版本。)else:print(f[连接失败] Redis 响应错误:{e})sys.exit(1)returnclientdefcount_by_config(client):方式一通过 CONFIG GET databases 获取配置的数据库数量最准确try:resultclient.config_get(databases)db_countint(result.get(databases,0))print(f[CONFIG GET] 配置的数据库数量 {db_count})returndb_countexceptredis.exceptions.ResponseErrorase:# 某些云 Redis 禁用了 CONFIG 命令print(f[CONFIG GET] 命令不可用:{e})returnNoneexceptExceptionase:print(f[CONFIG GET] 获取失败:{e})returnNonedefcount_by_select(client):方式二遍历 SELECT 命令兜底探测实际可用的数据库数量print([SELECT 遍历] 开始逐个探测 db 索引...)count0per_db_keys{}# Redis 默认最多 256 个库设一个合理上限防止无限循环max_probe256forindexinrange(max_probe):try:client.execute_command(SELECT,index)# SELECT 成功说明该 db 存在count1# 顺便统计该 db 的 key 数量try:key_countclient.dbsize()exceptException:key_countN/Aper_db_keys[index]key_countexceptredis.exceptions.ResponseErrorase:error_msgstr(e)# invalid DB index / DB index is out of range 表示超出范围ifout of rangeinerror_msgorinvalid DB indexinerror_msg:breakprint(f db{index}: 错误 -{error_msg})breakexceptExceptionase:print(f db{index}: 异常 -{e})break# 探测完切回 db0try:client.execute_command(SELECT,0)exceptException:passprint(f[SELECT 遍历] 实际可用数据库数量 {count})returncount,per_db_keysdefscan_db_keys(client,db_count):统计每个数据库的 key 数量print(\n 各数据库 key 统计 )total_keys0forindexinrange(db_count):try:client.execute_command(SELECT,index)key_countclient.dbsize()total_keyskey_count marker -- 有数据ifkey_count0elseprint(f db{index:3}:{key_count}个 key{marker})exceptExceptionase:print(f db{index:3}: 统计失败 -{e})# 切回 db0try:client.execute_command(SELECT,0)exceptException:passprint(f ────────────────────────────────────)print(f 总计:{total_keys}个 key (跨{db_count}个数据库))returntotal_keysdefmain():parserargparse.ArgumentParser(description探测 Redis 数据库数量)parser.add_argument(--host,defaultos.getenv(REDIS_HOST,127.0.0.1),helpRedis 主机地址 (默认: 127.0.0.1))parser.add_argument(--port,typeint,defaultint(os.getenv(REDIS_PORT,6379)),helpRedis 端口 (默认: 6379))parser.add_argument(--password,defaultos.getenv(REDIS_PASSWORD,),helpRedis 密码 (默认: 无))parser.add_argument(--socket-timeout,typeint,default5,help连接超时秒数 (默认: 5))argsparser.parse_args()print(*50)print( Redis 数据库数量探测工具)print(f 目标:{args.host}:{args.port})print(*50)# 1. 建立连接clientconnect_redis(args.host,args.port,args.password,socket_timeoutargs.socket_timeout)# 2. 方式一CONFIG GET databases优先db_countcount_by_config(client)# 3. 方式二SELECT 遍历兜底CONFIG 不可用时使用ifdb_countisNone:db_count,_count_by_select(client)ifdb_count0:print(\n[结果] 未能确定数据库数量请检查 Redis 版本和权限。)return# 4. 统计各库 key 数量scan_db_keys(client,db_count)# 5. 最终结论print(f\n{*50})print(f 结论: 该 Redis 实例共有{db_count}个数据库 (db0 ~ db{db_count-1}))print(f{*50})if__name____main__:main()效果[CONFIG GET] 配置的数据库数量 256 各数据库 key 统计 db 0: 5 个 key -- 有数据 db 1: 38 个 key -- 有数据 db 2: 21 个 key -- 有数据 db 3: 0 个 key db 4: 0 个 key db 5: 6 个 key -- 有数据 db 6: 0 个 key db 7: 0 个 key db 8: 0 个 key db 9: 0 个 key db 10: 0 个 key db 11: 0 个 key db 12: 0 个 key db 13: 0 个 key db 14: 0 个 key db 15: 0 个 key db 16: 0 个 key db 17: 0 个 key db 18: 0 个 key db 19: 0 个 key db 20: 0 个 key db 21: 0 个 key db 22: 0 个 key db 23: 0 个 key db 24: 0 个 key db 25: 0 个 key db 26: 0 个 key db 27: 0 个 key db 28: 0 个 key db 29: 0 个 key db 30: 0 个 key db 31: 0 个 key db 32: 0 个 key db 33: 0 个 key db 34: 0 个 key db 35: 0 个 key db 36: 0 个 key db 37: 0 个 key db 38: 0 个 key db 39: 0 个 key db 40: 0 个 key db 41: 0 个 key db 42: 0 个 key db 43: 0 个 key db 44: 0 个 key db 45: 0 个 key db 46: 0 个 key db 47: 0 个 key db 48: 0 个 key db 49: 0 个 key db 50: 0 个 key db 51: 0 个 key db 52: 0 个 key db 53: 0 个 key db 54: 0 个 key db 55: 0 个 key db 56: 0 个 key db 57: 0 个 key db 58: 0 个 key db 59: 0 个 key db 60: 0 个 key db 61: 0 个 key db 62: 0 个 key db 63: 0 个 key db 64: 0 个 key db 65: 0 个 key db 66: 0 个 key db 67: 0 个 key db 68: 0 个 key db 69: 0 个 key db 70: 0 个 key db 71: 0 个 key db 72: 0 个 key db 73: 0 个 key db 74: 0 个 key db 75: 0 个 key db 76: 0 个 key db 77: 0 个 key db 78: 0 个 key db 79: 0 个 key db 80: 0 个 key db 81: 0 个 key db 82: 0 个 key db 83: 0 个 key db 84: 0 个 key db 85: 0 个 key db 86: 0 个 key db 87: 0 个 key db 88: 0 个 key db 89: 0 个 key db 90: 0 个 key db 91: 0 个 key db 92: 0 个 key db 93: 0 个 key db 94: 0 个 key db 95: 0 个 key db 96: 0 个 key db 97: 0 个 key db 98: 0 个 key db 99: 0 个 key db100: 0 个 key db101: 0 个 key db102: 0 个 key db103: 0 个 key db104: 0 个 key db105: 0 个 key db106: 0 个 key db107: 0 个 key db108: 0 个 key db109: 0 个 key db110: 0 个 key db111: 0 个 key db112: 0 个 key db113: 0 个 key db114: 0 个 key db115: 0 个 key db116: 0 个 key db117: 0 个 key db118: 0 个 key db119: 0 个 key db120: 0 个 key db121: 0 个 key db122: 0 个 key db123: 0 个 key db124: 0 个 key db125: 0 个 key db126: 0 个 key db127: 0 个 key db128: 0 个 key db129: 0 个 key db130: 0 个 key db131: 0 个 key db132: 0 个 key db133: 0 个 key db134: 0 个 key db135: 0 个 key db136: 0 个 key db137: 0 个 key db138: 0 个 key db139: 0 个 key db140: 0 个 key db141: 0 个 key db142: 0 个 key db143: 0 个 key db144: 0 个 key db145: 0 个 key db146: 0 个 key db147: 0 个 key db148: 0 个 key db149: 0 个 key db150: 0 个 key db151: 0 个 key db152: 0 个 key db153: 0 个 key db154: 0 个 key db155: 0 个 key db156: 0 个 key db157: 0 个 key db158: 0 个 key db159: 0 个 key db160: 0 个 key db161: 0 个 key db162: 0 个 key db163: 0 个 key db164: 0 个 key db165: 0 个 key db166: 0 个 key db167: 0 个 key db168: 0 个 key db169: 0 个 key db170: 0 个 key db171: 0 个 key db172: 0 个 key db173: 0 个 key db174: 0 个 key db175: 0 个 key db176: 0 个 key db177: 0 个 key db178: 0 个 key db179: 0 个 key db180: 0 个 key db181: 0 个 key db182: 0 个 key db183: 0 个 key db184: 0 个 key db185: 0 个 key db186: 0 个 key db187: 0 个 key db188: 0 个 key db189: 0 个 key db190: 0 个 key db191: 0 个 key db192: 0 个 key db193: 0 个 key db194: 0 个 key db195: 0 个 key db196: 0 个 key db197: 0 个 key db198: 0 个 key db199: 0 个 key db200: 0 个 key db201: 0 个 key db202: 0 个 key db203: 0 个 key db204: 0 个 key db205: 0 个 key db206: 0 个 key db207: 0 个 key db208: 0 个 key db209: 0 个 key db210: 0 个 key db211: 0 个 key db212: 0 个 key db213: 0 个 key db214: 0 个 key db215: 0 个 key db216: 0 个 key db217: 0 个 key db218: 0 个 key db219: 0 个 key db220: 0 个 key db221: 0 个 key db222: 0 个 key db223: 0 个 key db224: 0 个 key db225: 0 个 key db226: 0 个 key db227: 0 个 key db228: 0 个 key db229: 0 个 key db230: 0 个 key db231: 0 个 key db232: 0 个 key db233: 0 个 key db234: 0 个 key db235: 0 个 key db236: 0 个 key db237: 0 个 key db238: 0 个 key db239: 0 个 key db240: 0 个 key db241: 0 个 key db242: 0 个 key db243: 0 个 key db244: 0 个 key db245: 0 个 key db246: 0 个 key db247: 0 个 key db248: 0 个 key db249: 0 个 key db250: 0 个 key db251: 0 个 key db252: 0 个 key db253: 0 个 key db254: 0 个 key db255: 0 个 key ──────────────────────────────────── 总计: 70 个 key (跨 256 个数据库) 结论: 该 Redis 实例共有 256 个数据库 (db0 ~ db255)