@Cacheable
@Cacheable是用来声明方法是可缓存的。将结果存储到缓存中以便后续使用相同参数调用时不需执行实际的方法。
默认key的生成按照以下规则:
- 如果没有参数,则使用0作为key
- 如果只有一个参数,使用该参数作为key
- 如果又多个参数,使用包含所有参数的hashCode作为key
自定义key:
- 直接使用字符串,如
“1”
- 支持SpringEL表达式,如
“#demo.id”
sync属性:
- 缓存的同步
- 可以指示底层将缓存锁住,使只有一个线程可以进入计算,而其他线程堵塞,直到返回结果更新到缓存中。
- “true” or “false”
condition属性:
- 判断是否需要缓存,条件为true时才缓存
“#name.length>10”
@CachePut
@CachePut标注的方法在执行前不会去检查缓存中是否存在之前执行过的结果,而是每次都会执行该方法,并将执行结果以键值对的形式存入指定的缓存中。
以key作为键,返回值作为值,进行缓存。
@CacheEvict
对缓存进行清除,用法和Cacheable等一样,清除指定key的缓存
allEntries属性: 是否清空所有缓存内容
beforeInvocation属性: 是否在方法执行前就清空
@CacheConfig
作用与类,可以代替方法的缓存名,value
@CachePut(value = "demo", key = "#demo.id")
public Demo add(Demo demo) {
baseMapper.insert(demo);
return demo;
}
@Cacheable(value = "demo", key = "#demo.id")
public Demo findById(Long id) {
return baseMapper.selectById(id);
}