日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

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

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

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

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

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

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

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

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

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

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

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

@CacheConfig 類級別共享系誒常見的緩存相關(guān)配置qs928資訊網(wǎng)——每日最新資訊28at.com

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

首先在Service對應(yīng)的方法是添加注解:qs928資訊網(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名稱@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接口:qs928資訊網(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) ;  }}

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

第一次訪問接口,查看控制臺輸出了sql語句:qs928資訊網(wǎng)——每日最新資訊28at.com

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

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

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

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

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

先來看看Spring與JSR107注解的對照表:qs928資訊網(wǎng)——每日最新資訊28at.com

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

pom.xml中加入依賴:qs928資訊網(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類:qs928資訊網(wǎng)——每日最新資訊28at.com

@Servicepublic class StorageService {    @Resource  private StorageRepository sr ;    // 這里的 @CacheValue 說明是要緩存的參數(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 必須全部用同一個,// 跟蹤了下源碼是用的對應(yīng)的類名key來查找對應(yīng)的緩存的;一開始我沒有用同一個始終不正確。。// 看下圖跟蹤的代碼:

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

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

緩存Key:JCacheKeyGenerator.javaqs928資訊網(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配置:qs928資訊網(wǎng)——每日最新資訊28at.com

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

ehcache.xmlqs928資訊網(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>

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

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

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

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

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

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

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

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

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

控制臺沒有增加任何的SQL語句,說明save方法加的@CachePut生效了。qs928資訊網(wǎng)——每日最新資訊28at.com

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

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

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

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

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

ID為4的刪除了,接下來再做查詢看看:qs928資訊網(wǎng)——每日最新資訊28at.com

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

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

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

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

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

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

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

標(biāo)簽:
  • 熱門焦點
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
欧美一区二区啪啪| 日韩视频在线永久播放| 国产欧美日韩三级| 国产欧美日本一区视频| 在线观看日韩av| 99精品国产福利在线观看免费| 艳妇臀荡乳欲伦亚洲一区| 香蕉久久夜色精品国产| 久久蜜桃av一区精品变态类天堂| 欧美激情精品久久久久久免费印度| 欧美久色视频| 国产色视频一区| 亚洲精品国产精品乱码不99按摩 | 欧美先锋影音| 国产综合欧美在线看| 亚洲日本欧美日韩高观看| 亚洲一区欧美| 欧美成人一区二区三区在线观看 | 亚洲天堂网站在线观看视频| 久久精品国产亚洲一区二区| 欧美日本在线视频| 国内揄拍国内精品久久| 一本色道久久88精品综合| 久久国产精品99精品国产| 欧美日本不卡视频| 国产亚洲欧美激情| 亚洲美女在线一区| 久久国产综合精品| 欧美日韩国产一区二区| 欧美一区二区视频在线观看| 欧美成年人视频| 国产精品亚洲综合一区在线观看| 亚洲国产精品t66y| 午夜精品久久久久久99热| 欧美激情久久久久久| 国产一区二区三区四区三区四| av不卡在线看| 免费不卡在线观看av| 国产视频观看一区| 亚洲天堂成人| 欧美精品九九99久久| 狠狠色伊人亚洲综合网站色| 亚洲欧美激情视频| 欧美日韩性视频在线| 亚洲国产毛片完整版| 久久激情网站| 国产精品乱子乱xxxx| 日韩视频在线观看一区二区| 久久综合给合| 国产亚洲欧洲997久久综合| 中文在线不卡视频| 欧美精品国产| 亚洲激情网站免费观看| 久久久99国产精品免费| 国产精品中文字幕欧美| 亚洲午夜精品久久久久久浪潮| 欧美精品精品一区| 亚洲精品国偷自产在线99热| 久久这里只有| 狠狠久久五月精品中文字幕| 午夜视黄欧洲亚洲| 欧美性猛交xxxx乱大交蜜桃| 亚洲剧情一区二区| 欧美国产精品人人做人人爱| 亚洲第一区在线| 老鸭窝91久久精品色噜噜导演| 国产日韩一区二区| 欧美一区二区三区免费在线看 | 国产精品v欧美精品v日本精品动漫 | 一本大道久久a久久精二百| 欧美国产精品va在线观看| 亚洲电影免费| 免费亚洲电影在线| 亚洲黄页一区| 欧美国产免费| 亚洲乱码日产精品bd| 欧美激情综合五月色丁香小说 | 一区二区三区www| 欧美日韩一区三区四区| 日韩午夜av| 欧美揉bbbbb揉bbbbb| 夜夜嗨av一区二区三区四季av| 欧美精品日韩| 一区电影在线观看| 国产精品久久久久一区二区三区共 | 国产精品久99| 亚洲免费一在线| 国产毛片一区二区| 久久国产日韩欧美| 一区二区三区在线视频观看| 久久男人av资源网站| 在线观看日韩www视频免费| 麻豆国产va免费精品高清在线| 影音先锋中文字幕一区| 欧美成人精品在线观看| 亚洲精品一二区| 欧美午夜不卡在线观看免费| 亚洲影院在线观看| 国产视频亚洲精品| 亚洲第一二三四五区| 久久综合狠狠| 亚洲破处大片| 国产精品白丝av嫩草影院| 亚洲女与黑人做爰| 国产视频久久久久久久| 可以看av的网站久久看| 亚洲国产三级在线| 欧美日韩久久精品| 午夜精品久久久久99热蜜桃导演| 国产亚洲女人久久久久毛片| 久久影视三级福利片| 亚洲欧洲视频在线| 欧美视频不卡| 欧美在线在线| 亚洲人成网在线播放| 欧美视频一区二区三区…| 欧美亚洲综合网| 亚洲国产岛国毛片在线| 欧美日韩综合精品| 欧美一级视频免费在线观看| 在线观看成人网| 欧美日韩国产不卡| 欧美伊人久久| 亚洲欧洲精品一区二区三区 | 欧美日韩精品欧美日韩精品| 亚洲性线免费观看视频成熟| 国产亚洲欧美色| 免费成人你懂的| 亚洲一级黄色片| 激情成人综合网| 欧美日韩一区三区| 久久精品人人爽| 一区二区三区精密机械公司| 国产一区二区三区四区老人| 欧美美女福利视频| 久久成人综合网| 一片黄亚洲嫩模| 在线不卡视频| 国产精品日韩欧美| 欧美成人伊人久久综合网| 亚洲摸下面视频| 亚洲国产国产亚洲一二三| 香蕉久久夜色| 亚洲精品麻豆| 国产亚洲欧美一区二区| 欧美日本免费一区二区三区| 久久精品国产2020观看福利| 99精品视频免费观看| 好男人免费精品视频| 国产精品久久久久久超碰| 免费亚洲网站| 欧美一区二区三区婷婷月色| 亚洲美女性视频| 在线不卡亚洲| 国产日韩精品一区二区三区 | 在线观看视频一区| 国产精品一卡二| 欧美日韩精品不卡| 免费短视频成人日韩| 久久国产精品黑丝| 亚洲女同性videos| 一本久道综合久久精品| 亚洲成色www久久网站| 国产日韩欧美在线看| 欧美性感一类影片在线播放 | 久久香蕉国产线看观看av| 亚洲欧美日韩在线| 一区二区av在线| 亚洲精品国产精品国产自| 国内激情久久| 国产精品夜夜夜| 国产精品福利在线| 欧美日韩国产小视频在线观看| 久久综合国产精品| 久久大香伊蕉在人线观看热2| 亚洲天堂av在线免费| 亚洲精品日韩激情在线电影| 在线看片日韩| 伊人久久大香线蕉综合热线 | 亚洲小视频在线| 亚洲最新视频在线| 亚洲国产日韩精品| 在线观看91精品国产入口| 国产午夜精品一区二区三区视频 | 久久青草久久| 久久久美女艺术照精彩视频福利播放| 亚洲综合丁香| 亚洲一区二区三区四区中文| 一本在线高清不卡dvd| 亚洲精品一区二| 亚洲精品国产精品国自产观看| 亚洲第一视频网站| 在线国产欧美| 亚洲国产成人在线视频| 亚洲成色精品| 亚洲国产精品小视频| 亚洲国产欧美日韩| 亚洲国产专区| 亚洲精选久久| 一区二区三区视频在线| 99在线视频精品| 中日韩男男gay无套| 亚洲无亚洲人成网站77777 | 六月丁香综合|