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

Spring Boot未连接Docker Redis容器,缓存生效但Redis无键问题排查

解决Spring Boot连接Docker Redis实例而非内置缓存的问题

核心问题分析

你的配置里spring.cache.type=simple是关键——这个配置指定Spring使用内置内存缓存,而非Redis,所以缓存能工作但Redis里看不到数据。另外,你的配置类缺少关联缓存注解与Redis的RedisCacheManager配置,导致缓存注解不会调用RedisTemplate操作外部Redis实例。

具体修复步骤

1. 修正缓存类型配置

修改application.properties,将缓存类型改为Redis:

# 替换原来的simple为redis
spring.cache.type=redis

spring.redis.host=localhost
spring.redis.port=16379

2. 完善Redis配置类,添加RedisCacheManager

更新你的RedisConfiguration类,新增RedisCacheManager Bean,让Spring缓存注解(如@Cacheable)使用Redis作为缓存实现:

@Configuration
@EnableCaching // 开启缓存注解支持
public class RedisConfiguration {

    @Value("${spring.redis.host}")
    private String REDIS_HOST;
    @Value("${spring.redis.port}")
    private Integer REDIS_PORT;

    @Bean
    public JedisConnectionFactory jedisConnectionFactory() {
        RedisStandaloneConfiguration config = new RedisStandaloneConfiguration(REDIS_HOST, REDIS_PORT);
        return new JedisConnectionFactory(config);
    }

    @Bean
    public RedisTemplate<String, ?> redisTemplate() {
        RedisTemplate<String, ?> template = new RedisTemplate<>();
        template.setConnectionFactory(jedisConnectionFactory());
        // 添加序列化配置,避免Redis中出现乱码
        template.setKeySerializer(new StringRedisSerializer());
        template.setValueSerializer(new GenericJackson2JsonRedisSerializer());
        template.setEnableTransactionSupport(true);
        template.setExposeConnection(true);
        template.afterPropertiesSet();
        return template;
    }

    // 新增RedisCacheManager,关联缓存注解与Redis
    @Bean
    public RedisCacheManager cacheManager(RedisConnectionFactory connectionFactory) {
        RedisCacheConfiguration cacheConfig = RedisCacheConfiguration.defaultCacheConfig()
                .entryTtl(Duration.ofMinutes(30)) // 设置默认缓存过期时间
                .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer()))
                .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer()));
        
        return RedisCacheManager.builder(connectionFactory)
                .cacheDefaults(cacheConfig)
                .build();
    }
}

3. 优化Maven依赖(可选但推荐)

替换原有的spring-data-redis和jedis依赖,使用Spring Boot提供的starter,它会自动管理版本兼容性:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-cache</artifactId>
    <version>2.4.3</version>
</dependency>

<!-- 替换原spring-data-redis和jedis,starter包含了这两个依赖 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
    <version>2.4.3</version>
</dependency>

4. 验证Docker Redis连通性

确保Docker Redis容器正常运行,执行以下命令测试连接:

# 使用redis-cli连接本地16379端口
redis-cli -p 16379
# 执行PING命令,返回PONG则说明连通正常
PING

验证修复

重启Spring Boot应用后,调用带有@Cacheable注解的方法,再用redis-cli执行KEYS *命令,就能看到Redis中生成的缓存键了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 08:45:44