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

相关推荐
用户3126874877204 小时前
分页插件到底怎么拦截 SQL?MyBatis-Plus 插件机制原理一次讲透
mybatis
马优晨7 小时前
pring Boot + MyBatis + Redis 项目分层架构详解 —— 各层职责、关系与工作流程
架构·mybatis·spring项目分层架构详解·spring项目架构详解·spring各层职责·spring关系与工作流程
Listen·Rain10 小时前
用AI开发出一个AI
java·人工智能·spring boot·tomcat·intellij-idea·mybatis·visual studio
马优晨14 小时前
Spring Boot + MyBatis + Redis 整合实战 —— 项目源码深度解析
spring boot·redis·mybatis·mybatis + redis·redis实战·spring实战·mybatis实战
阿里云云原生1 天前
AI Agent 上线容易稳定难?阿里云 AgentLoop 推出“经验自进化”闭环治理方案
人工智能·阿里云·mybatis·agentscope
CodeStats2 天前
【Spring事务】Spring事务注解 @Transactional 完整体系:从 MySQL 隔离级别到 MyBatis 原理详解
java·spring·mybatis·事务·transactional
Nuanyt2 天前
SSM 学习记录 第二部分 Spring整合Mybatis&Junit AOP核心概念 Spring事务管理 SpringMVC 请求与响应 Rest风格
java·spring·junit·mybatis·restful
米码收割机2 天前
【SSM】Spring MVC_MyBatis SSM商城系统(源码+论文)【独一无二】
spring·mvc·mybatis
Devin~Y3 天前
互联网大厂 Java 面试实录:Spring Boot、MyBatis、Redis、Kafka、Spring Security、RAG 与 MCP 全链路问答
java·redis·kafka·mybatis·spring security·spring mvc·sprint boot
VX_bysjlw9854 天前
基于微信小程序的宠物用品商城系统-后端74346-计算机毕设原创(免费领源码+带部署教程)
java·redis·微信小程序·eclipse·mybatis·idea·微信开发者工具