Spring Boot企業(yè)級(jí)開發(fā)教程(第2版) 課件 第6章 Spring Boot整合緩存_第1頁(yè)
Spring Boot企業(yè)級(jí)開發(fā)教程(第2版) 課件 第6章 Spring Boot整合緩存_第2頁(yè)
Spring Boot企業(yè)級(jí)開發(fā)教程(第2版) 課件 第6章 Spring Boot整合緩存_第3頁(yè)
Spring Boot企業(yè)級(jí)開發(fā)教程(第2版) 課件 第6章 Spring Boot整合緩存_第4頁(yè)
Spring Boot企業(yè)級(jí)開發(fā)教程(第2版) 課件 第6章 Spring Boot整合緩存_第5頁(yè)
已閱讀5頁(yè),還剩71頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第6章SpringBoot整合緩存《SpringBoot企業(yè)級(jí)開發(fā)教程(第2版)》學(xué)習(xí)目標(biāo)/Target了解SpringBoot默認(rèn)緩存方案,能夠說出默認(rèn)緩存方案的執(zhí)行流程掌握聲明式緩存注解,能夠說出@EnableCaching、@Cacheable、@CachePut、@CacheEvict、@Caching、@CacheConfig注解及常用屬性的作用掌握聲明式緩存注解的應(yīng)用,能夠在SpringBoot項(xiàng)目中正確應(yīng)用聲明式緩存注解學(xué)習(xí)目標(biāo)/Target了解Ehcache概述,能夠說出Ehcache的特點(diǎn)掌握整合Ehcache,能夠在SpringBoot項(xiàng)目中整合Ehcache,并正確應(yīng)用聲明式緩存注解掌握SpringBoot整合Redis緩存,能夠在SpringBoot項(xiàng)目中整合Redis緩存,并正確應(yīng)用聲明式緩存注解章節(jié)概述/Summary企業(yè)級(jí)應(yīng)用為了避免讀取數(shù)據(jù)時(shí)受限于數(shù)據(jù)庫(kù)的訪問效率而導(dǎo)致整體系統(tǒng)性能偏低,通常會(huì)在應(yīng)用程序與數(shù)據(jù)庫(kù)之間建立一種臨時(shí)的數(shù)據(jù)存儲(chǔ)機(jī)制,該臨時(shí)存儲(chǔ)數(shù)據(jù)的區(qū)域稱為緩存。緩存是一種介于數(shù)據(jù)永久存儲(chǔ)介質(zhì)與應(yīng)用程序之間的數(shù)據(jù)臨時(shí)存儲(chǔ)介質(zhì),可以提供臨時(shí)的數(shù)據(jù)存儲(chǔ)空間,合理使用緩存可以有效減少低速數(shù)據(jù)讀?。ɡ绱疟PIO)過程的次數(shù),以提高系統(tǒng)性能。SpringBoot提供了幾乎所有主流緩存技術(shù)的整合方案。下面將對(duì)SpringBoot整合常見的緩存技術(shù)進(jìn)行講解。目錄/Contents6.16.2SpringBoot默認(rèn)緩存管理SpringBoot整合Ehcache緩存6.3SpringBoot整合Redis緩存SpringBoot默認(rèn)緩存管理6.16.1

SpringBoot默認(rèn)緩存管理Spring框架支持透明地向應(yīng)用程序添加緩存,以及對(duì)緩存進(jìn)行管理,其管理緩存的核心是將緩存應(yīng)用于操作數(shù)據(jù)的方法,從而減少操作數(shù)據(jù)的執(zhí)行次數(shù),同時(shí)不會(huì)對(duì)程序本身造成任何干擾。SpringBoot繼承了Spring框架的緩存管理功能,下面將對(duì)SpringBoot內(nèi)置的緩存方案進(jìn)行講解。6.1.1

SpringBoot默認(rèn)緩存方案先定一個(gè)小目標(biāo)!

先定一個(gè)小目標(biāo)!了解SpringBoot默認(rèn)緩存方案,能夠說出默認(rèn)緩存方案的執(zhí)行流程6.1.1

