長沙尚學堂|十年樹人|成就高薪
致力推動IT教育,我們正在行動    咨詢熱線:0731-83072091

2018大數據Spring Boot緩存實戰 Caffeine

時間:2017-12-22 09:36:36   來源:網絡轉載   閱讀:

    Caffeine是使用Java8對Guava緩存的重寫版本,在Spring Boot 2.0中將取代Guava。如果出現Caffeine,CaffeineCacheManager將會自動配置。使用spring.cache.cache-names屬性可以在啟動時創建緩存,并可以通過以下配置進行自定義(按順序),2018大數據Spring Boot緩存實戰 Caffeine,分享給大家。

  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,bar

  spring.cache.caffeine.spec=maximumSize=500,expireAfterAccess=600s

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

  引入依賴

  org.springframework.boot

  spring-boot-starter-cache

  com.github.ben-manes.caffeine

  caffeine

  2.6.0

  開啟緩存的支持

  使用@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 cacheLoader() {

  CacheLoader cacheLoader = new CacheLoader() {

  @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配置說明:

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

  maximumSize=[long]: 緩存的最大條數

  maximumWeight=[long]: 緩存的最大權重

  expireAfterAccess=[duration]: 最后一次寫入或訪問后經過固定時間過期

  expireAfterWrite=[duration]: 最后一次寫入后經過固定時間過期

  refreshAfterWrite=[duration]: 創建緩存或者最近一次更新緩存后經過固定的時間間隔,刷新緩存

  weakKeys: 打開key的弱引用

  weakValues:打開value的弱引用

  softValues:打開value的軟引用

  recordStats:開發統計功能

  注意:

  expireAfterWrite和expireAfterAccess同事存在時,以expireAfterWrite為準。

  maximumSize和maximumWeight不可以同時使用

  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() + "數據做了緩存");

  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 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;

  }

  }

  2018大數據Spring Boot緩存實戰 Caffeine,還有疑問的話,大家可以點擊彈窗私聊長沙尚學堂客服哦!
 

學大數據

  推薦閱讀:

  2018長沙最好的大數據培訓學校排行榜

  2018長沙哪里學大數據比較好,學費貴不貴

  大數據工程師薪資待遇怎么樣,發展空間大不大 

標簽:學大數據
分享:0
開班計劃

試聽申請表

全程面授,不高薪都難

報名成功后,尚學堂工作人員將在24小時內與您聯系

熱門文章
視頻下載
猜你喜歡
海岛奇兵试玩 赖子山庄天津麻将官方下载 上原亚衣黑人 四维图新股票行情 3d试机号金码杀码 微信麻将群赌博怎么举报电话 广东十一选五开奖 兰州快餐女价格微信 盈点通怎么赚钱 江西麻将十三烂打法 股票配资是什么意思 今晚国足比赛比分 股票实战 七十年麻将心得 篮网球比分直播网 内蒙古11选5走势 激情少女黄色片