国产精品嫩草99av在线_一区在线视频观看_欧美高清一区_欧美 日韩 国产 一区_99精品欧美一区二区三区_久久大香伊蕉在人线观看热2_一色屋精品视频在线观看网站_在线亚洲国产精品网站_亚洲区一区二区三区_你懂的视频一区二区

當(dāng)前位置:首頁(yè) > 科技  > 軟件

SpringBoot中使用Cache提升接口性能詳解

來(lái)源: 責(zé)編: 時(shí)間:2023-08-05 11:44:47 5096觀看
導(dǎo)讀環(huán)境:springboot2.3.12.RELEASE + JSR107 + Ehcache + JPASpring 框架從 3.1 開(kāi)始,對(duì) Spring 應(yīng)用程序提供了透明式添加緩存的支持。和事務(wù)支持一樣,抽象緩存允許一致地使用各種緩存解決方案,并對(duì)代碼的影響最小。從 Spri

環(huán)境:springboot2.3.12.RELEASE + JSR107 + Ehcache + JPA75y28資訊網(wǎng)——每日最新資訊28at.com

Spring 框架從 3.1 開(kāi)始,對(duì) Spring 應(yīng)用程序提供了透明式添加緩存的支持。和事務(wù)支持一樣,抽象緩存允許一致地使用各種緩存解決方案,并對(duì)代碼的影響最小。從 Spring4.1 版本開(kāi)始,緩存抽象支持了 JSR-107 注釋和更多自定義選項(xiàng),從而得到了顯著的改進(jìn)。75y28資訊網(wǎng)——每日最新資訊28at.com

方式1:直接使用spring的注解來(lái)實(shí)現(xiàn)緩存75y28資訊網(wǎng)——每日最新資訊28at.com

spring提供了如下注解:75y28資訊網(wǎng)——每日最新資訊28at.com

@Cacheable 觸發(fā)緩存機(jī)制75y28資訊網(wǎng)——每日最新資訊28at.com

@CacheEvict 觸發(fā)緩存回收75y28資訊網(wǎng)——每日最新資訊28at.com

@CachePut 更新緩存,而不會(huì)影響方法的執(zhí)行75y28資訊網(wǎng)——每日最新資訊28at.com

@Caching 組合多個(gè)緩存操作到一個(gè)方法75y28資訊網(wǎng)——每日最新資訊28at.com

@CacheConfig 類(lèi)級(jí)別共享系誒常見(jiàn)的緩存相關(guān)配置75y28資訊網(wǎng)——每日最新資訊28at.com

<dependency>  <groupId>org.springframework.boot</groupId>  <artifactId>spring-boot-starter-cache</artifactId></dependency>

首先在Service對(duì)應(yīng)的方法是添加注解:75y28資訊網(wǎng)——每日最新資訊28at.com

@Servicepublic class StorageService {    @Resource  private StorageRepository sr ;    @Cacheable(value = {"cache_storage"}, keyGenerator = "storageKey")  public Storage getStorage(Long id) {    return sr.findById(id).get() ;  }  }
// 這里的keyGenerator是你自定義Key生成的Bean名稱(chēng)@Component("storageKey")public class StorageKeyGenerator implements KeyGenerator {  private static final String  KEY_PREFIX = "storage_" ;    @Override  public Object generate(Object target, Method method, Object... params) {    StringBuilder sb = new StringBuilder() ;    for (Object param : params) {      sb.append(param) ;    }    return KEY_PREFIX + sb.toString() ;  }}

web接口:75y28資訊網(wǎng)——每日最新資訊28at.com

@RestController@RequestMapping("/storages")public class StorageController {    @Resource  private StorageService storageService ;  @GetMapping("/{id}")  public Object get(@PathVariable("id") Long id) {    return storageService.getStorage(id) ;  }}

測(cè)試:75y28資訊網(wǎng)——每日最新資訊28at.com

第一次訪問(wèn)接口,查看控制臺(tái)輸出了sql語(yǔ)句:75y28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片75y28資訊網(wǎng)——每日最新資訊28at.com

再次訪問(wèn)接口,發(fā)現(xiàn)控制臺(tái)沒(méi)有再輸出任何sql,說(shuō)明我們的緩存生效了(這里你也可以把這里的注解注釋了來(lái)看效果)。關(guān)于這里的更新緩存,刪除緩存就不演示了。接下來(lái)完整的演示下JSR107規(guī)范中的注解演示:75y28資訊網(wǎng)——每日最新資訊28at.com

注意在這些注釋中我們是可以使用SpEL表達(dá)式的:75y28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片75y28資訊網(wǎng)——每日最新資訊28at.com

