Spring Boot
2025-07-24 16:34阅读:14评论:0
集成redisson使用@Cacheable 缓存数据报错问题
缓存异常 caches=[memberuserbrowse_product] key='' keyGenerator='' cacheManager='' cacheResolver='' condition='' unless='#result == null' sync='false' 需要配置
_PROTECTED0_
> caches=[memberuserbrowseproduct] | key='' | keyGenerator='' | cacheManager='' | cacheResolver='' | condition='' | unless='#result == null' | sync='false'
- 需要配置注入CacheManager,如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
import org.redisson.api.RedissonClient;import org.redisson.spring.cache.CacheConfig;import org.redisson.spring.cache.RedissonSpringCacheManager;import org.redisson.spring.data.connection.RedissonConnectionFactory;import org.springframework.cache.CacheManager;import org.springframework.cache.annotation.EnableCaching;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration; import java.util.HashMap;import java.util.Map; /** * 将 Redisson 与 Spring Data Redis 库集成 * * @author wency_cai */@Configuration@EnableCachingpublic class RedissonConfig { /** * 在Spring上下文中注册RedissonConnectionFactory * * @param redisson * @return */ @Bean public RedissonConnectionFactory redissonConnectionFactory(RedissonClient redisson) { return new RedissonConnectionFactory(redisson); } /** * 集成 Redisson ,使用 @Cacheable 做缓存必须要注入 CacheManager,否则会报错: key='' | keyGenerator='' | cacheManager='' | cacheResolver='' | condition='',true,false * * @param redissonClient * @return */ @Bean public CacheManager cacheManager(RedissonClient redissonClient) { Map<String, CacheConfig> config = new HashMap<>(); // 为特定缓存名称配置 //config.put("myCache", new CacheConfig(60 * 60 * 1000, 30 * 60 * 1000)); // 1小时过期,30分钟后开始逐出 return new RedissonSpringCacheManager(redissonClient, config); }} - 或
1
2
3
4
5
6
7
8
9
10
@Bean public RedisCacheManager userRedisCacheManager(RedisConnectionFactory connectionFactory){ Jackson2JsonRedisSerializer<Object> redisSerializer = new Jackson2JsonRedisSerializer<>(JsonMapperUtils.MAPPER, Object.class); RedisCacheConfiguration cacheConfiguration = RedisCacheConfiguration.defaultCacheConfig() // 设置Redis缓存有效期为1小时 .entryTtl(Duration.ofSeconds(60 * 60)) .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(redisSerializer)); return RedisCacheManager.builder(connectionFactory).cacheDefaults(cacheConfiguration).build(); }