SpringBoot高級(一)SpringBoot與緩存


SpringBoot與緩存
一、SR107

Java Caching定義了5個核心接口,分別是CachingProvider, CacheManager, Cache, Entry和Expiry。

  • CachingProvider定義了創建、配置、獲取、管理和控制多個CacheManager。一個應用可以在運行期訪問多個CachingProvider。
  • CacheManager定義了創建、配置、獲取、管理和控制多個唯一命名的Cache,這些Cache存在於CacheManager的上下文中。一個CacheManager僅被一個CachingProvider所擁有。
  • Cache是一個類似Map的數據結構並臨時存儲以Key為索引的值。一個Cache僅被一個CacheManager所擁有。
  • Entry是一個存儲在Cache中的key-value對。
  • Expiry每一個存儲在Cache中的條目有一個定義的有效期。一旦超過這個時間,條目為過期的狀態。一旦過期,條目將不可訪問、更新和刪除。緩存有效期可以通過ExpiryPolicy設置。

 

使用JSR107需要導入如下包

<dependency>
<groupId>javax.cache</groupId>
<artifactId>cache-api</artifactId>
</dependency>

 

二、Spring緩存抽象
Spring從3.1開始定義了org.springframework.cache.Cache和org.springframework.cache.CacheManager接口來統一不同的緩存技術;並支持使用JCache(JSR-107)注解簡化我們開發;

  • Cache接口為緩存的組件規范定義,包含緩存的各種操作集合;
  • Cache接口下Spring提供了各種xxxCache的實現;如RedisCache,EhCacheCache , ConcurrentMapCache等;
  • 每次調用需要緩存功能的方法時,Spring會檢查檢查指定參數的指定的目標方法是否已經被調用過;如果有就直接從緩存中獲取方法調用后的結果,如果沒有就調用方法並緩存結果后返回給用戶。下次調用直接從緩存中獲取。
  • 使用Spring緩存抽象時我們需要關注以下兩點;
  1. 確定方法需要被緩存以及他們的緩存策略
  2. 從緩存中讀取之前緩存存儲的數據

 

 

三、 幾個重要概念和緩存注解

Cache 緩存接口,定義緩存操作。實現有: RedisCacheEhCacheCache
ConcurrentMapCache
CacheManager 緩存管理器,管理各種緩存(Cache)組件
@Cacheable 主要針對方法配置,能夠根據方法的請求參數對其結果進行緩存
@CacheEvict 清空緩存
@CachePut 保證方法被調用,又希望結果被緩存。
@EnableCaching 開啟基於注解的緩存
keyGenerator 緩存數據時key生成策略
serialize 緩存數據時value序列化策略



簡要說明:

  • @Cacheable注解加載方法中,那么該方法第一次會查詢數據庫,然后就會吧數據放在緩存中,使用Cache 進行數據的讀取等操作。
  • @CacheEvict刪除緩存,例如根據id刪除用戶,那么也要刪除緩存中的用戶信息
  • @CachePut更新緩存,例如更新用戶信息后,同時也要更新緩存中的用戶信息

Cache SpEL available metadata

名字 位置 描述 示例
methodName root object 當前被調用的方法名 #root.methodName
method root object 當前被調用的方法 #root.method.name
target root object 當前被調用的目標對象 #root.target
targetClass root object 當前被調用的目標對象類 #root.targetClass
args root object 當前被調用的方法的參數列表 #root.args[0]
caches root object 當前方法調用使用的緩存列表(如@Cacheable(value={"cache1",
"cache2"})), 則有兩個cache
#root.caches[0].name
argument
name
evaluation context 方法參數的名字. 可以直接 #參數名 ,也可以使用 #p0或#a0 的
形式, 0代表參數的索引;
#iban #a0 #p0
result evaluation context 方法執行后的返回值(僅當方法執行之后的判斷有效,如
unless’
’cache put’的表達式 ’cache evict’的表達式
beforeInvocation=false
#result

四、緩存使用

1、引入spring-boot-starter-cache模塊
2、 @EnableCaching開啟緩存
3、使用緩存注解
4、切換為其他緩存

五、 整合redis實現緩存

1. 引入spring-boot-starter-data-redis
2. application.yml配置redis連接地址
3. 使用RestTemplate操作redis
1. redisTemplate.opsForValue();//操作字符串
2. redisTemplate.opsForHash();//操作hash
3. redisTemplate.opsForList();//操作list
4. redisTemplate.opsForSet();//操作set
5. redisTemplate.opsForZSet();//操作有序set
4. 配置緩存、 CacheManagerCustomizers
5. 測試使用緩存、 切換緩存、 CompositeCacheManager

 


免責聲明!

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



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