Jedis的配置和优化

Jedis客户端连接池配置

参数名:maxTotal

含义:资源池最大连接数 【默认值:8】

使用建议:需要考虑以下几点

1.业务希望的Redis并发量

2.客户端执行命令时间

3.Redis资源:例如应用个数(客户端)* maxTotal 不能超过Redis服务端的最大连接数(config get maxclients)

4.资源开销:例如虽然希望控制空闲连接,但是不希望因为连接池的频繁释放创建连接造成不必要的开销。

举例:

命令平均执行时间0.1ms = 0.001s

业务需要50000 QPS

maxTotal理论值 = 0.001 * 50000 = 50个。实际值要偏大一些。

参数名:maxIdle

含义:资源池允许最大的空闲连接数 【默认值:8】

使用建议:建议跟maxTotal设置的值一样,这样可以减少创建新连接的开销

参数名:minIdle

含义:资源池确保最少空闲连接数 【默认值:0】

使用建议:建议第一次开启的时候预热(初始化一个值),减少第一次启动后的新连接开销

参数名:jmxEnabled

含义:是否开启jmx监控,可用于监控资源使用状态 【默认值:true】

使用建议:开启

参数名:blockWhenExhausted

含义:当资源池用尽后,调用者是否要等待。只有当为true时,配置的maxWaitMillis参数才会生效 【默认值:true】

使用建议:建议先使用默认值,但这个也要看情况,如果并发量大,可以直接设置false,即每次请求资源时,如果连接资源不够,马上new个新的

参数名:maxWaitMillis

含义:当资源池连接用尽后,调用者最大等待时间(单位为毫秒) 【默认-1,表示永不超时】

使用建议:不建议使用默认值,再高并发环境下,获取资源不能hand在一个没有超时时间的地方,具体设置根据实际场景 如设置1000即为等待1秒。

参数名:testOnBorrow、testOnReturn

含义:这两个参数是说,客户端向连接池借用或归还时,是否会在内部进行有效性检测(ping),无效的资源将被移除 【默认值:false】

使用建议:建议false,在高并发场景下,因为这样无形给每次增加了两次ping操作,对QPS有影响,如果不是高并发环境,可以考虑开启,或者自己来检测。

连接池常见问题

无法从连接池中获取连接(超时)

连接池中资源耗尽(最大连接maxTotal和最大空闲连接maxIdle设置不等)

解决思路:

1.慢查询阻塞:池子连接都被hang住。

2.资源参数不合理:例如QPS高,池子小。

3.连接泄露(没有close()):也就是没有归还连接,可以用client list、netstat观察连接的一个增长情况,最重要的是try...catch...finally

转载于:https://my.oschina.net/u/3371837/blog/1785545

<think>首先,用户的问题是:“我想配置Spring Boot中Jedis的使用 请问如何在Spring Boot项目中配置使用Jedis”。根据系统指令,我需要使用中文回答,结构清晰,逐步解决问题,并保证真实可靠。 参考了提供的引用: - 引用[1]:讲述了SpringBoot中Jedis配置,包括依赖导入准备工作。 - 引用[2]:讨论了非Spring Boot项目中Jedis配置。 - 引用[3]:详细说明了Spring Boot整合Redis使用Jedis的步骤,包括依赖添加配置文件。 用户的问题明确是关于Spring Boot的,所以我应该主要参考引用[1][3],因为它们更相关。 关键点: - 使用Jedis作为Redis客户端。 - 在Spring Boot项目中配置。 - 包括依赖添加、配置文件基本使用。 结构回答: 1. **准备工作**:确保开发环境Redis安装。 2. **添加依赖**:在pom.xml中添加必要的依赖。 3. **配置Redis属性**:在application.properties或application.yml中配置Redis连接信息。 4. **创建Jedis连接池**:配置JedisPool。 5. **使用Jedis**:在代码中注入JedisPool并使用Jedis实例进行操作。 6. **示例代码**:提供简单的代码示例。 7. **相关问题**:生成相关问题。 确保LaTeX格式: - 行内数学表达式用$...$,但我这里可能没有数学表达式,所以不需要。 - 独立公式用$$...$$,但这里也不涉及数学公式。 - 使用中文回答。 添加引用标识:在回答中引用相关内容时,在段落末尾自然地添加引用标识,如[^1]。 生成相关问题:在最后添加相关问题部分。 完整回答结构: - 开头简要介绍。 - 逐步配置步骤。 - 代码示例(使用代码块)。 - 相关问题。 相关问题示例: 1. 如何配置Redis连接池参数? 2. JedisLettuce有什么区别? 3. 如何在Spring Boot中测试Jedis连接? 现在,构建回答:</think>### 如何在Spring Boot项目中配置使用Jedis Jedis 是一个基于 Java 的 Redis 客户端库,用于高效操作 Redis 数据库。在 Spring Boot 中配置使用 Jedis 可以简化 Redis 集成,以下是详细步骤(基于 Spring Boot 2.x 及以上版本)。整个过程分为准备工作、依赖添加、配置、代码实现三部分。 --- #### 1. **准备工作** 在开始前,确保满足以下条件: - **开发环境**:Java 1.8 或更高版本,Spring Boot 2.1.0.RELEASE 或更新版本(推荐使用 Spring Boot 3.x)。 - **Redis 安装**:已在本地或远程服务器安装并运行 Redis 服务。默认端口为 6379,可通过命令 `redis-server --version` 验证安装[^1]。 - **项目创建**:使用 Spring Initializr 创建 Spring Boot 项目(选择 Maven 或 Gradle)。 --- #### 2. **添加依赖** 在项目的 `pom.xml` 文件中添加 Jedis Spring Data Redis 依赖。Jedis客户端库,而 Spring Data Redis 提供了与 Spring 生态的集成支持: ```xml <dependencies> <!-- Spring Data Redis 集成 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <!-- Jedis 客户端库 --> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>4.4.3</version> <!-- 推荐使用最新稳定版 --> </dependency> </dependencies> ``` - **说明**:`spring-boot-starter-data-redis` 默认可能使用 Lettuce 客户端,但添加 `jedis` 依赖后,Spring Boot 会自动切换为 Jedis(通过排除 Lettuce 依赖)[^1][^3]。 --- #### 3. **配置 Redis 连接** 在 `application.properties` 或 `application.yml` 文件中配置 Redis 连接信息。以下是 `application.properties` 示例: ```properties # Redis 服务器地址端口 spring.redis.host=localhost spring.redis.port=6379 # 连接配置(可选,优化性能) spring.redis.jedis.pool.max-active=10 spring.redis.jedis.pool.max-idle=5 spring.redis.jedis.pool.min-idle=1 spring.redis.jedis.pool.max-wait=2000ms # 最大等待时间 ``` - **关键点**: - `spring.redis.host` `spring.redis.port` 是必需项,指向 Redis 服务器。 - 连接池参数(如 `max-active`)可防止资源耗尽,提升并发性能[^1][^3]。 - 如果 Redis 需要密码,添加 `spring.redis.password=your_password`。 --- #### 4. **代码实现:使用 Jedis 操作 Redis** Spring Boot 自动配置 Jedis 连接池(`JedisConnectionFactory`),可直接注入使用。以下是一个简单的服务类示例: ```java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.stereotype.Service; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; @Service public class RedisService { // 注入 JedisPool(Spring Boot 自动创建) @Autowired private JedisPool jedisPool; // 示例1:设置获取字符串值 public void setKey(String key, String value) { try (Jedis jedis = jedisPool.getResource()) { // 自动管理资源 jedis.set(key, value); } // try-with-resources 确保关闭连接 } public String getKey(String key) { try (Jedis jedis = jedisPool.getResource()) { return jedis.get(key); } } // 示例2:使用 Spring 的 StringRedisTemplate(更简化) @Autowired private StringRedisTemplate stringRedisTemplate; public void setWithTemplate(String key, String value) { stringRedisTemplate.opsForValue().set(key, value); } public String getWithTemplate(String key) { return stringRedisTemplate.opsForValue().get(key); } } ``` - **说明**: - **直接使用 Jedis**:通过 `JedisPool` 获取连接,执行 Redis 命令(如 `set`, `get`)。`try-with-resources` 确保连接自动关闭,避免泄漏。 - **使用 StringRedisTemplate**:Spring 提供的模板类封装了 Jedis 操作,更简洁且线程安全[^1][^3]。 - **测试**:在 Controller 中调用 `RedisService` 方法,启动应用后访问 Redis 验证数据。 --- #### 5. **验证常见问题** - **启动应用**:运行 Spring Boot 主类,检查日志中是否有 Redis 连接成功消息(如 `JedisPool 初始化完成`)。 - **错误处理**: - 如果连接失败,检查 Redis 服务是否运行,或配置文件中 `host`/`port` 是否正确。 - 依赖冲突:确保无其他 Redis 客户端(如 Lettuce)干扰,可在 `pom.xml` 中排除 Lettuce: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> <exclusions> <exclusion> <groupId>io.lettuce</groupId> <artifactId>lettuce-core</artifactId> </exclusion> </exclusions> </dependency> ``` - **性能优化**:调整连接池参数(如 `max-active`)以适应高并发场景[^3]。 通过以上步骤,您可以在 Spring Boot 中高效配置使用 Jedis。实际项目中,建议结合 Spring Cache 注解(如 `@Cacheable`)简化缓存逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值