06-SpringCache缓存-SpringCache注解开发-@CachePut

发布时间:2024年01月18日
2.3.3 @CachePut注解

@CachePut:当需要更新缓存而不干扰方法的运行时 ,可以使用该注解。也就是说,始终执行该方法,并将结果放入缓存

本质上说,如果存在对应的缓存,则更新覆盖,不存在则添加;

示例代码: ?

/**
     * .@CachePut既调用方法、又更新数据,达到同步更新缓存
     * <p>
     * 运行时机:
     * 1、先调用目标方法 ★★★
     * 2、将目标方法的结果缓存起来★★★
     * 条件:存取Id的key要保持一致
     *     key = "#role.id"     传入员工的Id
     *     key = "#result.id"   使用返回员工的Id
     * 注意: @Cacheable不能使用#result
     *      因为 @Cacheable在目标方法执行之前需要得到这个key,所以不能用#result
     */
@Override
@CachePut(key = "#result.id")//更新或者添加缓存---》有则更新,无则添加
public Role update(Role role) {
  roleMapper.updateByPrimaryKey(role);
  return role;
}

查看缓存

?测试方法:

 /**
     * @Description 更新缓存
     */
    @Test
    public void testUpdate(){
        Role role = Role.builder().id(5).rolecode("0055").rolename("0055Role").introduce("00555Introduce").build();
        Role update = roleService.update(role);
        System.out.println(update);
    }

执行完查看控制台

JDBC Connection [HikariProxyConnection@776691105 wrapping com.mysql.cj.jdbc.ConnectionImpl@312819ae] will not be managed by Spring
==>  Preparing: update role set roleName = ?, roleCode = ?, introduce = ? where id = ?
==> Parameters: 0055Role(String), 0055(String), 00555Introduce(String), 5(Integer)
<==    Updates: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4213bc3e]
Role(id=5, rolename=0055Role, rolecode=0055, introduce=00555Introduce)

查看缓存,没有对应的key的缓存则创建

?如果缓存中有对应的key的缓存,则覆盖

测试方法

 @Test
    public void testUpdate(){
        Role role = Role.builder().id(5).rolecode("0055aaa").rolename("0055Roleaaa").introduce("00555Introduceaaa").build();
        Role update = roleService.update(role);
        System.out.println(update);
    }

?查看缓存,覆盖了旧的数据

文章来源:https://blog.csdn.net/weixin_44478828/article/details/135634965
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。