Jedis 直连
Jedis(String host,int port ,int connectionTimeout ,int soTimeout)
jedis.set
jedis连接池
jedis 配置优化
参数名 | 含义 | 默认值 | 使用建议 |
---|---|---|---|
maxTotal | 资源池最大连接数 | 8 | |
maxIdle | 资源池允许最大空闲连接数 | 8 | |
minIdle | 资源池确保最少空闲连接数 | 0 | |
jmxEnable | 是否开启jmx监控 | true | 建议开启 |
blockWhenExhausted | 当资源池用尽后,调用者是否要等待 | true | 建议使用默认值 |
maxWaitMillis | 当资源连接池用尽后,调用者的最大等待时间(毫秒) | -1:永不超时 | 不建议使用 |
testOnBorrow | 向资源池借用连接时是否做连接有效性检测(ping),无效连接会被移除 | false | 建议false |
testOnReturn | 向资源池归还连接时是否做连接有效性检测(ping),无效连接会被移除 | false | 建议false |
- 适合的maxTotal
- 命令平均执行时间0.1ms =0.001s。
- 业务需要50000QPS
- maxTotal 理论值=0.001*50000 =50个 。实际值要偏大一些
- 业务希望Redis并发量
- 客户端执行命令时间
- Redis资源:例如nodes(应用个数)*maxTotal 是不能超过redis的最大连接数。(config get maxclients)
- 资源开销:例如虽然希望控制空闲连接,但是不希望因为连接池的频繁释放创建连接造成不必要开销
- 适合的maxIdle和minIdle
建议maxIdle =maxTotal
- 减少创建新连接的开销
建议预热minIdle - 建少第一次启动后的新连接开销
常见问题
- Timeout waiting for idle object
- Pool exhausted
问题思路
- 慢查询阻塞:池子连接都被hang住
- 资源池参数不合理:例如QPS高,池子小
- 连接泄露(没有close()):此类问题比较难定位,例如client list ,netstat 等
- DNS 异常