日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Springboot整合缓存

發布時間:2023/12/13 javascript 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Springboot整合缓存 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

JSR107

Java Cashing定義了5個核心接口,分別是

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

他們之間的關系如下圖所示

Spring保留了CacheManager和Cache來簡化開發。CacheManager來管理Cache,Cache來執行增刪改查等具體功能

幾個重要的概念和緩存注解

@Cacheable具體內容講解

  • 將方法的運行結果進行緩存;以后要再相同的數據,直接從緩存中獲取數據,不再調用方法
  • CacheManager管理多個Cache組件,對于緩存的操作都是在Cache組件中,每一個緩存主鍵都有自己唯一一個名字;
  • CacheNames/Value:指定緩存主鍵的名字
  • key:緩存數據使用的key,用它指定,默認是使用方法的參數值,value是方法的返回值
  • keyGenerator:key的生成器,我們可以自己指定key生成器的組件id;但是只可以二選一使用
  • cacheManager:指定緩存的管理器,或者cacheResolver指定獲取解析器
  • condition:指定符合條件的情況下,才緩存
  • unless:否定緩存,當unless指定的條件為true,方法的返回值就不會被緩存,可以獲取到結果進行判斷unless = “#result == null”
  • sync:是否使用異步模式

?

機制

1,自動配置類CacheCacheAutoConfigConfiguration

2,緩存的配置類

3,哪個配置類生效呢?根據配置規則,如果匹配成功,顯示matched;否則顯示did not match

4,如果匹配,給容器注冊了一個CacheManager

5,可以獲取和創建ConcurrentMapCache類型的緩存主鍵,它將數據保存在ConcurrentMap中

使用緩存的運行流程

  • 方法運行之前,先去查詢緩存cache(緩存組件),按照cacheNames指定的名字獲取,CacheManager先獲取相應的緩存,如果是第一次操作,緩存組件不存在,cache會自動創建
  • 去cache中查找緩存的內容,使用是key,默認key是方法傳入的參數,key是按照某種策略生成的,默認是使用keyGenerator生成的,默認使用SimpleKeyGenerator生成的key;SimpleKeyGenerator生成的key的默認策略;1,如果沒有參數,key=new SimpleKey();2,單個參數,key=參數值;3,多個參數,key=new SimpleKey(params);
  • 沒有查到緩存就調用目標方法
  • 將目標方法返回的結果,放進緩存
  • @Cacheable標注的方法執行之前先來檢查緩存中有沒有這個數據,默認按照參數的key去查詢緩存,如果沒有就將運行方法放入緩存,以后再次調用,就可以直接使用緩存中的數據

    @CachePut

    • 既調用方法,又更新緩存(同步同步緩存,前提是取和放的key是同一個key)
    • 修改了數據庫的每個數據,同時更新緩存

    1,先調用方發

    2,將目標的緩存更新到數據庫

    @Cacheable不能使用#result取回返回結果

    @CacheEvict

  • 當刪除數據的時候,清除其對應的緩存
  • key:指定要清除的數據
  • allEntries = true;將這個混存所有的數據都刪除
  • @beforeInvocation默認等于false,意思是是否在方法執行之前執行清除緩存數據
  • @beforeInvocation改為true,代表緩存的清除是在方法運行之前,無論方法的正確與否,都會清除緩存
  • @Caching可以配置多個復雜規則

    • cachable
    • put
    • evict

    總結

    以上是生活随笔為你收集整理的Springboot整合缓存的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。