当前位置: 首页 > news >正文

【Redis】Jedis与Jedis连接池

目录

1. Jedis 单实例连接

2. Jedis 连接池(JedisPool)

3. JedisPool 与 Jedis 的区别

4. JedisPool 线程安全

6. 使用 JedisPool 的注意事项


1. Jedis 单实例连接

在最简单的用法中,Jedis 提供了直接与 Redis 服务器连接的方式。这适合于单线程应用或者当你不需要频繁地进行 Redis 操作时。

示例代码:

package com.heima.test;
import com.heima.jedis.util.JedisConnectionFactory;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import redis.clients.jedis.Jedis;import java.util.Map;public class JedisTest {private Jedis jedis;@Beforepublic void setUp() throws Exception {//1.建立连接jedis = new Jedis("192.168.30.134",6379);//2.设置密码jedis.auth("123321");//3.选择库jedis.select(0);}@Testpublic void testString() {//存入数据String result = jedis.set("name","虎哥");System.out.println("result = "+result);//获取数据String name = jedis.get("name");System.out.println("name = "+name);}@Testpublic void testHash() {//插入hash数据jedis.hset("user:1","name","Jack");jedis.hset("user:1","age","21");//获取数据Map<String, String> map = jedis.hgetAll("user:1");System.out.println(map);}@Afterpublic void tearDown() throws Exception {if(jedis != null){jedis.close();}}
}

存在问题:

  • 性能问题:每次操作 Redis 都会建立和销毁连接,导致性能开销较大。
  • 线程安全问题:在多线程环境中,如果每个线程都创建一个 Jedis 实例,它们会共享底层的连接资源,可能会导致并发问题。

2. Jedis 连接池(JedisPool

为了提高性能并解决连接管理的问题,Jedis 提供了 连接池JedisPool 用于管理 Redis 连接,并允许多个线程共享连接,而无需每次都创建新的连接。Jedis 连接池通常在高并发环境下使用。

使用 JedisPool 的好处:

  • 连接复用:JedisPool 允许你从池中获取连接并在操作完成后返回池中,而不需要每次都建立新连接。
  • 性能提升:通过复用连接,避免了频繁创建和销毁连接的开销。
  • 线程安全:连接池本身是线程安全的,可以在多个线程之间共享连接。

示例代码:

package com.heima.jedis.util;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.JedisPool;public class JedisConnectionFactory {private static final JedisPool jedisPool;static {//配置连接池JedisPoolConfig poolConfig = new JedisPoolConfig();//设置最大连接数poolConfig.setMaxTotal(8);//设置最大空闲连接数poolConfig.setMaxIdle(8);//设置最小空闲连接数poolConfig.setMinIdle(0);//设置最长等待时间,mspoolConfig.setMaxWaitMillis(1000);//创建连接池对象jedisPool = new JedisPool(poolConfig,"192.168.30.134",6379,1000,"123321");}public static Jedis getJedis(){return jedisPool.getResource();}
}
package com.heima.test;
import com.heima.jedis.util.JedisConnectionFactory;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import redis.clients.jedis.Jedis;import java.util.Map;public class JedisTest {private Jedis jedis;@Beforepublic void setUp() throws Exception {//1.建立连接
//        jedis = new Jedis("192.168.30.134",6379);jedis = JedisConnectionFactory.getJedis();//2.设置密码jedis.auth("123321");//3.选择库jedis.select(0);}@Testpublic void testString() {//存入数据String result = jedis.set("name","虎哥");System.out.println("result = "+result);//获取数据String name = jedis.get("name");System.out.println("name = "+name);}@Testpublic void testHash() {//插入hash数据jedis.hset("user:1","name","Jack");jedis.hset("user:1","age","21");//获取数据Map<String, String> map = jedis.hgetAll("user:1");System.out.println(map);}@Afterpublic void tearDown() throws Exception {if(jedis != null){jedis.close();}}
}

3. JedisPool 与 Jedis 的区别

  • Jedis:单个 Redis 连接,通常适用于简单或低并发的场景。每次操作 Redis 都需要建立一个新的连接,开销较大,尤其是在高并发环境中。
  • JedisPool:一个 Redis 连接池,适用于高并发场景。连接池中的连接可以被多个线程共享,减少了连接的创建和销毁的开销,同时连接池可以有效管理连接资源。

4. JedisPool 线程安全

  • 线程安全JedisPool 本身是线程安全的,这意味着你可以在多个线程中共享同一个连接池。每个线程通过 getResource() 获取一个连接,操作完成后,使用 jedis.close() 将连接归还池中。
  • 连接复用:多个线程共享同一个连接池,避免了频繁创建和销毁连接的性能开销。

6. 使用 JedisPool 的注意事项

  • 连接池的大小:连接池的大小应根据系统负载和 Redis 服务器的并发处理能力进行调整。可以通过配置 setMaxTotal 来控制连接池的大小。
  • 关闭连接池:在应用程序关闭时,要调用 jedisPool.close() 来释放资源,避免内存泄漏。
  • 性能调优:合理配置连接池的空闲连接数、最大连接数、最大等待时间等参数,以适应具体的业务需求。

相关文章:

  • 4月谷歌新政 | Google Play今年对“数据安全”的管控将全面升级!
  • 阴阳龙 第31次CCF-CSP计算机软件能力认证
  • opencv 对图片的操作
  • .NET 8 升级 .NET Upgrade Assistant
  • 逻辑回归(Logistic Regression)
  • IDEA/WebStorm中Git操作缓慢的解决方案
  • UDP协议详解
  • 学习笔记(C++篇)--- Day 3
  • 今日行情明日机会——20250421
  • 数据结构第六章(五)-拓扑排序、关键路径
  • JavaScript数据结构与算法实战: 探秘Leetcode经典题目
  • Android 中实现 GIF 图片动画
  • DeepSeek R1模型微调怎么做?从入门到实战
  • CFIS-YOLO:面向边缘设备的木材缺陷检测轻量级网络解析
  • 经典文献阅读之--Kinematic-ICP(动态优化激光雷达与轮式里程计融合)
  • 从C语言变量看内存
  • LX3-初识是单片机
  • java集合框架day1————集合体系介绍
  • mongodb 存储数据的具体实现方式
  • 基于SpringBoot的篮球联盟管理系统(源码+数据库+万字文档)
  • 陕西一批干部任职公示:西安市未央、雁塔、阎良区委书记拟调整
  • 美国土安全部长餐厅遇窃,重要证件被盗走
  • 马上评丨敦煌网美国爆火,“市场之腿”总能跨越关税壁垒
  • 习近平圆满结束对柬埔寨国事访问
  • 习近平圆满结束对马来西亚的国事访问
  • 外交部发言人就美方称中国目前面临最高达245%关税答记者问