SpringBoot默認(rèn)緩存方案Spring的緩存機(jī)制將提供的緩存作用于Java方法上,基于緩存中的可用信息,可以減少方法的執(zhí)行次數(shù)。每次目標(biāo)方法調(diào)用時(shí),抽象使用緩存行為來檢查執(zhí)行方法,即檢查執(zhí)行方法是否給定了緩存的執(zhí)行參數(shù),如果是,則返回緩存結(jié)果,不執(zhí)行具體方法;如果否,則執(zhí)行方法,并將結(jié)果緩存后,返回給用戶。Spring的默認(rèn)的緩存方案通過org.springframework.cache.Cache和org.springframework.cache.CacheManager接口來統(tǒng)一不同的緩存技術(shù)。Cache接口:緩存的組件定義規(guī)范,包含緩存的各種操作集合。Spring中為Cache接口提供了各種緩存的實(shí)現(xiàn):RedisCache,EhCache,ConcurrentMapCache等CacheManager接口:緩存管理器,基于緩存名稱對(duì)緩存進(jìn)行管理,并制定了管理Cache的規(guī)則。6.1.1

SpringBoot默認(rèn)緩存方案在項(xiàng)目中添加某個(gè)緩存管理組件(如Redis)后,SpringBoot項(xiàng)目會(huì)選擇并啟用對(duì)應(yīng)的緩存管理器。如果項(xiàng)目中同時(shí)添加了多個(gè)緩存組件,且沒有定義類型為CacheManager的Bean組件或者名為cacheResolver的緩存解析器,SpringBoot將嘗試按以下列表的順序查找有效的緩存組件進(jìn)行緩存管理。(1)Generic(2)JCache(EhCache3、Hazelcast、Infinispan等)(3)EhCache2.x(4)Hazelcast(5)Infinispan(6)Couchbase(7)Redis(8)Caffeine(9)Simple6.1.2

聲明式緩存注解先定一個(gè)小目標(biāo)!

先定一個(gè)小目標(biāo)!掌握聲明式緩存注解,能夠說出@EnableCaching、@Cacheable、@CachePut、@CacheEvict、@Caching、@CacheConfig注解及常用屬性的作用6.1.2

聲明式緩存注解要想使用Spring提供的默認(rèn)緩存,需要對(duì)緩存進(jìn)行聲明,也就是標(biāo)志緩存的方法及緩存策略。對(duì)于緩存聲明,Spring提供了一系列的注解,使用這些注解可以實(shí)現(xiàn)Spring默認(rèn)的基于注解的緩存管理。1.@EnableCaching注解@EnableCaching是Spring框架提供的用于開啟基于注解的緩存支持的注解,當(dāng)配置類上使用@EnableCaching注解,會(huì)默認(rèn)提供CacheManager的實(shí)現(xiàn),并通過AOP將緩存行為添加到應(yīng)用程序。執(zhí)行操作時(shí),會(huì)檢查是否已經(jīng)存在注解對(duì)應(yīng)的緩存。如果找到了,就會(huì)自動(dòng)創(chuàng)建一個(gè)代理攔截方法調(diào)用,使用緩存的Bean執(zhí)行處理。6.1.2

聲明式緩存注解2.@Cacheable注解@Cacheable注解用于標(biāo)注可緩存的方法,通常標(biāo)注的方法為數(shù)據(jù)查詢方法。標(biāo)注@Cacheable注解的方法在執(zhí)行時(shí),會(huì)先查詢緩存,如果查詢到的緩存為空,則執(zhí)行該方法,并將方法的執(zhí)行結(jié)果添加到緩存;如果查詢到緩存數(shù)據(jù),則不執(zhí)行該方法,而是直接使用緩存數(shù)據(jù)。6.1.2

聲明式緩存注解2.@Cacheable注解@Cacheable注解提供了多個(gè)屬性,用于對(duì)緩存進(jìn)行相關(guān)配置。屬性名說明value/cacheNames指定緩存的名稱,必備屬性,這兩個(gè)屬性二選一使用key指定緩存數(shù)據(jù)的key,默認(rèn)使用方法參數(shù)值,可以使用SpEL表達(dá)式keyGenerator指定緩存數(shù)據(jù)的key的生成器,與key屬性二選一使用cacheManager指定緩存管理器cacheResolver指定緩存解析器,與cacheManager屬性二選一使用condition指定在符合某條件下進(jìn)行數(shù)據(jù)緩存unless指定在符合某條件下不進(jìn)行數(shù)據(jù)緩存sync指定是否使用異步緩存,默認(rèn)為false@Cacheable注解屬性及說明6.1.2

