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 对象!

相关推荐
计算机学姐6 小时前
基于SpringBoot的校园二手书籍交易系统【个性化推荐+数据可视化统计+我买到的+我卖出的】
vue.js·spring boot·后端·mysql·信息可视化·intellij-idea·mybatis
zjneymar6 小时前
Mybatis的动态sql
java·sql·mybatis
稻草猫.8 小时前
MyBatis-Plus高效开发全攻略
java·数据库·后端·spring·java-ee·mybatis·mybatis-plus
计算机学姐8 小时前
基于SpringBoot的网吧管理系统
java·spring boot·后端·spring·tomcat·intellij-idea·mybatis
弹简特8 小时前
【JavaEE20-后端部分】 MyBatis 入门第四篇:多表查询、#{}与${}详解、数据库连接池
数据库·mybatis
哆啦A梦158817 小时前
Springboot整合MyBatis实现数据库操作
数据库·spring boot·mybatis
弹简特1 天前
【JavaEE19-后端部分】 MyBatis 入门第三篇:使用XML完成增删改查
xml·mybatis
小江的记录本1 天前
【VO、DTO、Entity】VO、DTO、Entity三大核心数据对象全解析(附核心对比表 + 代码示例)
java·数据库·spring boot·spring·架构·mybatis·数据库架构
计算机学姐1 天前
基于SpringBoot的流浪动物救助收养系统
vue.js·spring boot·后端·mysql·java-ee·intellij-idea·mybatis
计算机学姐1 天前
基于SpringBoot的蛋糕烘焙销售服务系统
java·spring boot·后端·spring·tomcat·intellij-idea·mybatis