选库要看什么
选客户端库要看几项:是否支持集群路由、超时与重试的默认值、连接池的实现方式、RESP3 支持情况,以及社区维护是否活跃。最容易被忽略的是默认值——不少库默认不设超时,一旦故障就会把调用方的线程池整体拖住。
基本信息
| 检查项 | 超时、重试、连接池、集群路由 |
|---|---|
| 默认值 | 不能假设默认配置是合理的 |
| 兼容性 | 库与服务端的版本矩阵 |
| 集群感知 | 是否自动处理 MOVED 与 ASK 重定向 |
典型使用场景
- 新项目选型:对比几个主流库的实现细节
- 故障复盘:线程池被拖死,回看默认超时配置
- 升级服务端版本前核对库的兼容矩阵
- 集群改造:确认库是否支持自动路由与重定向
- 连接数异常排查:池的大小与回收策略
核对服务端与连接现状
核对服务端与连接现状
redis-cli INFO server | grep -E 'redis_version|redis_mode' # 服务端版本与运行模式
redis-cli INFO clients | grep -E 'connected_clients' # 当前连接总数
redis-cli CLIENT LIST | head -20 # 观察真实连接的来源与空闲时间
redis-cli CLIENT LIST | wc -l # 连接总量,判断池是否配得过大
redis-cli CONFIG GET maxclients # 服务端连接上限,与池容量对齐
# 各语言库的检查项(参数名以库文档为准):
# 连接超时、读写超时、重试次数与退避、池最大连接数、是否启用集群路由检查项与默认坑
| 检查项 | 为什么重要 | 常见默认坑 |
|---|---|---|
| 连接与读写超时 | 决定故障时调用方是否被拖死 | 不少库默认不设超时 |
| 重试与退避 | 决定故障是收敛还是放大 | 默认重试可能覆盖不该重试的错误 |
| 连接池上限 | 决定对服务端的连接压力 | 默认值往往偏大或不受限 |
| 集群路由 | 决定是否需要应用层处理重定向 | 部分库默认单机模式 |
| 协议与推送支持 | 影响客户端缓存等新特性 | 老版本库不支持 |
| 维护活跃度 | 影响漏洞修复与版本跟进 | 长期不更新的库风险累积 |
库版本过旧可能不认识新命令或新协议特性,报错形式常常是未知命令或解析失败。排查这类问题时先核对库与服务端的版本矩阵。
默认无超时是生产事故的常见成因:服务端一次慢响应就能占满调用方线程池,影响面远超 Redis 自身。
池的最大连接数要与服务端 maxclients 一起规划,同时注意每个应用实例都会各自持有一个池,实例数量乘以池容量才是服务端要承受的总量。