Spring Boot并不直接支持二級緩存的功能,但可以通過集成其他框架來實現。
一種常見的做法是使用Spring Data JPA結合Hibernate實現二級緩存。具體步驟如下:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-ehcache</artifactId>
</dependency>
<dependency>
<groupId>net.sf.ehcache</groupId>
<artifactId>ehcache</artifactId>
</dependency>
spring.jpa.properties.hibernate.cache.use_second_level_cache=true
spring.jpa.properties.hibernate.cache.region.factory_class=org.hibernate.cache.ehcache.EhCacheRegionFactory
spring.jpa.properties.hibernate.cache.provider_configuration_file_resource_path=ehcache.xml
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://www.ehcache.org/ehcache.xsd"
updateCheck="true"
monitoring="autodetect"
dynamicConfig="true">
<diskStore path="java.io.tmpdir"/>
<defaultCache
maxEntriesLocalHeap="10000"
eternal="false"
timeToIdleSeconds="120"
timeToLiveSeconds="120"
diskExpiryThreadIntervalSeconds="120"
memoryStoreEvictionPolicy="LRU">
</defaultCache>
<cache name="com.example.entity.User"
maxEntriesLocalHeap="10000"
eternal="false"
timeToIdleSeconds="120"
timeToLiveSeconds="120"
diskExpiryThreadIntervalSeconds="120"
memoryStoreEvictionPolicy="LRU">
</cache>
</ehcache>
@Cacheable
注解,啟用緩存功能:@Entity
@Table(name = "user")
@Cacheable
public class User {
// ...
}
這樣,當使用JPA查詢實體對象時,Hibernate會自動查找二級緩存。首次查詢時,會將數據從數據庫加載到緩存中;后續查詢時,會先嘗試從緩存中獲取數據,如果緩存中不存在,則再從數據庫中加載。
需要注意的是,二級緩存只適用于讀取頻繁、對數據一致性要求不高的場景。在寫入、更新或刪除數據時,需要手動刷新或清除緩存,以保證緩存與數據庫的一致性。