聲明式緩存注解2.@Cacheable注解(1)value/cacheNames屬性value和cacheNames屬性作用相同,用于指定緩存的名稱,方法的返回結(jié)果會(huì)存放在指定名稱的緩存中。這兩個(gè)屬于必備選項(xiàng),且要二選一使用。如果@Cacheable注解只配置value或者cacheNames屬性,那么屬性名可以省略。@Cacheable("book")publicBookfindById(Integerid){ returnbookDao.findById(id).get();}6.1.2

聲明式緩存注解2.@Cacheable注解(1)value/cacheNames屬性@Cacheable注解中可以指定多個(gè)緩存的名稱,以便使用多個(gè)緩存。@Cacheable({"book","hotBook"})publicBookfindById(Integerid){ returnbookDao.findById(id).get();}6.1.2

聲明式緩存注解2.@Cacheable注解(2)key屬性緩存的本質(zhì)是鍵值對(duì)存儲(chǔ),key用于指定唯一的標(biāo)識(shí),value用于指定緩存的數(shù)據(jù),所以每次調(diào)用緩存方法都會(huì)轉(zhuǎn)換為訪問緩存的鍵。緩存的鍵通過key屬性進(jìn)行指定,進(jìn)行數(shù)據(jù)緩存時(shí),如果沒有指定key屬性,SpringBoot默認(rèn)配置類SimpleKeyGenerator中的generateKey(Object...params)方法會(huì)根據(jù)方法參數(shù)生成key值。對(duì)于沒有參數(shù)的方法,其key是默認(rèn)創(chuàng)建的空參SimpleKey[]對(duì)象;對(duì)于一個(gè)參數(shù)的方法,其key是默認(rèn)參數(shù)值;對(duì)于有多個(gè)參數(shù)的方法,其key是包含所有參數(shù)的SimpleKey對(duì)象。6.1.2

聲明式緩存注解2.@Cacheable注解(2)key屬性如果方法有多個(gè)參數(shù),但是部分參數(shù)對(duì)緩存沒有任何用處,通常會(huì)選擇手動(dòng)指定key屬性的值,key屬性的值可以通過SpEL表達(dá)式選擇所需要的參數(shù)。@Cacheable(cacheNames="book",key="#id")publicBookfindBookById(Integerid,booleanincludeUsed){ returnbookDao.findById(id).get();}6.1.2

聲明式緩存注解2.@Cacheable注解Cache緩存支持的SpEL表達(dá)式及說明參數(shù)名位置描述示例methodNameroot對(duì)象當(dāng)前被調(diào)用的方法名#root.methodNamemethodroot對(duì)象當(dāng)前被調(diào)用的方法#targetroot對(duì)象當(dāng)前被調(diào)用的目標(biāo)對(duì)象實(shí)例#root.targettargetClassroot對(duì)象當(dāng)前被調(diào)用的目標(biāo)對(duì)象的類#root.targetClassargsroot對(duì)象當(dāng)前被調(diào)用的方法的參數(shù)列表#root.args[0]cachesroot對(duì)象當(dāng)前被調(diào)用的方法的緩存列表#root.caches[0].nameargumentName執(zhí)行上下文當(dāng)前被調(diào)用的方法參數(shù),可以用#參數(shù)名或者#a0、#p0的形式(0代表參數(shù)索引,從0開始)#comment_id、#a0、#p0result執(zhí)行上下文當(dāng)前方法執(zhí)行后的返回結(jié)果#result6.1.2

聲明式緩存注解2.@Cacheable注解(3)keyGenerator屬性keyGenerator屬性與key屬性本質(zhì)作用相同,都是用于指定緩存數(shù)據(jù)的key,只不過keyGenerator屬性指定的不是具體的key值,而是key值的生成器規(guī)則,由其中指定的生成器生成具體的key。使用時(shí),keyGenerator屬性與key屬性要二者選一。關(guān)于自定義key值生成器的定義,可以參考SpringBoot默認(rèn)配置類SimpleKeyGenerator的定義方式,這里不再做具體說明。6.1.2

