您好,登錄后才能下訂單哦!
這篇文章主要介紹Caffeine和Spring Boot集成的示例分析,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!
Caffeine和Spring Boot集成
Caffeine是使用Java8對(duì)Guava緩存的重寫版本,在Spring Boot 2.0中將取代Guava。如果出現(xiàn)Caffeine,CaffeineCacheManager將會(huì)自動(dòng)配置。使用spring.cache.cache-names屬性可以在啟動(dòng)時(shí)創(chuàng)建緩存,并可以通過以下配置進(jìn)行自定義(按順序):
spring.cache.caffeine.spec: 定義的特殊緩存
com.github.benmanes.caffeine.cache.CaffeineSpec: bean定義
com.github.benmanes.caffeine.cache.Caffeine: bean定義
例如,以下配置創(chuàng)建一個(gè)foo和bar緩存,最大數(shù)量為500,存活時(shí)間為10分鐘:
spring.cache.cache-names=foo,bar spring.cache.caffeine.spec=maximumSize=500,expireAfterAccess=600s
除此之外,如果定義了com.github.benmanes.caffeine.cache.CacheLoader,它會(huì)自動(dòng)關(guān)聯(lián)到CaffeineCacheManager。由于該CacheLoader將關(guān)聯(lián)被該緩存管理器管理的所有緩存,所以它必須定義為CacheLoader<Object, Object>,自動(dòng)配置將忽略所有泛型類型。
引入依賴
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-cache</artifactId> </dependency> <dependency> <groupId>com.github.ben-manes.caffeine</groupId> <artifactId>caffeine</artifactId> <version>2.6.0</version> </dependency>
開啟緩存的支持
使用@EnableCaching注解讓Spring Boot開啟對(duì)緩存的支持
@SpringBootApplication @EnableCaching// 開啟緩存,需要顯示的指定 public class SpringBootStudentCacheCaffeineApplication { public static void main(String[] args) { SpringApplication.run(SpringBootStudentCacheCaffeineApplication.class, args); } }
配置文件
新增對(duì)緩存的特殊配置,如最大容量、過期時(shí)間等
spring.cache.cache-names=people spring.cache.caffeine.spec=initialCapacity=50,maximumSize=500,expireAfterWrite=10s,refreshAfterWrite=5s
如果使用了refreshAfterWrite配置還必須指定一個(gè)CacheLoader,如:
/** * 必須要指定這個(gè)Bean,refreshAfterWrite=5s這個(gè)配置屬性才生效 * * @return */ @Bean public CacheLoader<Object, Object> cacheLoader() { CacheLoader<Object, Object> cacheLoader = new CacheLoader<Object, Object>() { @Override public Object load(Object key) throws Exception { return null; } // 重寫這個(gè)方法將oldValue值返回回去,進(jìn)而刷新緩存 @Override public Object reload(Object key, Object oldValue) throws Exception { return oldValue; } }; return cacheLoader; }
Caffeine配置說明:
initialCapacity=[integer]: 初始的緩存空間大小
maximumSize=[long]: 緩存的最大條數(shù)
maximumWeight=[long]: 緩存的最大權(quán)重
expireAfterAccess=[duration]: 最后一次寫入或訪問后經(jīng)過固定時(shí)間過期
expireAfterWrite=[duration]: 最后一次寫入后經(jīng)過固定時(shí)間過期
refreshAfterWrite=[duration]: 創(chuàng)建緩存或者最近一次更新緩存后經(jīng)過固定的時(shí)間間隔,刷新緩存
weakKeys: 打開key的弱引用
weakValues:打開value的弱引用
softValues:打開value的軟引用
recordStats:開發(fā)統(tǒng)計(jì)功能
注意:
expireAfterWrite和expireAfterAccess同事存在時(shí),以expireAfterWrite為準(zhǔn)。
maximumSize和maximumWeight不可以同時(shí)使用
weakValues和softValues不可以同時(shí)使用
示例代碼
/** * @author yuhao.wang */ @Service public class PersonServiceImpl implements PersonService { private static final Logger logger = LoggerFactory.getLogger(PersonServiceImpl.class); @Autowired PersonRepository personRepository; @Override @CachePut(value = "people", key = "#person.id") public Person save(Person person) { Person p = personRepository.save(person); logger.info("為id、key為:" + p.getId() + "數(shù)據(jù)做了緩存"); return p; } @Override @CacheEvict(value = "people")//2 public void remove(Long id) { logger.info("刪除了id、key為" + id + "的數(shù)據(jù)緩存"); //這里不做實(shí)際刪除操作 } /** * Cacheable * value:緩存key的前綴。 * key:緩存key的后綴。 * sync:設(shè)置如果緩存過期是不是只放一個(gè)請(qǐng)求去請(qǐng)求數(shù)據(jù)庫(kù),其他請(qǐng)求阻塞,默認(rèn)是false。 */ @Override @Cacheable(value = "people", key = "#person.id", sync = true) public Person findOne(Person person, String a, String[] b, List<Long> c) { Person p = personRepository.findOne(person.getId()); logger.info("為id、key為:" + p.getId() + "數(shù)據(jù)做了緩存"); return p; } @Override @Cacheable(value = "people1")//3 public Person findOne1() { Person p = personRepository.findOne(2L); logger.info("為id、key為:" + p.getId() + "數(shù)據(jù)做了緩存"); return p; } @Override @Cacheable(value = "people2")//3 public Person findOne2(Person person) { Person p = personRepository.findOne(person.getId()); logger.info("為id、key為:" + p.getId() + "數(shù)據(jù)做了緩存"); return p; } }
以上是“Caffeine和Spring Boot集成的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。