Spring Redis缓存内存级过期设置咨询:Redisson是否可行?
Redisson实现Spring Redis Cache二级缓存(内存+Redis)
Redisson完全可以满足你的需求,它提供的LocalCachedMap特性,能轻松实现「本地内存缓存 + Redis分布式缓存」的二级缓存机制,正好适配你不想每次调用@Cacheable方法都访问Redis的场景。
核心实现步骤
1. 配置Redisson客户端与本地缓存策略
在Redisson配置类中,开启本地缓存并设置过期时间:
@Configuration public class RedissonConfig { @Bean public RedissonClient redissonClient() { Config config = new Config(); // 配置Redis连接(以单节点为例) config.useSingleServer().setAddress("redis://localhost:6379"); // 配置本地缓存参数 LocalCachedMapOptions<Object, Object> localCacheOpts = LocalCachedMapOptions.defaults() // 设置本地缓存过期时间为5分钟,匹配Redis数据的不变周期 .timeToLive(5, TimeUnit.MINUTES) // 限制本地缓存最大条目数,避免内存溢出 .maxSize(1000) // 可选:指定用Caffeine作为本地缓存实现,提升性能 .cacheProvider(CacheProvider.CAFFEINE); config.setCodec(new MapCacheCodec(StringCodec.INSTANCE, localCacheOpts)); return Redisson.create(config); } }
2. 配置Spring Cache使用Redisson缓存管理器
将Redisson集成到Spring Cache体系中:
@Configuration @EnableCaching public class SpringCacheConfig { @Autowired private RedissonClient redissonClient; @Bean public CacheManager cacheManager() { return new RedissonSpringCacheManager(redissonClient); } }
3. 业务方法中使用@Cacheable注解
依然用Spring原生注解标记缓存方法,无需额外改动:
@Service public class DataService { @Cacheable(value = "dataCache", key = "#id") public Data getDataById(Long id) { // 从数据库/数据源获取数据的逻辑 return dataRepository.findById(id).orElse(null); } }
关键特性说明
- 本地缓存优先:5分钟内调用缓存方法时,直接从本地内存取数据,完全不访问Redis。
- 自动缓存同步(可选):如果Redis中的数据意外在5分钟内变更,可通过配置同步策略(如
INVALIDATE)自动失效本地缓存,避免脏数据。 - 内存安全:通过
maxSize限制本地缓存容量,超出后自动按LRU策略淘汰旧条目,防止内存占用过高。
内容的提问来源于stack exchange,提问作者Pavel Hora
相关产品推荐
相关产品推荐

