Spring Boot中@CachePut注解是否会替换Data Grid中已存在的对应Key?
@CachePut 对Data Grid同Key缓存的处理逻辑
核心结论
默认配置下,@CachePut 会直接用新生成的同Key值,覆盖Data Grid中已存在的对应缓存条目。
具体逻辑说明
@CachePut的设计目标就是强制更新缓存:和@Cacheable「缓存不存在才执行方法并存入」的逻辑不同,@CachePut注解修饰的方法每次都会正常执行,最终会把方法返回值强制写入指定缓存命名空间下的对应Key,不管该Key之前是否已经有缓存值。- Spring Cache是抽象缓存层,只要你集成的Data Grid实现(比如Redis、Infinispan等)适配了Spring Cache规范,同Key的写入操作默认就是覆盖逻辑,无需额外配置。
- 如果你需要避免同Key缓存被覆盖,可以自定义
CacheManager的写入规则,或者在底层缓存组件侧配置写入限制(比如Redis的NX写入参数),但这属于非默认的自定义改造,不符合@CachePut的常规使用场景。
常规使用示例
// 更新用户信息后同步刷新缓存 @CachePut(value = "userCache", key = "#userId") public User updateUserInfo(Long userId, UserUpdateDTO updateDTO) { // 执行数据库用户信息更新逻辑 User updatedUser = userMapper.update(userId, updateDTO); // 返回值会自动写入userCache下key为userId的缓存,覆盖原有值 return updatedUser; }
内容的提问来源于stack exchange,提问作者Celeena Joseph
相关产品推荐
相关产品推荐

