Jedis4.0配置JedisPoolConfig实现UnifiedJedis连接池
Jedis 4.0 基于连接池使用UnifiedJedis的实现方式
Jedis 4.0.0版本官方已经提供开箱即用的池化UnifiedJedis实现,不需要自行二次封装,直接使用JedisPooled类即可。该类本身继承自UnifiedJedis,底层复用和旧版一致的连接池逻辑,完全兼容你现有的JedisPoolConfig配置。
实现示例
你之前编写的连接池配置方法不需要做任何修改,可以直接复用:
// 全局初始化一次即可,生命周期和旧版JedisPool一致 final JedisPoolConfig poolConfig = buildPoolConfig(); // JedisPooled是UnifiedJedis的池化实现,构造参数和旧版JedisPool基本对齐 UnifiedJedis unifiedJedis = new JedisPooled(poolConfig, "localhost", 6379); // 直接调用UnifiedJedis的API操作Redis即可,连接的获取、归还会自动完成,不需要手动写try-with-resources取连接 unifiedJedis.set("demo_key", "demo_value"); String res = unifiedJedis.get("demo_key"); // 应用停机时关闭实例,销毁连接池 unifiedJedis.close();
原有池配置方法可完全保留,不需要调整任何参数:
private JedisPoolConfig buildPoolConfig() { final JedisPoolConfig poolConfig = new JedisPoolConfig(); poolConfig.setMaxTotal(128); poolConfig.setMaxIdle(128); poolConfig.setMinIdle(16); poolConfig.setTestOnBorrow(true); poolConfig.setTestOnReturn(true); poolConfig.setTestWhileIdle(true); poolConfig.setMinEvictableIdleTimeMillis(Duration.ofSeconds(60).toMillis()); poolConfig.setTimeBetweenEvictionRunsMillis(Duration.ofSeconds(30).toMillis()); poolConfig.setNumTestsPerEvictionRun(3); poolConfig.setBlockWhenExhausted(true); return poolConfig; }
注意事项
JedisPooled是线程安全的,和旧版JedisPool一样,在应用中全局初始化单例复用即可,不要每次执行Redis操作都新建实例。- 它会在每次调用Redis命令时自动从连接池借用连接、执行完成后自动归还,不需要像旧版
Jedis那样手动通过try (Jedis jedis = jedisPool.getResource())管理连接生命周期,代码更简洁。 - 如果需要配置连接超时、密码、指定数据库等参数,直接使用
JedisPooled的对应构造方法传参即可,参数规则和旧版JedisPool完全一致,示例如下:
int connectTimeout = 2000; int socketTimeout = 2000; String redisPassword = "your_redis_pwd"; int dbIndex = 0; UnifiedJedis unifiedJedis = new JedisPooled(poolConfig, "localhost", 6379, connectTimeout, socketTimeout, redisPassword, dbIndex);
- 如果使用哨兵、集群模式,Jedis 4.x也对应提供了
JedisSentineled、JedisCluster等UnifiedJedis的子类实现,都内置了连接池能力,用法和单机版基本一致。
内容的提问来源于stack exchange,提问作者Dattatray Satpute
相关产品推荐
相关产品推荐

