springBoot版本是2.x 所以呢redis客户端是lettuce,而不是jedis;
lettuce支持异步,而且是线程安全的。
jedis是同步的,线程不安全需要每个线程一个Jedis实例,所以一般通过连接池来使用Jedis。
我这里用的是lettuce连接池的配置还是报错了呢:
spring: redis: host: 82.156.175.242 port: 6380 password: # 连接超时时间 客户端空闲 N 秒后关闭连接(0 表示禁用) timeout: 10s lettuce: pool: # 连接池中的最小空闲连接 min-idle: 0 # 连接池中的最大空闲连接 max-idle: 8 # 连接池的最大数据库连接数 max-active: 8 # #连接池最大阻塞等待时间(使用负值表示没有限制) max-wait: -1ms
new BING
- 检查你的Redis服务器是否设置了timeout参数,如果设置了,可能会导致长时间无活动的连接被断开1。你可以通过config get timeout命令查看当前的timeout值,如果不为0,可以通过config set timeout 0命令将其设置为0,表示不主动断开连接2。
- 检查你的若依微服务框架是否使用了合适的Redis客户端和连接池配置,例如spring-boot-starter-data-redis提供了两种客户端实现:Jedis和Lettuce3。Jedis是基于阻塞I/O的同步客户端,每个连接都是独占的;Lettuce是基于非阻塞I/O的异步客户端,支持多路复用和共享连接。如果你使用了Jedis作为客户端,并且没有配置足够大的连接池大小和空闲检测机制,可能会导致连接资源耗尽或被服务器断开4。你可以考虑使用Lettuce作为客户端,并且在配置文件中添加以下内容4:
spring:
redis:
lettuce:
pool:
max-active: 8 #最大活跃连接数
max-idle: 8 #最大空闲连接数
min-idle: 0 #最小空闲连接数
max-wait: -1ms #最大等待时间
shutdown-timeout: 100ms #关闭超时时间
参考: