在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
配置含義:
-
name:緩存名稱。
-
maxElementsInMemory:緩存最大個數。
-
eternal:對象是否永久有效,一但設置了,timeout將不起作用。
-
timeToIdleSeconds:設置對象在失效前的允許閑置時間(單位:秒)。僅當eternal=false對象不是永久有效時使用,可選屬性,默認值是0,也就是可閑置時間無窮大。
-
timeToLiveSeconds:設置對象在失效前允許存活時間(單位:秒)。最大時間介於創建時間和失效時間之間。僅當eternal=false對象不是永久有效時使用,默認是0.,也就是對象存活時間無窮大。
-
overflowToDisk:當內存中對象數量達到maxElementsInMemory時,Ehcache將會對象寫到磁盤中。
-
diskSpoolBufferSizeMB:這個參數設置DiskStore(磁盤緩存)的緩存區大小。默認是30MB。每個Cache都應該有自己的一個緩沖區。
-
maxElementsOnDisk:硬盤最大緩存個數。
-
diskPersistent:是否緩存虛擬機重啟期數據。
-
diskExpiryThreadIntervalSeconds:磁盤失效線程運行時間間隔,默認是120秒。
-
memoryStoreEvictionPolicy:當達到maxElementsInMemory限制時,Ehcache將會根據指定的策略去清理內存。默認策略是LRU(最近最少使用)。你可以設置為FIFO(先進先出)或是LFU(較少使用)。
-
clearOnFlush:內存數量最大時是否清除。
-
diskStore 則表示臨時緩存的硬盤目錄。
-
開啟緩存,使用 @EnableCaching
-
緩存注解 同 spring boot + spring cache + redis