spring对缓存的使用@Cacheable

@Cacheable(value = "CACHE_BOOK",key = "#username", condition = "#language = 1")
public List<Book> getBooksByUsernameAndLanguage(String username, int language) {
     // balabalabala...里面的代码不重要
     return bookList;
}

@Cacheable注解只有三个属性。

  • value : 必须要的。就是个自己取的名字,通过它指明了第一次调用这个方法时返回的bookList将被存在内存的哪里。
  • key : 可选。要使用SpEL表达式,这里与参数username对应,当传入的username值变了的话就不去取缓存里的数据了,而是执行getBooksByUsernameAndLanguage方法。(这是必须的,因为username变了,返回值也就变了,缓存里的数据不符合了,因此这个选项很重要)。spring默认用方法的签名来当做key。
  • condition:方法返回的结果bookList,要不要缓存起来?condition就添加了一个限定条件。这个例子中,只有传入的语言代码是1,返回的bookList才会被缓存起来,如果给language传了别的值,那么bookList是不会缓存起来的。

 

 

 

 注意事项:1、@Cacheable必须开启缓存在启动类上@EnableCaching

      2、返回的对象要实现缓存该对象是必须实现序列化接口的Serializable

      3、@Cacheable不可用在私有方法上面,可以放在接口和具体的方法上面

      4、@Cacheable这个注解是放在具体的方法上;

      5、@CacheConfig这个注解只能放在类上代表这个类所有缓存的公共属性配置,比如value等非必须;

      6、key = "#对象.属性"或者直接使用key = "#属性";直接读取的是方法形参内的参数属性或者对象;

     7、key = "#对象.属性.concat('Hydrologydata')"

  

 嗨,朋友既然来了何不关注一下!

posted @ 2021-03-29 17:11  逝年的我们  阅读(6323)  评论(0编辑  收藏  举报