JedisConnectionFactory 连接池工厂类

java 复制代码
public class JedisConnectionFactory{
    private static JedisPool jedisPool;
    static {
        //配置连接池
        JedisPoolConfig poolConfig=new JedisPoolConfig();
        poolConfig.setMaxTotal(8);        // 连接池最大连接数:8个
        poolConfig.setMaxIdle(8);         // 最大空闲连接数:8个  
        poolConfig.setMaxIdle(0);         // 最小空闲连接数:0个
        poolConfig.setMaxWaitMillis(1000); // 获取连接最大等待时间:1秒
        //创建连接池对象
        jedisPool=new JedisPool(poolConfig,"192.168.75.150",6379,1000);

}
    public static Jedis getJedisPool(){
    return jedisPool.getResource();
}
}

功能概述

这是一个Redis连接池的工厂类,用于管理Redis连接,避免频繁创建和销毁连接。

核心组件

组件 作用 类比
JedisPool Redis连接池 像停车场,预先准备多个车位(连接)
JedisPoolConfig 连接池配置 停车场的规则(最多几辆车、空闲几辆等)
getJedisPool() 获取连接方法 取车钥匙,用完要还回去

配置参数解析

java 复制代码
poolConfig.setMaxTotal(8);        // 连接池最大连接数:8个
poolConfig.setMaxIdle(8);         // 最大空闲连接数:8个  
poolConfig.setMinIdle(0);         // 最小空闲连接数:0个
poolConfig.setMaxWaitMillis(1000); // 获取连接最大等待时间:1秒

使用流程

  1. 初始化:类加载时创建连接池
  1. 获取连接:调用 getJedisPool() 从池中取连接
  1. 使用连接:执行Redis操作
  1. 归还连接:调用 jedis.close() 归还到池中

优势对比

方式 直接连接 连接池
性能 每次创建新连接,慢 复用现有连接,快
资源消耗 高 低
并发处理 差 好

注意事项

  • 使用完连接后必须调用 close() 归还连接
  • 连接池会自动管理连接的创建和销毁
  • 适合高并发场景,避免连接资源耗尽

最大空闲连接数 (MaxIdle)

生活类比:

就像停车场规定最多只能有8个空车位,超过8个空车位就要关闭一些,避免浪费空间。

专业解释:

连接池中最多保留8个空闲连接,超过这个数量会自动关闭多余的连接。

最小空闲连接数 (MinIdle)

生活类比:

就像停车场至少要保证有0个空车位随时可用,如果低于这个数量就要提前准备车位。

专业解释:

连接池中至少保持0个空闲连接,低于这个数量会自动创建新连接。

实际运行效果

场景 最大空闲=8, 最小空闲=0 说明
高并发时 最多8个连接空闲等待 避免资源浪费
低并发时 最少0个连接保持 可以完全关闭空闲连接
连接不够时 自动创建新连接 保证业务需求

配置建议

java 复制代码
// 保守配置(适合小项目)
poolConfig.setMaxIdle(5);    // 最多5个空闲
poolConfig.setMinIdle(2);    // 最少2个空闲

// 激进配置(适合大项目)  
poolConfig.setMaxIdle(20);   // 最多20个空闲
poolConfig.setMinIdle(5);    // 最少5个空闲

static 的作用

生活类比:

就像公司里的公共设施(比如打印机、会议室),所有员工都可以使用,不需要每个人都买一台。

专业解释:

static 表示静态的,属于类而不是实例,所有对象共享同一个资源。

在你的代码中的具体作用

1. static JedisPool jedisPool

java 复制代码
private static JedisPool jedisPool
  • 作用:整个类共享一个连接池(哪个类?看补充说明)
  • 好处:避免重复创建连接池,节省资源

2. static 代码块

java 复制代码
static {
    JedisPoolConfig poolConfig=new JedisPoolConfig();
    //配置代码.....
    jedisPool=new JedisPoolConfig(poolConfig,"192.168.75.150",6379,1000);
}
  • 作用:类加载时自动执行,初始化连接池
  • 好处:程序启动时就准备好连接池,无需手动初始化

3. static getJedisPool()

java 复制代码
public static Jedis getJedisPool(){
    return jedisPool.getResource();
}
  • 作用:可以直接通过类名调用,无需创建对象
  • 好处:使用方便,JedisConnectionFactory.getJedisPool()

对比:有static vs 无static

方式 有static 无static
调用方式 JedisConnectionFactory.getJedisPool() new JedisConnectionFactory().getJedisPool()
资源消耗 一个连接池 每个对象一个连接池
内存使用 低 高
适用场景 单例模式 多实例模式

为什么用static?

  1. 连接池只需要一个:整个应用共享一个Redis连接池
  1. 避免重复创建:节省内存和初始化时间
  1. 使用方便:直接通过类名调用,无需new对象
  1. 线程安全:JedisPool本身是线程安全的

这就是典型的单例模式应用场景!

补充说明

static 整个类共享一个连接池 说的是哪个类 ?

指的是 JedisConnectionFactory 这个类!

具体说明

java 复制代码
public class JedisConnectionFactory {
    private static JedisPool jedisPool;  // 这个连接池属于整个类
}

"整个类共享一个连接池" 的含义

生活类比:

就像公司里只有一台打印机,所有员工都共用这一台,而不是每个员工都有自己的打印机。

专业解释:

  • JedisConnectionFactory 类中的所有方法都使用同一个 jedisPool 对象
  • 不管调用多少次 getJedisPool() 方法,都是从同一个连接池中获取连接

实际使用场景

java 复制代码
//场景1:在A类中使用
public class UserService{
    public void saveUser(){
    Jedis jedis=JedisConnectionFactory.getJedisPool();//从同一个连接池获取
    //使用jedis
}
}
//场景2:在B类中使用
public class OrderService{
    public void saveOrder(){
    Jedis jedis=JedisConnectionFactory.getJedisPool();//还是在同一个连接池获取
    //使用jedis...   
}
}

为什么这样设计?

好处 说明
资源节约 整个应用只需要一个连接池,不重复创建
统一管理 所有Redis操作都通过同一个连接池
配置一致 所有地方使用相同的连接池配置

所以"整个类共享一个连接池"指的是 JedisConnectionFactory 类内部的 jedisPool 对象!

相关推荐
VimorphTech2 小时前
文本已经改了,旧的音频生成结果还能回写吗?
java·数据库·mybatis
麻瓜code7 小时前
双写一致性:为什么是“删缓存“,而不是“改缓存“
java·缓存·mybatis
郭小李1 天前
mybatis 动态 sql
java·sql·mybatis
知守观1 天前
技术考古:iBATIS 2.3.4 时代的持久层,是如何用 Map 玩转 307 个存储过程的?
java·后端·mybatis
captain3761 天前
MyBatis Plus(1)
java·服务器·mybatis
代码不停1 天前
MyBatis进阶
spring boot·mybatis
captain3762 天前
MyBatis(入门5)其他查询操作
java·数据库·spring boot·mybatis
captain3762 天前
MyBatis(进阶1)
mybatis
郭小李2 天前
mybatis的 Mapper.xml语法
xml·java·mybatis
m0_639906942 天前
MyBatis 实现分页查询|逻辑分页、物理分页、PageHelper 原理
mybatis