聲明式緩存注解2.@Cacheable注解(4)cacheManager/cacheResolver屬性cacheManager和cacheResolver屬性分別用于指定緩存管理器和緩存解析器,這兩個(gè)屬性也是二選一使用,默認(rèn)情況不需要配置,對(duì)于需要使用多個(gè)緩存管理器(如Redis、Ehcache等)的應(yīng)用,可以為每個(gè)操作設(shè)置一個(gè)緩存管理器或緩存解析器。6.1.2

聲明式緩存注解2.@Cacheable注解(5)condition屬性condition屬性用于對(duì)數(shù)據(jù)進(jìn)行有條件的選擇性存儲(chǔ),只有當(dāng)指定條件為true時(shí)才會(huì)對(duì)查詢結(jié)果進(jìn)行緩存,可以使用SpEL表達(dá)式指定屬性值。@Cacheable(cacheNames="book",condition="#id>1")publicBookfindBook(Integerid){ returnbookDao.findById(id).get();}6.1.2

聲明式緩存注解2.@Cacheable注解(6)unless屬性u(píng)nless屬性的作用與condition屬性相反,當(dāng)指定的條件為true時(shí),方法的返回值不會(huì)被緩存,也可以使用SpEL表達(dá)式指定。@Cacheable(cacheNames="book",unless="#result==null")publicBookfindBook(Integerid){ returnbookDao.findById(id).get();}6.1.2

聲明式緩存注解2.@Cacheable注解(7)sync屬性在多線程程序中,某些操作可能會(huì)同時(shí)引用相同的參數(shù),導(dǎo)致相同的對(duì)象被計(jì)算好幾次,從而達(dá)不到緩存的目的。對(duì)于這種情況,可以使用sync屬性,sync屬性表示數(shù)據(jù)緩存過程中是否使用同步模式,默認(rèn)值為false,通常不會(huì)使用該屬性。6.1.2

聲明式緩存注解3.@CachePut注解@CachePut注解的作用是更新緩存數(shù)據(jù),當(dāng)需要更新緩存且不影響方法執(zhí)行時(shí),可以使用@CachePut注解,通常用在數(shù)據(jù)更新方法上。@CachePut注解的執(zhí)行順序是,先進(jìn)行方法調(diào)用,然后將方法結(jié)果更新到緩存中。@CachePut注解也提供了多個(gè)屬性,這些屬性與@Cacheable注解的屬性完全相同。通常不建議在同一個(gè)方法同時(shí)使用@CachePut和@Cacheable注解,這兩個(gè)注解關(guān)注不同的行為,@CachePut注解會(huì)強(qiáng)制執(zhí)行方法并進(jìn)行緩存更新,使用@Cacheable注解時(shí),如果請(qǐng)求能夠在緩存中獲取到對(duì)應(yīng)的數(shù)據(jù),就不會(huì)執(zhí)行當(dāng)前被@Cacheable注解標(biāo)注的方法。6.1.2

聲明式緩存注解4.@CacheEvict注解@CacheEvict注解的作用刪除緩存中的數(shù)據(jù),通常標(biāo)注在數(shù)據(jù)刪除方法上。@CacheEvict注解的默認(rèn)執(zhí)行順序是先進(jìn)行方法調(diào)用,然后將緩存清除。@CacheEvict注解也提供了多個(gè)屬性,這些屬性與@Cacheable注解的屬性基本相同,除此之外,還額外提供了兩個(gè)特殊屬性allEntries和beforeInvocation,下面對(duì)這兩個(gè)屬性分別進(jìn)行講解。6.1.2

聲明式緩存注解4.@CacheEvict注解(1)allEntries屬性allEntries屬性表示是否清除指定緩存空間中的所有緩存數(shù)據(jù),默認(rèn)值為false,即默認(rèn)只刪除指定key對(duì)應(yīng)的緩存數(shù)據(jù)。@CacheEvict(cacheNames="book",allEntries=true)publicvoiddelById(Integerid){ bookDao.deleteById(id);}6.1.2

