springcache

让程序员实现无感缓存
不再需要在业务上写各种代码
但是 springcache只支持 string 对于list set zset hash均不支持

基于注解实现缓存

Spring为我们提供了几个注解来支持Spring Cache。其核心主要是@Cacheable和@CacheEvict。使用@Cacheable标记的方法在执行后Spring Cache将缓存其返回结果,而使用@CacheEvict标记的方法会在方法执行前或者执行后移除Spring Cache中的某些元素。下面我们将来详细介绍一下Spring基于注解对Cache的支持所提供的几个注解。


@Cacheable 查询

	可以标记在一个方法上,也可以标记在一个类上。
	当标记在一个方法上时表示该方法是支持缓存的,
	当标记在一个类上时则表示该类所有的方法都是支持缓存的
	对于一个支持缓存的方法,**Spring会在其被调用后将其返回值缓存起来**保证下次利用同样的参数来执行该方
	法时可直接从缓存中获取结果,而**不需要再次执行该方法**
	也就是说每次执行前会先去查询缓存中是否存在数据,不存在则去查询并将数据缓存
	需要注意的是当一个支持缓存的方法在对象内部被调用时是不会触发缓存功能的。@Cacheable可以指定三个属性
	value、key和condition。

value属性指定Cache名称
@Cacheable(“cache1”)
在这里插入图片描述

   @Cacheable("cache1")//Cache是发生在cache1上的
   public User find(Integer id) {
      returnnull;
   }
   @Cacheable({"cache1", "cache2"})//Cache是发生在cache1和cache2上的
   public User find(Integer id) {
      returnnull;
   }

使用key属性自定义key
指定Spring缓存方法的返回结果时对应的key
可以直接使用“#参数名”或者“#p参数index”

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

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

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

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

condition属性指定发生的条件
有的时候我们可能并不希望缓存一个方法所有的返回结果
condition属性默认为空

   @Cacheable(value={"users"}, key="#user.id", condition="#user.id%2==0")
   public User find(User user) {
      System.out.println("find user by user " + user);
      return user;
   }

@CachePut 修改

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

更多的放在修改方法上

   @CachePut("users")//每次都会执行方法,并将结果存入指定的缓存中
   public User find(Integer id) {
      return user;
   }

先修改然后查询并返回,供其缓存

@CacheEvict 删除

用来标注在需要清除缓存元素的方法或类上的
删除
当标记在一个类上时表示其中所有的方法的执行都会触发缓存的清除操作。@CacheEvict可以指定的属性有value、key、condition、allEntries和beforeInvocation。其中value、key和condition的语义与@Cacheable对应的属性类似。即value表示清除操作是发生在哪些Cache上的(对应Cache的名称);key表示需要清除的是哪个key,如未指定则会使用默认策略生成的key;condition表示清除操作发生的条件。下面我们来介绍一下新出现的两个属性allEntries和beforeInvocation。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值