spring boot 操作redis的首次连接慢的问题

2022-10-31  本文已影响0人  天草二十六_简村人

一、问题背景

注意,左侧的接口响应时间是指平均响应时间。(这一点很多大佬都吐槽过,不知道为什么他们死活不改)

image.png 响应时间和调用次数.png

原因是:在调用调用量大的时候, 耗时为4.2秒的请求会被淹没,在左侧接口列表中发现不了耗时慢的。

查看最近6小时,耗时慢的接口调用都被淹没了吧.png

二、发现问题

该服务在重启后,第一次调用是在2022-10-28 13:48:43,耗时4.2秒;第二次调用是在2022-10-28 13:48:45,耗时降低至576毫秒。

如果方法栈不足以定位代码问题,请继续查看线程剖析结果.png 耗时4.2秒.png 耗时576毫秒.png

io.lettuce.core.RedisClient.connect( ):207 [1400ms]
可以看到,程序和redis的连接耗时1400毫秒。 在第二次及以后就不用再进行redis连接了,所以接口的耗时一下子就降下去了。

三、总结

我们都知道,程序在和数据库建立连接的时候,是最耗时的。希望本文能够给你一个直接的耗时慢的体验现场。

四、附录

# 连接超时时间
spring.redis.timeout=5000
# 连接池最大连接数(使用负值表示没有限制)
spring.redis.lettuce.pool.max-active=3
# 连接池中的最小空闲连接
spring.redis.lettuce.pool.min-idle=2
# 连接池中的最大空闲连接
spring.redis.lettuce.pool.max-idle=3
# 连接池最大阻塞等待时间(使用负值表示没有限制)
spring.redis.lettuce.pool.max-wait=-1
#在关闭客户端连接之前等待任务处理完成的最长时间,在这之后,无论任务是否执行完成,都会被执行器关闭,默认100ms
spring.redis.lettuce.shutdown-timeout=100
# 下面是无效的配置
  redis:
    jedis:
      pool:
        max-active: 1000  # 连接池最大连接数(使用负值表示没有限制)
        max-wait: -1ms      # 连接池最大阻塞等待时间(使用负值表示没有限制)
        max-idle: 10      # 连接池中的最大空闲连接
        min-idle: 5       # 连接池中的最小空闲连接
上一篇下一篇

猜你喜欢

热点阅读