目录
1. @Cacheable
作用是主要针对方法配置,能够根据方法的请求参数对其结果进行缓存
主要参数说明:
1) value :
缓存的名称,在 spring 配置文件中定义,必须指定至少一个
例如:@Cacheable(value=”mycache”) 或者 @Cacheable(value={”cache1”,”cache2”}。
2) key :缓存的 key,可以为空
如果指定要按照 SpEL 表达式编写,如果不指定,则缺省按照方法的所有参数进行组合,
例如:@Cacheable(value=”testcache”,key=”#userName”)。
3) condition :缓存的条件,可以为空
案例如下:
service层
//表示使用my-redis-cache1缓存空间,key的生成策略为book+bid,当bid>10的时候才会使用缓存 @Cacheable(value = "my-redis-cache1",key = "'book'+#bid",condition = "#bid>10") public Book selectByPrimaryKey(Integer bid) { return bookMapper.selectByPrimaryKey(bid); }
测试代码如下
@Test public void selectByPrimaryKey() { Book book = bookService.selectByPrimaryKey(18); System.out.println(book); System.out.println("---------------------------------------------"); Book book2 = bookService.selectByPrimaryKey(18); System.out.println(book2); }
控制台输出
当bid分别为8和18的时候,bid=8是不触发缓存,数据从数据库拿,有sql语句打印;bid=18的时候才会缓存查询结果,从缓存中拿数据,不会有sql语句打印
2. @CachePut
作用是主要针对方法配置,能够根据方法的请求参数对其结果进行缓存,和 @Cacheable 不同的是,它每次都会触发真实查询
方法的调用
主要参数说明:
参数配置和@Cacheable一样。
3. @CacheEvict
作用是主要针对方法配置,能够根据一定的条件对缓存进行清空
主要参数说明:
1)value , key 和 condition 参数配置和@Cacheable一样。
2) allEntries :
是否清空所有缓存内容,缺省为 false,
如果指定为 true,则方法调用后将立即清空所有缓存,
例如:@CachEvict(value=”testcache”,allEntries=true)。
3) beforeInvocation :
是否在方法执行前就清空,缺省为 false,
如果指定为 true,则在方法还没有执行的时候就清空缓存,
缺省情况下,如果方法执行抛出异常,则不会清空缓存,
例如@CachEvict(value=”testcache”,beforeInvocation=true)
案例如下:
service层代码
@CacheEvict(value = "my-redis-cache2",allEntries = true) public void clear() { System.out.println("清空my-redis-cache2缓存槽中的所有对象...."); }
测试代码如下
public void clear() { bookService.clear(); }
注意:需要测试的话,先往缓存中缓存2个对象
今天的学习就到这了,拜拜!
说明:学习记录,若有错误,欢迎指正,若有疑问,欢迎评论