springboot+cache緩存下(原理篇)

原理

1.自動配置類;CacheAutoConfiguration

在idea中使用快捷鍵ctrl+shift+n,查找出CacheAutoConfiguration類

看到import中有導入CacheConfigurationImportSelector類,我們通過對這個類進行debug查看過程中我們導入哪些選擇器。

可以看到返回如下的配置

2.緩存的配置類

org.springframework.boot.autoconfigure.cache.GenericCacheConfiguration
org.springframework.boot.autoconfigure.cache.JCacheCacheConfiguration
org.springframework.boot.autoconfigure.cache.EhCacheCacheConfiguration
org.springframework.boot.autoconfigure.cache.HazelcastCacheConfiguration
org.springframework.boot.autoconfigure.cache.InfinispanCacheConfiguration
org.springframework.boot.autoconfigure.cache.CouchbaseCacheConfiguration
org.springframework.boot.autoconfigure.cache.RedisCacheConfiguration
org.springframework.boot.autoconfigure.cache.CaffeineCacheConfiguration
org.springframework.boot.autoconfigure.cache.SimpleCacheConfiguration
org.springframework.boot.autoconfigure.cache.NoOpCacheConfiguration

3.哪個配置生效

在application的配置文件中,添加如下語句

#控制檯打印配置信息
debug=true

可以看到哪些配置項生效

分析下SimpleCacheConfiguration

4.給容器中註冊了CacheManger:ConcurrentMapCacheManager

5.可以獲取和創建ConcurrentMapCache類型的緩存組件,它的作用是將數據保存在ConcurrentMap中;

運行的流程

@Cacheable

  1. 方法運行之前,先去查詢cache(緩存組件),按照cacheName指定的名字獲取;(cacheManager先獲取相應的緩存),第一次獲取如果沒有Cache組件會自動創建。
  2. 去cache中查找緩存的內容,使用一個key,默認是方法的參數;key是按照某種策略生成的,默認是使用keyGenerator生成的,默認使用SimpleKeyGenerator生成key;SimpleKeyGenerator生成可以的莫仍策略;如果沒有參數;key=new SimpleKey();如果有一個參數:key=參數的值;如果有多個參數:key = new Simplekey(params);
  3. 沒有查到緩存就調用目標方法;
  4. 將目標方法返回的結果。放進緩存中;

@Cacheable標註的方法執行之前先來檢查緩存中有沒有這個數據,默認按照參數的值作爲key去查詢緩存,如果沒有就運行方法並將結果放入緩存。以後再來調用就可以直接使用緩存中的數據。

核心:
1)使用cacheManager【ConcurrentMapCacheManager】按照名字得到【ConcurrentMapCache】組件
2)key使用keyGenerator生成的,默認是simpleKeyGenerator

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