聲明式緩存注解4.@CacheEvict注解(2)beforeInvocation屬性beforeInvocation屬性表示是否在方法執(zhí)行之前進(jìn)行緩存清除,默認(rèn)值為false,即默認(rèn)在執(zhí)行方法后再進(jìn)行緩存清除。@CacheEvict(cacheNames="book",beforeInvocation=true)publicvoiddelById(Integerid){ bookDao.deleteById(id);}6.1.2

聲明式緩存注解5.@Caching注解如果不同緩存之間的條件或者鍵表達(dá)式不同,就需要指定相同類型的多個(gè)注解,例如需要同時(shí)指定多個(gè)@CacheEvict或@CachePut,這個(gè)時(shí)候可以使用@Caching注解。@Caching注解用于針對(duì)復(fù)雜規(guī)則的數(shù)據(jù)緩存管理,@Caching注解中允許使用多個(gè)嵌套的

@Cacheable

、@CachePut

@CacheEvict。在@Caching注解內(nèi)部包含有Cacheable、put和evict三個(gè)屬性,分別對(duì)應(yīng)于@Cacheable、@CachePut和@CacheEvict三個(gè)注解。@Caching(evict={@CacheEvict("primary"),@CacheEvict(cacheNames="secondary",key="#date")})publicvoiddelById(Integerid,Datedate){ bookDao.deleteById(id);}6.1.2

聲明式緩存注解6.@CacheConfig注解@CacheConfig注解使用在類上,主要用于統(tǒng)籌管理類中所有使用@Cacheable、@CachePut和@CacheEvict注解標(biāo)注方法中的公共屬性。@CacheConfig(cacheNames="book")@ServicepublicclassBookService{@AutowiredprivateBookRepositorybookRepository;@CacheablepublicBookfindById(Integerid){returnbookRepository.findById(id).get();}}6.1.3

聲明式緩存注解的應(yīng)用先定一個(gè)小目標(biāo)!

先定一個(gè)小目標(biāo)!掌握聲明式緩存注解的應(yīng)用,能夠在SpringBoot項(xiàng)目中正確應(yīng)用聲明式緩存注解6.1.3

聲明式緩存注解的應(yīng)用1.創(chuàng)建項(xiàng)目下面在SpringBoot項(xiàng)目中進(jìn)一步對(duì)聲明式緩存注解的應(yīng)用進(jìn)行講解。在IDEA中創(chuàng)建SpringBoot項(xiàng)目chapter06,讀者可以根據(jù)自己當(dāng)前情況選擇使用SpringInitializr方式或者M(jìn)aven方式進(jìn)行創(chuàng)建,在此選擇使用Maven方式創(chuàng)建項(xiàng)目。6.1.3

聲明式緩存注解的應(yīng)用2.配置依賴為了更好地演示應(yīng)用緩存后的效果,創(chuàng)建的SpringBoot項(xiàng)目中整合了SpringMVC、SpringDataJPA、MySQL。在項(xiàng)目chapter06的pom.xml文件中配置SpringMVC、SpringDataJPA、MySQL,以及SpringBoot提供的緩存啟動(dòng)器的依賴,具體如文件6-1所示。文件6-1pom.xml源代碼6.1.3

聲明式緩存注解的應(yīng)用3.設(shè)置配置信息在項(xiàng)目的resources目錄下創(chuàng)建application.yml文件,在該文件中指定數(shù)據(jù)庫(kù)連接信息和JPA的配置信息,具體如文件6-2所示。文件6-2application.xml源代碼6.1.3

聲明式緩存注解的應(yīng)用4.創(chuàng)建實(shí)體類在項(xiàng)目的java目錄下創(chuàng)建包c(diǎn)om.itheima.chapter06.entity,并在該包下創(chuàng)建實(shí)體類Book,具體如文件6-3所示。文件6-3Book.java源代碼6.1.3

聲明式緩存注解的應(yīng)用5.創(chuàng)建Repository接口在java目錄下創(chuàng)建包c(diǎn)om.itheima.chapter06.dao,在該包下自定義接口BookRepository繼承JpaRepository接口,具體如文件6-4所示。文件6-4BookRepository.java源代碼6.1.3

聲明式緩存注解的應(yīng)用6.創(chuàng)建Service接口和實(shí)現(xiàn)類在項(xiàng)目的java目錄下創(chuàng)建包c(diǎn)om.itheima.chapter06.service,并在該包下創(chuàng)建Service接口和實(shí)現(xiàn)類,具體如文件6-5和文件6-6所示。文件6-5BookService.java文件6-6BookServiceImpl.java源代碼6.1.3

