Jedis 连接池使用和参数配置

本文介绍使用Jedis连接池来优化Redis访问的方法。通过连接池管理连接,避免了频繁创建和销毁连接带来的性能损耗,并详细展示了如何配置Jedis连接池参数。

目录

一 为什么使用 Jedis 连接池

二 Jedis 使用连接池              


一 为什么使用 Jedis 连接池

       当使用 Jedis 直连 Redis 的时候,存在每次新建、关闭连接的开销,极端情况可能出现连接泄漏的问题。而使用连接池是说在一个池子里面对连接进行管理,当请求过来之后先从连接池里面借用连接,用完之后再次归还连接。连接池的连接可以得到复用,有利于降低系统开销,提升系统性能。

二 Jedis 使用连接池              

2.1 JedisPool 代码


@Configuration
public class JedisClient {

    private int minIdle = 1;
    private int maxIdle = 8;
    private int maxTotal = 256;
    private int maxWait = 50;

    @Bean
    public JedisPoolConfig jedisPoolConfig() {
        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
        jedisPoolConfig.setMinIdle(minIdle);
        jedisPoolConfig.setMaxIdle(maxIdle);
        jedisPoolConfig.setMaxTotal(maxTotal);
        jedisPoolConfig.setTestOnBorrow(true);
        jedisPoolConfig.setTestOnReturn(true);
        jedisPoolConfig.setBlockWhenExhausted(true);
        jedisPoolConfig.setMaxWaitMillis(maxWait);
        jedisPoolConfig.setFairness(false);
        return jedisPoolConfig;
    }

}

2.2 GenericObjectPoolConfig 参数配置说明

  • maxIdle :连接池中最大的空闲连接数,默认为 8。
  • minIdle:连接池中最少空闲连接数,默认为 0。
  • maxTotal:连接池中最大连接数,默认为 8。
  • maxWaitMillis:当连接池资源用尽后,调用者的最大等待时间(单位为毫秒),一般不建议使用默认值,该默认值为-1,表示永远不超时,一直等待。
  • testOnBorrow:向连接池借用连接时是否做连接有效性检测(ping),无效连接会被移除,每次借用多执行一次 ping 命令,默认值为 false。
  • testOnReturn:向连接池归还连接时是否做连接有效性检测(ping),无效连接会被移除,每次归还多执行一次 ping 命令,默认值为 false。
  • testOWhileIdle:向连接池借用连接时是否做连接空闲检测,空闲超时的连接会被移除,默认值为 false。
  • blockWhenExhausted:当连接池用尽后,调用者是否要等待,这个参数是和 maxWaitMillis 对应的,只有当此参数为 true 时,maxWaitMillis 才会生效。默认值为 true。
  • minEvictableIdleTimeMillis:连接的最小空闲时间,达到此值后空闲连接将被移除,默认值 30 分钟。
  • timeBetweenEvictionRunsMillis:空闲连接的检测周期(单位为毫秒),默认值为 -1,表示不做检测。
  • numTestsPerEvictionRun:做空闲连接检测时,每次的采样数,默认为 3。
### 含义 `blockWhenExhausted` 是 Jedis 连接池中的一个重要参数,该参数为布尔类型。当值为 `true` 时,表示当连接池中的连接都被占用(连接池耗尽)时,请求连接的操作会被阻塞,直到有连接被释放并归还到连接池;当值为 `false` 时,若连接池耗尽,请求连接的操作将立即返回 `null`。 ### 作用 此参数的主要作用是控制在连接池资源耗尽时的处理策略。设置为 `true` 可以保证请求连接的操作不会因为连接池暂时无可用连接而失败,而是等待有连接释放后继续获取,适用于对连接获取可靠性要求较高、不希望因暂时连接不足而放弃请求的场景;设置为 `false` 则可以让请求快速得到反馈,适用于需要快速判断是否有可用连接,不希望长时间等待的场景。 ### 使用方法 以下是一个使用 Jedis 连接池并设置 `blockWhenExhausted` 参数的示例代码: ```java import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; import redis.clients.jedis.JedisPoolConfig; public class JedisPoolExample { public static void main(String[] args) { // 创建连接池配置对象 JedisPoolConfig poolConfig = new JedisPoolConfig(); // 设置 blockWhenExhausted 参数为 true poolConfig.setBlockWhenExhausted(true); // 创建 Jedis 连接池 JedisPool jedisPool = new JedisPool(poolConfig, "localhost", 6379); // 从连接池获取连接 try (Jedis jedis = jedisPool.getResource()) { // 执行 Redis 操作 jedis.set("key", "value"); String value = jedis.get("key"); System.out.println("Value: " + value); } catch (Exception e) { e.printStackTrace(); } finally { // 关闭连接池 jedisPool.close(); } } } ``` 在上述代码中,通过 `JedisPoolConfig` 对象的 `setBlockWhenExhausted` 方法设置了 `blockWhenExhausted` 参数为 `true`,表示当连接池耗尽时请求连接的操作会被阻塞。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值