免费观看又色又爽又黄的小说免费_美女福利视频国产片_亚洲欧美精品_美国一级大黄大色毛片

Caffeine和SpringBoot集成的示例分析

這篇文章主要介紹Caffeine和Spring Boot集成的示例分析,文中介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們一定要看完!

創(chuàng)新互聯(lián)專注于邛崍網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供邛崍營銷型網(wǎng)站建設(shè),邛崍網(wǎng)站制作、邛崍網(wǎng)頁設(shè)計、邛崍網(wǎng)站官網(wǎng)定制、小程序設(shè)計服務(wù),打造邛崍網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供邛崍網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。

Caffeine和Spring Boot集成

Caffeine是使用Java8對Guava緩存的重寫版本,在Spring Boot 2.0中將取代Guava。如果出現(xiàn)Caffeine,CaffeineCacheManager將會自動配置。使用spring.cache.cache-names屬性可以在啟動時創(chuàng)建緩存,并可以通過以下配置進(jìn)行自定義(按順序):

  • spring.cache.caffeine.spec: 定義的特殊緩存

  • com.github.benmanes.caffeine.cache.CaffeineSpec: bean定義

  • com.github.benmanes.caffeine.cache.Caffeine: bean定義

例如,以下配置創(chuàng)建一個foo和bar緩存,最大數(shù)量為500,存活時間為10分鐘:

spring.cache.cache-names=foo,bar
spring.cache.caffeine.spec=maximumSize=500,expireAfterAccess=600s

除此之外,如果定義了com.github.benmanes.caffeine.cache.CacheLoader,它會自動關(guān)聯(lián)到CaffeineCacheManager。由于該CacheLoader將關(guān)聯(lián)被該緩存管理器管理的所有緩存,所以它必須定義為CacheLoader<Object, Object>,自動配置將忽略所有泛型類型。

引入依賴

<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開啟對緩存的支持

@SpringBootApplication
@EnableCaching// 開啟緩存,需要顯示的指定
public class SpringBootStudentCacheCaffeineApplication {

  public static void main(String[] args) {
    SpringApplication.run(SpringBootStudentCacheCaffeineApplication.class, args);
  }
}

配置文件

新增對緩存的特殊配置,如最大容量、過期時間等

spring.cache.cache-names=people
spring.cache.caffeine.spec=initialCapacity=50,maximumSize=500,expireAfterWrite=10s,refreshAfterWrite=5s

如果使用了refreshAfterWrite配置還必須指定一個CacheLoader,如:

/**
 * 必須要指定這個Bean,refreshAfterWrite=5s這個配置屬性才生效
 *
 * @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;
    }

    // 重寫這個方法將oldValue值返回回去,進(jìn)而刷新緩存
    @Override
    public Object reload(Object key, Object oldValue) throws Exception {
      return oldValue;
    }
  };
  return cacheLoader;
}

Caffeine配置說明:

  1. initialCapacity=[integer]: 初始的緩存空間大小

  2. maximumSize=[long]: 緩存的最大條數(shù)

  3. maximumWeight=[long]: 緩存的最大權(quán)重

  4. expireAfterAccess=[duration]: 最后一次寫入或訪問后經(jīng)過固定時間過期

  5. expireAfterWrite=[duration]: 最后一次寫入后經(jīng)過固定時間過期

  6. refreshAfterWrite=[duration]: 創(chuàng)建緩存或者最近一次更新緩存后經(jīng)過固定的時間間隔,刷新緩存

  7. weakKeys: 打開key的弱引用

  8. weakValues:打開value的弱引用

  9. softValues:打開value的軟引用

  10. recordStats:開發(fā)統(tǒng)計功能

注意:

  1. expireAfterWrite和expireAfterAccess同事存在時,以expireAfterWrite為準(zhǔn)。

  2. maximumSize和maximumWeight不可以同時使用

  3. weakValues和softValues不可以同時使用

示例代碼

/**
 * @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ù)緩存");
    //這里不做實際刪除操作
  }

  /**
   * Cacheable
   * value:緩存key的前綴。
   * key:緩存key的后綴。
   * sync:設(shè)置如果緩存過期是不是只放一個請求去請求數(shù)據(jù)庫,其他請求阻塞,默認(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)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!

文章名稱:Caffeine和SpringBoot集成的示例分析
本文網(wǎng)址:http://m.newbst.com/article28/pgcecp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站導(dǎo)航云服務(wù)器小程序開發(fā)外貿(mào)建站網(wǎng)站排名App開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化