Spring Boot緩衝實戰 Caffeine樣本,springcaffeine

來源:互聯網
上載者:User

Spring Boot緩衝實戰 Caffeine樣本,springcaffeine

Caffeine和Spring Boot整合

Caffeine是使用Java8對Guava緩衝的重寫版本,在Spring Boot 2.0中將取代Guava。如果出現Caffeine,CaffeineCacheManager將會自動設定。使用spring.cache.cache-names屬性可以在啟動時建立緩衝,並可以通過以下配置進行自訂(按順序):

  • spring.cache.caffeine.spec: 定義的特殊緩衝
  • com.github.benmanes.caffeine.cache.CaffeineSpec: bean定義
  • com.github.benmanes.caffeine.cache.Caffeine: bean定義

例如,以下配置建立一個foo和bar緩衝,最大數量為500,存活時間為10分鐘:

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

除此之外,如果定義了com.github.benmanes.caffeine.cache.CacheLoader,它會自動關聯到CaffeineCacheManager。由於該CacheLoader將關聯被該緩衝管理器管理的所有緩衝,所以它必須定義為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=peoplespring.cache.caffeine.spec=initialCapacity=50,maximumSize=500,expireAfterWrite=10s,refreshAfterWrite=5s

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

/** * 必須要指定這個Bean,refreshAfterWrite=5s這個配置屬性才生效 * * @return */@Beanpublic CacheLoader<Object, Object> cacheLoader() {  CacheLoader<Object, Object> cacheLoader = new CacheLoader<Object, Object>() {    @Override    public Object load(Object key) throws Exception {      return null;    }    // 重寫這個方法將oldValue值返回回去,進而重新整理緩衝    @Override    public Object reload(Object key, Object oldValue) throws Exception {      return oldValue;    }  };  return cacheLoader;}

Caffeine配置說明:

  1. initialCapacity=[integer]: 初始的緩衝空間大小
  2. maximumSize=[long]: 緩衝的最大條數
  3. maximumWeight=[long]: 緩衝的最大權重
  4. expireAfterAccess=[duration]: 最後一次寫入或訪問後經過固定時間到期
  5. expireAfterWrite=[duration]: 最後一次寫入後經過固定時間到期
  6. refreshAfterWrite=[duration]: 建立緩衝或者最近一次更新緩衝後經過固定的時間間隔,重新整理緩衝
  7. weakKeys: 開啟key的弱引用
  8. weakValues:開啟value的弱引用
  9. softValues:開啟value的軟引用
  10. recordStats:開發統計功能

注意:

  1. expireAfterWrite和expireAfterAccess同事存在時,以expireAfterWrite為準。
  2. maximumSize和maximumWeight不可以同時使用
  3. weakValues和softValues不可以同時使用

範例程式碼

/** * @author yuhao.wang */@Servicepublic 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() + "資料做了緩衝");    return p;  }  @Override  @CacheEvict(value = "people")//2  public void remove(Long id) {    logger.info("刪除了id、key為" + id + "的資料緩衝");    //這裡不做實際刪除操作  }  /**   * Cacheable   * value:緩衝key的首碼。   * key:緩衝key的尾碼。   * sync:設定如果緩衝到期是不是只放一個請求去請求資料庫,其他請求阻塞,預設是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() + "資料做了緩衝");    return p;  }  @Override  @Cacheable(value = "people1")//3  public Person findOne1() {    Person p = personRepository.findOne(2L);    logger.info("為id、key為:" + p.getId() + "資料做了緩衝");    return p;  }  @Override  @Cacheable(value = "people2")//3  public Person findOne2(Person person) {    Person p = personRepository.findOne(person.getId());    logger.info("為id、key為:" + p.getId() + "資料做了緩衝");    return p;  }}

源碼:https://github.com/wyh-spring-ecosystem-student/spring-boot-student/tree/releases

以上就是本文的全部內容,希望對大家的學習有所協助,也希望大家多多支援幫客之家。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.