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 小时前
MyBatis缓存机制
java·缓存·mybatis
段ヤシ.8 小时前
回顾Java知识点,面试题汇总Day12(持续更新)
java·mybatis
XS03010612 小时前
MyBatis动态SQL
数据库·sql·mybatis
MandalaO_O12 小时前
MyBatis 与 MySQL 执行流程
数据库·mysql·mybatis
今天也是元气满满的一天呢18 小时前
7篇文章学会MyBatis——第一篇:部署及基本概念
mybatis
Simon5231418 小时前
mybatis执行流程、关联映射、注解开发
java·开发语言·mybatis
happymaker062621 小时前
SpringBoot学习日记——DAY05(SpringBoot整合MyBatis-plus实现增删改查)
spring boot·学习·mybatis
北风toto2 天前
通过Entity 创建数据库中的表,目前只支持mysql,A.CTable使用mybatis/mybatis-plus自动创建表
数据库·mysql·mybatis
No8g攻城狮2 天前
【异常解决】SpringBoot3 + 人大金仓 V8+MyBatis-Plus 获取新增自增 ID
数据库·mybatis·人大金仓·国产信创
ElevenS_it1883 天前
Redis监控实战:内存使用+命中率+连接数三类核心指标接入Zabbix+分级告警完整配置方案
运维·网络·redis·mybatis·zabbix