springboot缓存@Cacheable、@CacheEvict、@CachePut

本文详细介绍了Spring框架中的缓存注解@Cacheable、@CacheEvict和@CachePut的使用方法。@Cacheable用于在方法执行前检查缓存,避免重复计算;@CacheEvict用于清除指定缓存;@CachePut每次执行方法后都会更新缓存,即使缓存中已有数据。
摘要由CSDN通过智能技术生成

1.@Cacheable

1.1 概述:

(1)标记在类上:表示该类所有的方法都是支持缓存的。

(2)标记在方法上:如果一个方法上添加了@Cacheable标记,Spring在每次执行前都会检查Cache中是否存在相同key的缓存元素,如果存在就不再执行该方法,而是直接从缓存中获取结果进行返回,否则才会执行并将返回结果存入指定的缓存中。

1.2.用法:

(1)@Cacheable可以指定三个属性value、key和conditionvalue必须指定,表示当前方法的返回值会被缓存在哪个Cache上,对应Cache的名称。可以是一个Cache也可以是多个Cache,当需要指定多个Cache时其是一个数组。

@Cacheable("cache1")//Cache是发生在cache1上的
    public User find(Integer id) {
        return null;
    }

@Cacheable(cacheNames="user", key="#id")//使用方法参数中的id参数生成缓存键值对中的key
    public User query(Integer id) {
        return null;
    }

key 自定义缓存的键,用来指定Spring缓存时对应的key的

@Cacheable(value="users", key="#user.id")
   public User find(User user) {
      return null;
   }

2.@CacheEvict

2.1 概述:

本质是删除redis数据库的user命名空间下的所有键值对。原理很简单,仅仅是把缓存数据删除,无特别逻辑。若想删除redis缓存的所有用户数据,可以把注解改为

@CacheEvict(cacheNames="user", allEntries=true)

2.2.用法:

缓存被调用方法的结果(返回值),删除redis中对应的缓存。

@CacheEvict(cacheNames="user", key="#id")
    @Override
    public boolean delete(String id) {
        // 可以在这里添加删除数据库对应用户数据的操作
        return true;
    }

3.@CachePut

3.1 概述:

@CachePut也可以声明一个方法支持缓存功能。不同的是使用@CachePut标注的方法在执行前不会去检查缓存中是否存在之前执行过的结果,而是每次都会执行该方法,并将执行结果以键值对的形式存入指定的缓存中。

3.2 用法:

@Service
public class RedisOnlyServiceImpl implements UserService {
    // 记录
    private AtomicInteger executeCout = new AtomicInteger(0);

    @CachePut(cacheNames="user", key="#user.id")
    @Override
    public User update(User user) {
        // 每次方法执行executeCout
        user.setUsername("redisOnly" + executeCout.incrementAndGet());
        // 必须把更新后的用户数据返回,这样才能把它缓存到redis中
        return user;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值