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

相关推荐
计算机学姐12 小时前
基于微信小程序的高校班务管理系统【2026最新】
java·vue.js·spring boot·mysql·微信小程序·小程序·mybatis
梁辰兴16 小时前
企业培训笔记:外卖平台后端--套餐管理模块--新建套餐信息
笔记·vue·mybatis·springboot·外卖管理系统
信仰_27399324321 小时前
Mybatis-Spring重要组件介绍
java·spring·mybatis
通往曙光的路上1 天前
接口练习哈哈
mybatis
通往曙光的路上1 天前
day16_接口加强练习
mybatis
提笔了无痕2 天前
什么是Redis的缓存问题,以及如何解决
数据库·redis·后端·缓存·mybatis
vx Biye_Design2 天前
servlet宠物医院管理系统-计算机毕业设计源码77418
java·vue.js·spring·servlet·eclipse·mybatis
梁辰兴2 天前
企业培训笔记:外卖平台后端--套餐管理模块--回显套餐信息
笔记·vue·mybatis·springboot·外卖管理系统
kkkkk0211063 天前
微服务学习笔记(黑马商城)
java·spring boot·spring·spring cloud·sentinel·mybatis·java-rabbitmq