聲明式緩存注解的應(yīng)用7.創(chuàng)建控制器類在項(xiàng)目的java目錄下創(chuàng)建包c(diǎn)om.itheima.chapter06.controller,并在該包下創(chuàng)建控制器類BookController,在該類中定義查詢、更新、刪除圖書信息的方法,具體如文件6-7所示。文件6-7BookController.java源代碼6.1.3

聲明式緩存注解的應(yīng)用8.創(chuàng)建項(xiàng)目啟動(dòng)類在項(xiàng)目的java目錄下的com.itheima.chapter06包下創(chuàng)建SpringBoot項(xiàng)目的啟動(dòng)類,在啟動(dòng)類上開啟緩存,具體如文件6-8所示。文件6-8Chapter06Application.java源代碼6.1.3

聲明式緩存注解的應(yīng)用9.測(cè)試緩存效果運(yùn)行文件6-8后,在瀏覽器中訪問http://localhost:8080/book/findById/3,查詢圖書信息,控制臺(tái)輸出信息。6.1.3

聲明式緩存注解的應(yīng)用9.測(cè)試緩存效果查詢圖書信息后,瀏覽器中查詢到圖書信息。6.1.3

聲明式緩存注解的應(yīng)用9.測(cè)試緩存效果再次在瀏覽器中訪問http://localhost:8080/book/findById/3,查詢id為3的圖書信息,控制臺(tái)輸出信息。6.1.3

聲明式緩存注解的應(yīng)用9.測(cè)試緩存效果在瀏覽器中訪問http://localhost:8080/book/editById/3/西游釋厄傳,將id為3的圖書名稱更新為“西游釋厄傳”,此時(shí)控制臺(tái)輸出信息。6.1.3

聲明式緩存注解的應(yīng)用9.測(cè)試緩存效果更新圖書信息后,瀏覽器中查詢圖書信息。6.1.3

聲明式緩存注解的應(yīng)用9.測(cè)試緩存效果瀏覽器中訪問http://localhost:8080/book/delById/3,刪除id為3的圖書信息,控制臺(tái)輸出信息。6.1.3

聲明式緩存注解的應(yīng)用9.測(cè)試緩存效果在瀏覽器中再次訪問http://localhost:8080/book/findById/3,查詢id為3的圖書信息,控制臺(tái)輸出信息。SpringBoot整合Ehcache緩存6.26.2

SpringBoot整合Ehcache緩存Spring提供的緩存是一種抽象的服務(wù),開發(fā)人員只需引入緩存接口的具體實(shí)現(xiàn),而不必編寫緩存的具體邏輯,便于進(jìn)行緩存技術(shù)的開發(fā)與管理。在SpringBoot項(xiàng)目中,只需要引入對(duì)應(yīng)緩存實(shí)現(xiàn)的依賴,即可使用該緩存,其中Ehcache是當(dāng)前最快的Java緩存之一,下面對(duì)SpringBoot整合Ehcache緩存的相關(guān)內(nèi)容進(jìn)行講解。6.2.1

Ehcache概述先定一個(gè)小目標(biāo)!

先定一個(gè)小目標(biāo)!了解Ehcache概述,能夠說出Ehcache的特點(diǎn)6.2.1

Ehcache概述Ehcache是一種開源的的緩存框架,它配置簡(jiǎn)單、結(jié)構(gòu)清晰、功能強(qiáng)大,是當(dāng)前使用最廣泛的基于Java語(yǔ)言的緩存之一。Ehcache可以很便捷地與其他流行的庫(kù)和框架進(jìn)行集成,其中,Hibernate默認(rèn)的緩存提供者就是EhCache。Ehcache能夠成為目前使用最廣泛的緩存框架之一,主要得益于它的以下幾個(gè)特點(diǎn)。1.快速輕量2.伸縮性3.靈活性4.標(biāo)準(zhǔn)支持5.可擴(kuò)展性6.監(jiān)聽器7.Java企業(yè)級(jí)應(yīng)用緩存8.開源協(xié)議Apache2.0license6.2.1

