springboot配置redis lettuce连接池,以及连接池参数解释
文章目录
- 前置
- 基本配置
- 参数解释
前置
- java
- springboot
- redis
- lettuce 连接池
有很多连接池,比如 jedis,lettuce,redission,springboot 默认使用 lettuce 连接池
lettuce 连接池的特点是:一个 lettuce 连接可以被多个线程复用,不需要频繁创建连接,其实是通过 Netty 实现了异步非阻塞,单连接即可支持高并发
虽然多个线程可以共享一个 lettuce 的一个连接,但是 redis 它本身是串行执行命令的
默认情况下(shareNativeConnection = true),Lettuce 的连接池(如 GenericObjectPool)实际上 不会生效,因为所有线程都共用一个连接
如果你希望启用连接池(例如为每个线程分配独立连接),需要显式设置 shareNativeConnection = false,此时连接池参数(如 max-active、max-idle)才会起作用
如果默认按照 shareNativeConnection = true,Lettuce 会始终使用一个物理连接,所有线程共享这个连接,不会生成第二个新的连接,连接池参数不生效,官方推荐默认值,因为已经适合了大多数场景,单个连接即可满足高并发需求,避免资源浪费
基本配置
依赖
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
application.yml
spring:redis:host: localhost # Redis 服务器地址port: 6379 # Redis 服务器端口,默认是 6379password: # Redis 密码(如果没有密码,可以省略)database: 0 # 使用的数据库索引,默认是 0timeout: 2000 # 连接超时时间(毫秒)lettuce:pool:max-active: 8 # 连接池最大连接数max-idle: 8 # 连接池最大空闲连接数min-idle: 0 # 连接池最小空闲连接数max-wait: -1ms # 连接池最大阻塞等待时间(-1 表示无限制)
参数解释
参数 | 说明 | 默认值 | 推荐值 |
---|---|---|---|
活跃连接和空闲连接: | |||
spring.redis.lettuce.pool.max-active | 最大活跃连接数(包括正在使用和空闲的连接) | 8 | 根据 CPU 核心数调整,通常为 CPU * 2 + 2 |
spring.redis.lettuce.pool.max-idle | 最大空闲连接数(避免频繁创建连接) | 8 | CPU * 2 |
spring.redis.lettuce.pool.min-idle | 最小空闲连接数(保持一定数量的空闲连接) | 0 | 0 或 1(低负载场景) |
spring.redis.lettuce.pool.time-between-eviction-runs | 空闲连接回收线程的运行间隔(单位:毫秒),清理的是超过 max-idle 或空闲时间过长的空闲连接,根据 min-evictable-idle-time,关闭长时间未使用的空闲连接,但连接数不低于 min-idle | 无 | 1000~60000(根据负载调整) |
spring.redis.lettuce.pool.min-evictable-idle-time | 最小驱逐空闲时间 | 未显式配置时默认为 300 秒 | 300秒 |
连接等待与超时: | |||
spring.redis.lettuce.pool.max-wait | 获取连接的最大等待时间(单位:毫秒,负值表示无限等待) | -1 | 5000~60000(避免线程长时间阻塞) |
spring.redis.lettuce.shutdown-timeout | 关闭连接池的超时时间(单位:毫秒) | 100 | 1000~5000(确保连接正常关闭) |