2-1 Java——Jedis
Jedis是什么
Maven依赖
<dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>2.9.0</version></dependency>
Jedis直连
// 1.创建一个Jedis对象,这个对象负责和指定的Redis节点进行通信
Jedis jedis=new Jedis("127.0.0.1",6479);
// 2.jedis执行set操作
jedis.set("hello","world");
// 3.jedis执行get操作
String value=jedis.get("hello");
// 4.关闭jedis连接
jedis.close();
Jedis构造器的常用参数:
// 1. 创建配置对象
GenericObjectPoolConfig config = new GenericObjectPoolConfig();
// 2. 创建连接池,传入配置对象
JedisPool jedisPool = new JedisPool(config, "47.107.149.75", 6382);
// 3. 从池中获取一个jedis连接
Jedis jedis = jedisPool.getResource();
// 4. 使用
jedis.set("hello", "future");
String result = jedis.get("hello");
// 5. 归还连接
` jedis.close();
Jedis连接池配置
资源数控制参数:
| 参数名 | 含义 | 默认值 | 使用建议 |
|---|---|---|---|
| maxTotal | 资源池最大连接数 | 8 | 见下方 |
| maxIdle | 资源池允许最大空闲连接数 | 8 | |
| minIdle | 资源池确保最少空闲连接数 | 0 | |
| jmxEnabled | 是否开启jmx监控,可用于监控 | true | 建议开启 |
借还参数:
| 参数名 | 含义 | 默认值 | 使用建议 |
|---|---|---|---|
| blockWhenExhausted | 当资源池用尽后,调用者是否阻塞等待。只有当为true时,下面的maxWaitMillis才会生效 | true | 建议true |
| maxWaitMillis | 当资源池连接用尽后,调用者的最大等待时间(单位为毫秒) | -1,表示永远等待 | 不建议使用默认值,不要一直等待。比如可以为1000。 |
| testOnBorrow | 向资源池借用连接时,是否做连接有效性检测(ping)。无效连接会被移除。 | false | false |
| testOnReturn | 向资源池归还连接时是否做连接有效性检测(ping)。无效连接会被移除。 | false | false |
如何确定maxTotal?
比较难确定。举个例子:
- 命令平均执行时间1ms = 0.001s。
- 业务需要50000 QPS。
- maxTotal理论值 = 0.001 * 50000 = 50个。实际值要偏大一些。
- 另外需要考虑:应用数量 * maxTotal <= redis能够支撑的最大连接数(默认10000)。
如何确定maxIdle和minIdle?
- 建设maxIdle = maxTotal
- 建议应用启动时对连接池进行预热。


