2-1 Java——Jedis

Jedis是什么

Jedis是基于Java语言的Redis客户端。

Maven依赖

  1. <dependency>
  2. <groupId>redis.clients</groupId>
  3. <artifactId>jedis</artifactId>
  4. <version>2.9.0</version>
  5. </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构造器的常用参数:

  • host:Redis节点所在机器的IP
  • port:Redis节点的端口
  • connectionTimeout:客户端连接超时时间
  • soTimeout:客户端读写超时时间

    Jedis连接池使用

    image.png
    image.png
        // 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?
比较难确定。举个例子:

  1. 命令平均执行时间1ms = 0.001s。
  2. 业务需要50000 QPS。
  3. maxTotal理论值 = 0.001 * 50000 = 50个。实际值要偏大一些。
  4. 另外需要考虑:应用数量 * maxTotal <= redis能够支撑的最大连接数(默认10000)。

如何确定maxIdle和minIdle?

  • 建设maxIdle = maxTotal
  • 建议应用启动时对连接池进行预热。