方式2:使用JSR107和Ehcache75y28資訊網(wǎng)——每日最新資訊28at.com

先來(lái)看看Spring與JSR107注解的對(duì)照表:75y28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片75y28資訊網(wǎng)——每日最新資訊28at.com

pom.xml中加入依賴(lài):75y28資訊網(wǎng)——每日最新資訊28at.com

<dependency>  <groupId>org.springframework.boot</groupId>  <artifactId>spring-boot-starter-cache</artifactId></dependency><dependency>  <groupId>mysql</groupId>  <artifactId>mysql-connector-java</artifactId></dependency><dependency>  <groupId>org.ehcache</groupId>  <artifactId>ehcache</artifactId></dependency><dependency>  <groupId>javax.cache</groupId>  <artifactId>cache-api</artifactId></dependency>

Service類(lèi):75y28資訊網(wǎng)——每日最新資訊28at.com

@Servicepublic class StorageService {    @Resource  private StorageRepository sr ;    // 這里的 @CacheValue 說(shuō)明是要緩存的參數(shù)值。  @Transactional  @CachePut(cacheName = "cache_storage", cacheKeyGenerator = JCacheKeyGenerator.class)  public Storage save(@CacheValue Storage storage) {    return sr.saveAndFlush(storage) ;  }  @CacheResult(cacheName = "cache_storage", cacheKeyGenerator = JCacheKeyGenerator.class)  public Storage getStorage(Long id) {    return sr.findById(id).get() ;  }    @Transactional  @CacheRemove(cacheName = "cache_storage", cacheKeyGenerator = JCacheKeyGenerator.class)  public void removeStorage(Long id) {    sr.deleteById(id) ;  }    @Transactional  @CachePut(cacheName = "cache_storage", cacheKeyGenerator = JCacheKeyGenerator.class)  public Storage updateStorage(@CacheValue Storage storage) {    return sr.saveAndFlush(storage) ;  }}// 注意這里的cacheKeyGenerator 必須全部用同一個(gè),// 跟蹤了下源碼是用的對(duì)應(yīng)的類(lèi)名key來(lái)查找對(duì)應(yīng)的緩存的;一開(kāi)始我沒(méi)有用同一個(gè)始終不正確。。// 看下圖跟蹤的代碼:

圖片圖片75y28資訊網(wǎng)——每日最新資訊28at.com

這里必須要一樣哦cacheKeyGenerator75y28資訊網(wǎng)——每日最新資訊28at.com

緩存Key:JCacheKeyGenerator.java75y28資訊網(wǎng)——每日最新資訊28at.com

public class JCacheKeyGenerator implements CacheKeyGenerator {  private static final String  KEY_PREFIX = "storage_" ;    @Override  public GeneratedCacheKey generateCacheKey(      CacheKeyInvocationContext<? extends Annotation> cacheKeyInvocationContext) {    CacheInvocationParameter[] params = cacheKeyInvocationContext.getAllParameters() ;    StringBuilder sb = new StringBuilder() ;    for (CacheInvocationParameter param : params) {      if (param.getValue() instanceof Storage) {        Storage s = (Storage) param.getValue() ;        sb.append(s.getId()) ;      } else {        sb.append((Long)param.getValue()) ;      }    }    return new StorageGeneratedCacheKey(KEY_PREFIX + sb.toString()) ;  }    private static class StorageGeneratedCacheKey implements GeneratedCacheKey {    private static final long serialVersionUID = 1L;        private String key ;        public StorageGeneratedCacheKey(String key) {      this.key = key ;    }    @Override    public int hashCode() {      final int prime = 31;      int result = 1;      result = prime * result + ((key == null) ? 0 : key.hashCode());      return result;    }    @Override    public boolean equals(Object obj) {      if (this == obj)        return true;      if (obj == null)        return false;      if (getClass() != obj.getClass())        return false;      StorageGeneratedCacheKey other = (StorageGeneratedCacheKey) obj;      if (key == null) {        if (other.key != null)          return false;        } else if (!key.equals(other.key))          return false;      return true;      }        }}

application.yml配置:75y28資訊網(wǎng)——每日最新資訊28at.com

spring:  cache:    cacheNames:    - cache_storage    ehcache:      config: classpath:ehcache.xml

ehcache.xml75y28資訊網(wǎng)——每日最新資訊28at.com

<?xml versinotallow="1.0" encoding="UTF-8"?><ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"         xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd"         updateCheck="false">  <diskStore path="java.io.tmpdir/Tmp_EhCache"/>     <defaultCache eternal="false" maxElementsInMemory="10000"  overflowToDisk="false" diskPersistent="false" timeToIdleSeconds="1800" timeToLiveSeconds="259200" memoryStoreEvictionPolicy="LRU" />  <cache name="cache_storage" eternal="false" maxElementsInMemory="5000"  overflowToDisk="false" diskPersistent="false" timeToIdleSeconds="1800" timeToLiveSeconds="1800" memoryStoreEvictionPolicy="LRU" /> </ehcache>

測(cè)試增刪改:75y28資訊網(wǎng)——每日最新資訊28at.com

先添加個(gè)數(shù)據(jù):75y28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片75y28資訊網(wǎng)——每日最新資訊28at.com

75y28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片75y28資訊網(wǎng)——每日最新資訊28at.com

成功添加ID為4的信息,Service中的save方法中我們添加了@CachePut注解,接下來(lái)我們查詢(xún)ID為4的信息,看看控制臺(tái)是否會(huì)生成SQL語(yǔ)句。75y28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片75y28資訊網(wǎng)——每日最新資訊28at.com

75y28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片75y28資訊網(wǎng)——每日最新資訊28at.com

控制臺(tái)沒(méi)有增加任何的SQL語(yǔ)句,說(shuō)明save方法加的@CachePut生效了。75y28資訊網(wǎng)——每日最新資訊28at.com

接著做刪除操作:75y28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片75y28資訊網(wǎng)——每日最新資訊28at.com

75y28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片75y28資訊網(wǎng)——每日最新資訊28at.com

75y28資訊網(wǎng)——每日最新資訊28at.com

ID為4的刪除了,接下來(lái)再做查詢(xún)看看:75y28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片75y28資訊網(wǎng)——每日最新資訊28at.com

75y28資訊網(wǎng)——每日最新資訊28at.com

這說(shuō)明刪除了數(shù)據(jù)后,緩存也做了刪除。這里生成了查詢(xún)語(yǔ)句。75y28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.rrqrq.com/showinfo-26-89-0.htmlSpringBoot中使用Cache提升接口性能詳解

聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

上一篇: K8S | Service服務(wù)發(fā)現(xiàn)

下一篇: 一年經(jīng)驗(yàn)在二線城市面試后端的經(jīng)驗(yàn)分享

標(biāo)簽:
  • 熱門(mén)焦點(diǎn)
Top 国产精品嫩草99av在线_一区在线视频观看_欧美高清一区_欧美 日韩 国产 一区_99精品欧美一区二区三区_久久大香伊蕉在人线观看热2_一色屋精品视频在线观看网站_在线亚洲国产精品网站_亚洲区一区二区三区_你懂的视频一区二区
国产网站一区二区| 成人黄页在线观看| 中文字幕一区二区不卡| 欧美精品一区二区三区高清aⅴ | 亚洲成人1区2区| 一二三区精品福利视频| 一区二区免费看| 亚洲精品乱码久久久久久久久| 《视频一区视频二区| 中文字幕一区二区三区不卡| 日韩毛片高清在线播放| 亚洲欧美偷拍卡通变态| 亚洲男人天堂av| 亚洲1区2区3区4区| 蜜桃一区二区三区在线观看| 久久99精品网久久| 顶级嫩模精品视频在线看| 大桥未久av一区二区三区中文| 成人污污视频在线观看| 欧美激情一区| 国产精品日韩欧美一区| 久久午夜视频| 欧美一区三区二区| 久久久精品国产免大香伊| 国产精品护士白丝一区av| 亚洲精品免费视频| 日本中文在线一区| 国产成人精品午夜视频免费| 欧美一区二区在线| 中日韩男男gay无套| 在线视频观看一区| 2023国产精品自拍| 中文字幕亚洲视频| 裸体在线国模精品偷拍| 成人激情综合网站| 一本久道久久综合狠狠爱| 色婷婷综合视频在线观看| 欧美本精品男人aⅴ天堂| 日韩码欧中文字| 韩国在线一区二区| 国产精品theporn| 欧美视频一区二区| 91亚洲男人天堂| 亚洲欧美国产不卡| 欧美成人欧美edvon| 亚洲一区二区三区精品在线| 国产精品夜夜嗨| 亚洲国产一区二区在线| 欧美午夜寂寞影院| 中文字幕日韩精品一区| 韩国成人在线视频| 精品成人国产| 91麻豆精品91久久久久久清纯| 国产精品成人免费| 国产精品一区在线观看你懂的| 一区二区在线视频观看| 91精品国产麻豆| 亚洲高清视频中文字幕| 色综合婷婷久久| 欧美性受xxxx| 国产精品日韩精品欧美在线| 韩国三级在线一区| 欧美一区二视频| 亚洲日本欧美天堂| jizzjizzjizz欧美| 欧美日韩三级视频| 亚洲精品视频观看| 色综合久久综合| 制服.丝袜.亚洲.另类.中文| 亚洲免费伊人电影| 欧美在线观看天堂一区二区三区| 欧美体内she精高潮| 一级中文字幕一区二区| 欧美区亚洲区| 久久久久久久久久电影| 激情综合色播激情啊| 免费在线观看一区二区| 国产精品每日更新| aaa欧美色吧激情视频| 欧美男女性生活在线直播观看| 亚洲成国产人片在线观看| 黄色在线一区| 国产亚洲精品精华液| 国产a区久久久| 欧美日韩精品欧美日韩精品| 日韩不卡一二三区| 性欧美videos另类喷潮| 有码一区二区三区| 在线欧美日韩| 国产精品免费视频一区| 欧美一区二区三区另类 | 久久久久久久久久久久电影| 国产成人a级片| 欧美一区午夜精品| 国产福利一区二区三区| 欧美人妇做爰xxxⅹ性高电影| 日韩和欧美一区二区三区| 国产精品一区视频网站| 亚洲一区二区在线观看视频 | 久久av一区二区三区| 亚洲与欧洲av电影| 亚洲尤物在线| 亚洲va中文字幕| 久久久久在线| 日本亚洲电影天堂| 欧美亚洲国产一卡| 国产乱理伦片在线观看夜一区| 91精品国产美女浴室洗澡无遮挡| 国产一区二区成人久久免费影院| 91精品国产综合久久久蜜臀图片| 国内精品国产成人国产三级粉色 | 精品久久久久一区| 不卡高清视频专区| 国产日韩v精品一区二区| 欧美激情性爽国产精品17p| 国产精品久久久久9999吃药| 99在线精品免费视频九九视| 五月激情综合婷婷| 欧美群妇大交群中文字幕| 国产91精品一区二区麻豆网站| 精品电影一区二区| 亚洲精品在线视频观看| 日韩和欧美的一区| 日韩欧美电影一区| 欧美日韩在线大尺度| 亚洲国产日产av| 欧美视频第二页| 99久久婷婷国产综合精品| 亚洲视频一二三区| 91精彩视频在线| 不卡的电影网站| 亚洲丝袜另类动漫二区| 色噜噜狠狠色综合中国| 丰满亚洲少妇av| 自拍av一区二区三区| 色综合久久久久| 成人性生交大片免费看在线播放 | 国产精品magnet| 日韩精品亚洲一区| 久久这里只精品最新地址| 99国产精品久久久久久久| 老司机一区二区| 国产精品三级av| 欧美日韩在线电影| 欧美激情视频一区二区三区免费| 亚洲国产成人91porn| 欧美一区二区三区的| 国产偷自视频区视频一区二区| 国产麻豆视频一区| 一区二区三区四区视频精品免费| 欧美日韩国产色站一区二区三区| 欧美日韩在线精品| 国产一区二区三区视频在线播放| 一区视频在线播放| 日韩三级免费观看| 国产精品亚洲欧美| 欧美一区91| 国产一区二区三区免费在线观看| 亚洲啪啪综合av一区二区三区| 欧美二区三区91| 国产精品视区| 午夜精品久久久久99热蜜桃导演| 久久精品久久精品| 亚洲激情校园春色| 精品国产乱码久久久久久1区2区 | 一区二区三区中文在线| 精品久久久久久久久久久久包黑料 | 亚洲欧洲国产专区| 欧美va亚洲va香蕉在线| 久久精品网址| 激情亚洲成人| a级精品国产片在线观看| 琪琪一区二区三区| 一区二区三区国产| 国产欧美一区二区三区在线看蜜臀| 欧美日韩电影在线| 91国产视频在线观看| 亚洲毛片av| 影音先锋在线一区| 99久久99久久免费精品蜜臀| 韩国视频一区二区| 美女网站在线免费欧美精品| 亚洲精品videosex极品| 中文字幕中文字幕在线一区| ww亚洲ww在线观看国产| 制服丝袜av成人在线看| 欧美无人高清视频在线观看| 一本色道久久综合亚洲91| 一区二区三区国产盗摄 | 久久嫩草精品久久久精品| 日韩午夜av一区| 欧美一区二区三区视频在线观看 | 欧美精品一区二| 日韩一二在线观看| 欧美视频一区二| 欧美日本精品一区二区三区| 欧美日韩卡一卡二| 欧美日韩精品欧美日韩精品一 | 国产日产欧美一区二区三区| 久久久亚洲精品石原莉奈|