springboot學習(六)整合緩存框架


Spring Boot + Spring Cache + Redis

在Spring Boot中,可以非常方便的使用Redis來作為Cache的實現,進而實現數據的緩存。

  • 添加依賴

        <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-data-redis</artifactId>
       </dependency>
       <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-cache</artifactId>
       </dependency>
  • 配置Redis和cache

spring.redis.port=6379
spring.redis.host=127.0.0.1
spring.cache.cache-names=c1

在啟動類上開啟緩存,使用注解 @EnableCaching

完成了這些配置之后,Spring Boot就會自動幫我們在后台配置一個RedisCacheManager,相關的配置是在org.springframework.boot.autoconfigure.cache.RedisCacheConfiguration類中完成的。

系統會自動提供一個RedisCacheManager的Bean,這個RedisCacheManager間接實現了Spring中的Cache接口,有了這個Bean,我們就可以直接使用Spring中的緩存注解和接口了,而緩存數據則會被自動存儲到Redis上。在單機的Redis中,這個Bean系統會自動提供,如果是Redis集群,這個Bean需要開發者來提供

  • 緩存相關注解

    • @CacheConfig,在類上使用,用來描述該類中所有方法使用的緩存名稱,當然也可以不使用該注解,直接在具體的緩存注解上配置名稱

    • @Cacheable,這個注解一般加在查詢方法上,表示將一個方法的返回值緩存起來,默認情況下,緩存的key就是方法的參數,緩存的value就是方法的返回值;當有多個參數時,默認就使用多個參數來做key,如果只需要其中某一個參數做key,則可以在@Cacheable注解中,通過key屬性來指定key

    • @CachePut,這個注解一般加在更新方法上,當數據庫中的數據更新后,緩存中的數據也要跟着更新,使用該注解,可以將方法的返回值自動更新到已經存在的key上

    • @CacheEvict,這個注解一般加在刪除方法上,當數據庫中的數據刪除后,相關的緩存數據也要自動清除,該注解在使用的時候也可以配置按照某種條件刪除(condition屬性)或者或者配置清除所有緩存(allEntries屬性)

Spring Boot + Spring Cache + Ehcache

Spring Cache 可以整合 Redis,當然也可以整合 Ehcache,兩種緩存方案的整合還是比較相似,主要是配置的差異,具體的用法是一模一樣的,就類似於 JDBC 和 數據庫驅動的關系一樣。前面配置完成后,后面具體使用的 API 都是一樣的。

  • 添加依賴

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<dependency>
   <groupId>org.ehcache</groupId>
   <artifactId>ehcache</artifactId>
   <version>3.8.1</version>
</dependency>
  • 添加Ehcache配置 ehcache.xml

<?xml version="1.0" encoding="utf-8"?>

<ehcache>
 <diskStore path="java.io.tmpdir/shiro-spring-sample"/>  
 <defaultCache maxElementsInMemory="10000" eternal="false" timeToIdleSeconds="120" timeToLiveSeconds="120" overflowToDisk="false" diskPersistent="false" diskExpiryThreadIntervalSeconds="120"/>  
 <cache name="user" maxElementsInMemory="10000" eternal="true" overflowToDisk="true" diskPersistent="true" diskExpiryThreadIntervalSeconds="600"/>
</ehcache>

配置含義:

  1. name:緩存名稱。

  2. maxElementsInMemory:緩存最大個數。

  3. eternal:對象是否永久有效,一但設置了,timeout將不起作用。

  4. timeToIdleSeconds:設置對象在失效前的允許閑置時間(單位:秒)。僅當eternal=false對象不是永久有效時使用,可選屬性,默認值是0,也就是可閑置時間無窮大。

  5. timeToLiveSeconds:設置對象在失效前允許存活時間(單位:秒)。最大時間介於創建時間和失效時間之間。僅當eternal=false對象不是永久有效時使用,默認是0.,也就是對象存活時間無窮大。

  6. overflowToDisk:當內存中對象數量達到maxElementsInMemory時,Ehcache將會對象寫到磁盤中。

  7. diskSpoolBufferSizeMB:這個參數設置DiskStore(磁盤緩存)的緩存區大小。默認是30MB。每個Cache都應該有自己的一個緩沖區。

  8. maxElementsOnDisk:硬盤最大緩存個數。

  9. diskPersistent:是否緩存虛擬機重啟期數據。

  10. diskExpiryThreadIntervalSeconds:磁盤失效線程運行時間間隔,默認是120秒。

  11. memoryStoreEvictionPolicy:當達到maxElementsInMemory限制時,Ehcache將會根據指定的策略去清理內存。默認策略是LRU(最近最少使用)。你可以設置為FIFO(先進先出)或是LFU(較少使用)。

  12. clearOnFlush:內存數量最大時是否清除。

  13. diskStore 則表示臨時緩存的硬盤目錄。

  • 開啟緩存,使用 @EnableCaching

  • 緩存注解 同 spring boot + spring cache + redis

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM