針對(duì)一些讀寫比很高的數(shù)據(jù)劫流,使用本地緩存可以提高效率巫玻,如果使用Spring Boot框架的話,使用Cache會(huì)特別簡單祠汇。
啟動(dòng)最簡單的緩存
添加依賴
pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
注解啟動(dòng)緩存
//啟動(dòng)緩存
@EnableCaching
@SpringBootApplication
public class BootCacheApplication {
public static void main(String[] args) {
SpringApplication.run(BootCacheApplication.class, args);
}
}
使用
@Slf4j
@Service
public class PersonService {
@Resource
private PersonMapper personMapper;
@Cacheable("person")
public Person getOne(int id) {
log.info("load one person");
return personMapper.selectOne(id);
}
@CacheEvict(value = "person", key = "#person.id")
public void update(Person person) {
personMapper.updateById(person);
}
}
-
@Cacheable
是最主要的注解仍秤,它指定了被注解方法的返回值是可被緩存的 -
@CacheEvict
注解是@Cacheable
注解的反向操作,它負(fù)責(zé)從給定的緩存中移除一個(gè)值
Spring Boot Cache默認(rèn)使用ConcurrentHashMap作為緩存的實(shí)現(xiàn)可很,只提供了最基礎(chǔ)的功能诗力,實(shí)際項(xiàng)目中往往需要更加專業(yè)的緩存實(shí)現(xiàn)。比如Caffeine我抠,EhCache苇本,Redis等
使用Caffeine作為緩存實(shí)現(xiàn)
使用Spring Boot Cache框架,其中一個(gè)很大的好處菜拓,就是可以很方便的更換緩存實(shí)現(xiàn)
添加依賴
pom.xml
<dependency>
<groupId>com.github.ben-manes.caffeine</groupId>
<artifactId>caffeine</artifactId>
<version>2.7.0</version>
</dependency>
Spring Boot會(huì)檢查class path里的類瓣窄,發(fā)現(xiàn)合適的(比如caffeine)就會(huì)生成對(duì)應(yīng)的
CacheManager
添加特定配置
application.properties
spring.cache.caffeine.spec=maximumSize=500,expireAfterWrite=5s
Spring Boot 2已經(jīng)不支持Guava作為Cache(用戶代碼內(nèi)部還是可以使用,只是Spring框架的Cache不支持)纳鼎,代替Guava是的Caffeine俺夕,用法跟Guava類似裳凸,遷移成本很低
其他
- 如果classpath有多個(gè)緩存組件,可以通過配置指定使用的緩存組件
spring.cache.type=caffeine