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 #关闭超时时间
config get timeout是一个Redis命令,用于获取Redis服务器的timeout配置值1。如果你在服务器中执行不了,可能有以下几种原因:
- 你没有正确地连接到Redis服务器,或者没有使用redis-cli工具。你可以使用redis-cli -h <host> -p <port>命令来连接到Redis服务器,然后再执行config get timeout命令。
- 你没有足够的权限来执行config get timeout命令。这个命令需要有admin角色的权限,如果你使用了密码或者ACL来保护Redis服务器,你需要先使用auth或者acl auth命令来验证身份。
- 你的Redis版本不支持config get timeout命令。这个命令是在Redis 2.0版本引入的,如果你的Redis版本低于2.0,你可能无法执行这个命令。你可以使用info server命令来查看Redis的版本号。
参考:
Redis command timed out 两种异常情况
NEW BING
-----------------------------官方issues-----------------------------