Jedis

  • 使用 Java 操作 Redis 的工具

  • Jedis 实例不是线程安全的,所以不可以多个线程共用一个 Jedis 实例,但是创建太多的实现也不好因为这意味着会建立很多 sokcet 连接

maven

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
<version>1.2.1.RELEASE</version>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.10.2</version>
</dependency>
<!-- JedisPoolConfig 依赖于 org.apache.commons.pool2 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
<version>2.8.0</version>
</dependency>

JedisPool

参考:jedis: 连接池 (JedisPool) 使用示例

  • JedisPool 是一个线程安全的网络连接池。可以用 JedisPool 创建一些可靠 Jedis 实例,可以从池中获取 Jedis 实例,使用完后再把 Jedis 实例还回 JedisPool。这种方式可以避免创建大量 socket 连接并且会实现高效的性能
  • JedisPoolConfig 依赖于 org.apache.commons.pool2

maxTotal

最大连接数,默认 8 个。如果赋值为 - 1,则表示不限制;如果 pool 已经分配了 maxTotal 个 jedis 实例,则此时 pool 的状态为 exhausted。

maxIdle

最大空闲连接数,默认 8 个。控制一个 pool 最多有多少个状态为 idle (空闲的) 的 jedis 实例。

minIdle

最小空闲连接数,默认 0 个。


maxWaitMillis

表示当 borrow (引入) 一个 jedis 实例时,最大的等待时间,如果超过等待时间,则直接抛出 JedisConnectionException。

testOnBorrow

在 borrow 一个 jedis 实例时,是否提前检查连接可用性(ping ())操作;如果为 true,则得到的 jedis 实例均是可用的。默认为 false。

blockWhenExhausted

连接耗尽时是否阻塞,false 报异常,ture 阻塞直到超时,默认 true。

testOnReturn

在 return 一个 jedis 实例时,是否检查连接可用性(ping ()),默认为 false。


testWhileIdle

如果为 true,表示有一个 idle object evitor 线程对 idle object 进行扫描,如果 validate 失败,此 object 会被从 pool 中 drop 掉。

这一项只有在 timeBetweenEvictionRunsMillis 大于 0 时才有意义。

JedisPoolConfig 中默认设置为 true。


minEvictableIdleTimeMillis

表示一个对象至少停留在 idle 状态的最短时间,然后才能被 idle object evitor 扫描并驱逐。

这一项只有在 timeBetweenEvictionRunsMillis 大于 0 时才有意义。

JedisPoolConfig 中默认设置为 60000。


timeBetweenEvictionRunsMillis

表示 idle object evitor 两次扫描之间要 sleep 的毫秒数.

JedisPoolConfig 中默认设置为 30000。


NumTestsPerEvictionRun

表示 idle object evitor 每次扫描的最多的对象数。

JedisPoolConfig 中默认设置为 - 1。

1
2
3
4
5
6
7
public JedisPoolConfig() {
// defaults to make your life with connection pool easier :)
setTestWhileIdle(true);
setMinEvictableIdleTimeMillis(60000);
setTimeBetweenEvictionRunsMillis(30000);
setNumTestsPerEvictionRun(-1);
}1234567

softMinEvictableIdleTimeMillis

在 minEvictableIdleTimeMillis 基础上,加入了至少 minIdle 个对象已经在 pool 里面了。

如果为 - 1,evitor 不会根据 idle time 驱逐任何对象。

如果 minEvictableIdleTimeMillis>0,则此项设置无意义,且只有在 timeBetweenEvictionRunsMillis 大于 0 时才有意义。


lifo

borrowObject 返回对象时,是采用 DEFAULT_LIFO(last in first out,即类似 cache 的最频繁使用队列),如果为 False,则表示 FIFO 队列。