You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot集成Redis后重启首次请求耗时久问题咨询

Redis缓存重启后首次请求仍慢的原因分析

1. 缓存值反序列化耗时过高

Redis中存储的是二进制数据,应用重启后第一次读取缓存时,需要将这些二进制数据反序列化为业务代码中的Java对象。如果你的对象结构复杂、数据量较大,默认的JDK序列化/反序列化效率极低,这个过程会消耗大量时间,且该操作是在Spring缓存拦截器中完成的,不会进入被@Cacheable注解标记的业务方法,所以会出现日志显示未进入方法但请求耗时久的情况。

解决办法是替换为Jackson序列化,修改你的RedisCacheConfiguration:

public RedisCacheConfiguration cacheConfiguration() {
    return RedisCacheConfiguration.defaultCacheConfig()
            .entryTtl(Duration.ofMinutes(defaultTtl))
            .disableCachingNullValues()
            // 键用字符串序列化
            .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer()))
            // 值用Jackson JSON序列化
            .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer()));
}

2. Redis连接池懒加载导致的连接建立延迟

应用重启后,Redis连接池默认是懒加载模式——只有第一次请求时才会创建Redis连接,这个过程包含网络握手、权限认证等步骤,会产生额外耗时。即便Redis中已有缓存数据,连接建立的耗时叠加反序列化耗时,也会导致首次请求变慢。

可以通过配置连接池初始化参数,让应用启动时就创建一批连接:

spring:
  redis:
    lettuce:
      pool:
        initial-size: 5 # 启动时初始化的连接数
        max-active: 10
        max-idle: 10
        min-idle: 5

3. 缓存元数据首次加载开销

应用重启后,Spring缓存框架需要初始化缓存相关的元数据(比如缓存名称与Redis键前缀的映射、缓存管理器的内部状态),这些初始化操作会在第一次缓存访问时执行,也会带来一定的耗时,不过通常这个开销远小于前两者,但可能和其他因素叠加导致总耗时增加。

内容的提问来源于stack exchange,提问作者arohiman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 21:34:58