Spring Boot 學習筆記(九) 數據緩存

數據緩存:

Spring 緩存支持:

Spring定義了org.springframework.cache.CacheManager和org.springframework.cache.Cache接口用來統一不同的緩存的技術。

CacheManager是Spring提供的各種緩存技術抽象接口

Cache接口包含緩存的各種操作(增加、刪除、獲得緩存,一般不會直接和此接口打交道。)

1、Spring支持的CacheManager

針對不同的緩存技術,需要實現不同的CacheManager:

這裏寫圖片描述

在我們使用任意一個實現的CacheManager的時候,需註冊實現的CacheManager的Bean。

例:

@Bean
public EhCacheCacheManager cacheManager(CacheManager ehCacheCacheManager){
       return new EhCacheCacheManager(ehCacheCacheManager);
}

每種緩存技術都有很多的額外配置,但配置cacheManager是必不可少的。

2、聲明式緩存註解:

Spring提供了4個註解來聲明緩存規則(也是使用註解式的AOP)

這裏寫圖片描述

3、開啓聲明式緩存支持:

開啓聲明式緩存支持十分簡單,只需在配置類上使用@EnableCaching註解即可,例:

@Configuration
@EnableCaching
public class AppConfig{
}

Spring Boot 的支持

Spring中使用緩存技術的關鍵是配置CacheManager,而Spring Boot爲我們配置了多個CacheManager的實現。

Spring Boot的CacheManager的自動配置放置在org.springframework.boot.autoconfigure.cache:

這裏寫圖片描述

從圖中可以看出,Spring Boot爲我們自動配置了:

EhCacheCacheConfiguration:(使用EhCache)
GenericCacheConfiguration:(使用Collection)
GuavaCacheConfiguration:(使用Guava)
HazelcastCacheConfiguration:(使用Hazelcast)
InfinispanCacheConfiguration:(使用Infinispan)
JCacheCacheConfiguration:(使用JCache)
NoOpCacheConfiguration:(不使用存儲)
RedisCacheConfiguration:(使用Redis)
SimpleCacheConfiguration:(使用ConcurrentMap)

默認情況下,使用的是SimpleCacheConfiguration,即使用ConcurrentMapCacheManager。

Spring Boot 支持以”spring.cache”爲前綴的屬性來配置緩存。

spring.cache.type = #可選generic,ehcache,hazelcast,infinispan,jcache,redis,guava,simple,none
spring.cache.cache-names = #程序啓動時創建緩存名稱
spring.cache.ehcache.config = # ehcache配置文件地址
spring.cache.hazelcast.config = # hazelcast 配置文件地址
spring.cache.infinispan.config =# infinispan 配置文件地址
spring.cache.jcache.config = #jcache配置文件地址
spring.cache.jcache.provider=#當多個jcache實現在類路徑中的時候,指定jcache實現
spring.cache.guava.spec = #guava specs

在Spring Boot環境下,使用緩存技術只需在項目中導入相關緩存技術的依賴包,並在配置類使用@EnableCaching即可。

例子:

這個例子以Spring Boot 默認的ConcurrentMapCacheManager作爲緩存技術,演示@Cacheable、@CachePut、@CacheEvit,最後使用EhCache、Guava來替換緩存技術。

1、新建Spring Boot項目

這裏寫圖片描述

使用docker,添加Oracle JDBC驅動,並在application.properties配置相關屬性

2、實體類

這裏寫圖片描述

3、實體類Repository

這裏寫圖片描述

4、業務服務

這裏寫圖片描述
這裏寫圖片描述

5、控制器

這裏寫圖片描述

6、開啓緩存支持

這裏寫圖片描述

這裏講一下@CachePut 和 @Cacheable 區別 :

@CachePut:
緩存新增或更新的數據到緩存。

@Cacheable:
當重複使用相同參數調用方法的時候,方法本身不會被調用執行,即方法本身被略過了,取而代之的是方法的結果直接從緩存中找到並返回了。

也就是說:
@CachePut和@Cacheable這兩個標籤可以結合使用,當需要根據請求改變值的時候,利用@CachePut將值改變並寫入到緩存中,而@Cacheable標籤除了第一次之外,一直是取的緩存的值。

但是需要注意的是:
1、必須是同一個緩存實例。
2、key值必須是相同的。

也就是說key和value要相同。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章