Ehcache概述Ehcache支持分層緩存,所有分層緩存都可以單獨(dú)使用,如下為Ehcache支持的分層選項(xiàng)。堆:堆內(nèi)存速度快,不需要序列化,但是容量有限。OffHeap(堆外):OffHeap存儲(chǔ)只在企業(yè)版本的Ehcache中提供,原理是利用NIO的DirectByteBuffers實(shí)現(xiàn),比存儲(chǔ)到磁盤上快,而且完全不受GC(GarbageCollection,垃圾收集)的影響,可以保證響應(yīng)時(shí)間的穩(wěn)定性;OffHeap存儲(chǔ)的對(duì)象必須在存儲(chǔ)過程中進(jìn)行序列化,讀取則進(jìn)行反序列化操作,它的速度大約比堆內(nèi)存儲(chǔ)慢一個(gè)數(shù)量級(jí)。磁盤:“磁盤”層數(shù)據(jù)存儲(chǔ)在硬盤上,磁盤越快、越專用,訪問數(shù)據(jù)的速度就越快。在磁盤寫入/讀取的數(shù)據(jù)必須序列化/反序列化,因此磁盤存儲(chǔ)比堆存儲(chǔ)和OffHeap存儲(chǔ)要慢。集群:使用集群層存儲(chǔ)意味著客戶端連接到Terracotta服務(wù)器陣列,緩存的數(shù)據(jù)存儲(chǔ)在Terracotta服務(wù)器,這也是JVM之間共享緩存的一種方式。6.2.1

Ehcache概述如果需要使用多個(gè)層,必須遵守如下要求。(1)在多層設(shè)置中必須始終存在堆層。(2)不能將磁盤層和集群層組合在一起。(3)層的大小應(yīng)該按照金字塔的方式調(diào)整,也就是說,金字塔上更高的層比更低的層使用更少的內(nèi)存。6.2.2

整合Ehcache先定一個(gè)小目標(biāo)!

先定一個(gè)小目標(biāo)!掌握整合Ehcache,能夠在SpringBoot項(xiàng)目中整合Ehcache,并正確應(yīng)用聲明式緩存注解6.2.2

整合Ehcache1.配置依賴在項(xiàng)目chapter06的pom.xml文件中配置添加Ehcache的依賴。pom.xml源代碼6.2.2

整合Ehcache2.設(shè)置配置信息在項(xiàng)目chapter06的application.yml文件中添加Ehcache的相關(guān)配置。application.yml源代碼6.2.2

整合Ehcache2.設(shè)置配置信息在項(xiàng)目chapter06的resources目錄下創(chuàng)建文件ehcache.xml,在該文件中添加Ehcache的相關(guān)配置,具體如文件6-9所示。文件6-9ehcache.xml源代碼6.2.2

整合Ehcache3.設(shè)置實(shí)體類由于本案例要將緩存序列化到本地磁盤,所以需要業(yè)務(wù)中操作的實(shí)體類需要實(shí)現(xiàn)序列化接口。將文件文件6-3中的Book類實(shí)現(xiàn)序列化接口,修改后如文件6-10所示。文件6-10Book.java源代碼6.2.2

整合Ehcache4.測(cè)試緩存效果運(yùn)行文件6-8后,在瀏覽器中訪問http://localhost:8080/book/findById/5,查詢圖書信息,控制臺(tái)輸出信息。6.2.2

整合Ehcache4.測(cè)試緩存效果查詢圖書信息后,瀏覽器中查詢到圖書信息。6.2.2

整合Ehcache4.測(cè)試緩存效果再次在瀏覽器中訪問http://localhost:8080/book/findById/5,查詢id為5的圖書信息,控制臺(tái)輸出信息。6.2.2

整合Ehcache4.測(cè)試緩存效果在瀏覽器中訪問http://localhost:8080/book/editById/5/觀堂別集,將id為5的圖書名稱更新為“觀堂別集”,此時(shí)控制臺(tái)輸出信息。6.2.2

整合Ehcache4.測(cè)試緩存效果更新圖書信息后,瀏覽器中查詢到圖書信息。6.2.2

整合Ehcache4.測(cè)試緩存效果單擊IDEA控制臺(tái)左側(cè)的

按鈕,正常關(guān)閉

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論