Cacheable原理與運行流程

簡介

將方法的運行結(jié)果進行緩存;以后再要相同的數(shù)據(jù)轮听,直接從緩存中獲取,不用調(diào)用方法师枣; CacheManager管理多個Cache組件,對緩存的真正CRUD操作在Cache組件中萧落,每一個緩存組件有自己唯一一個名字践美;

原理

  1、自動配置類找岖;CacheAutoConfiguration
  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.GuavaCacheConfiguration
        org.springframework.boot.autoconfigure.cache.SimpleCacheConfiguration【默認】
        org.springframework.boot.autoconfigure.cache.NoOpCacheConfiguration
 3、哪個配置類默認生效:SimpleCacheConfiguration宣增;
 4玫膀、給容器中注冊了一個CacheManager:ConcurrentMapCacheManager
 5矛缨、可以獲取和創(chuàng)建ConcurrentMapCache類型的緩存組件爹脾;他的作用將數(shù)據(jù)保存在ConcurrentMap中帖旨;

運行流程

       @Cacheable:
        1、方法運行之前灵妨,先去查詢Cache(緩存組件)解阅,按照cacheNames指定的名字獲取泌霍;
           (CacheManager先獲取相應(yīng)的緩存)货抄,第一次獲取緩存如果沒有Cache組件會自動創(chuàng)建。
        2朱转、去Cache中查找緩存的內(nèi)容蟹地,使用一個key,默認就是方法的參數(shù)藤为;
           key是按照某種策略生成的怪与;默認是使用keyGenerator生成的,默認使用SimpleKeyGenerator生成key缅疟;
               SimpleKeyGenerator生成key的默認策略分别;
                       如果沒有參數(shù);key=new SimpleKey()存淫;
                       如果有一個參數(shù):key=參數(shù)的值
                       如果有多個參數(shù):key=new SimpleKey(params)耘斩;
        3、沒有查到緩存就調(diào)用目標方法桅咆;
        4括授、將目標方法返回的結(jié)果,放進緩存
        @Cacheable標注的方法執(zhí)行之前先來檢查緩存中有沒有這個數(shù)據(jù)岩饼,默認按照參數(shù)的值作為key去查詢緩存刽脖,
        如果沒有就運行方法并將結(jié)果放入緩存;以后再來調(diào)用就可以直接使用緩存中的數(shù)據(jù)忌愚;

核心

        1)曲管、使用CacheManager【ConcurrentMapCacheManager】按照名字得到Cache【ConcurrentMapCache】組件
        2)、key使用keyGenerator生成的硕糊,默認是SimpleKeyGenerator

屬性

       cacheNames/value:指定緩存組件的名字;將方法的返回結(jié)果放在哪個緩存中院水,是數(shù)組的方式,可以指定多個緩存简十;
      key:緩存數(shù)據(jù)使用的key檬某;可以用它來指定。默認是使用方法參數(shù)的值  1-方法的返回值
                編寫SpEL螟蝙; #i d;參數(shù)id的值   #a0  #p0  #root.args[0]
                 getEmp[2]
     keyGenerator:key的生成器恢恼;可以自己指定key的生成器的組件id
                 key/keyGenerator:二選一使用;
    
        cacheManager:指定緩存管理器;或者cacheResolver指定獲取解析器
    
        condition:指定符合條件的情況下才緩存胰默;
                 ,condition = "#id>0"
              condition = "#a0>1":第一個參數(shù)的值》1的時候才進行緩存
   
          unless:否定緩存场斑;當unless指定的條件為true漓踢,方法的返回值就不會被緩存;可以獲取到結(jié)果進行判斷
                  unless = "#result == null"
               unless = "#a0==2":如果第一個參數(shù)的值是2漏隐,結(jié)果不緩存喧半;
        sync:是否使用異步模式
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市青责,隨后出現(xiàn)的幾起案子挺据,更是在濱河造成了極大的恐慌,老刑警劉巖脖隶,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件扁耐,死亡現(xiàn)場離奇詭異,居然都是意外死亡产阱,警方通過查閱死者的電腦和手機做葵,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來心墅,“玉大人酿矢,你說我怎么就攤上這事≡踉铮” “怎么了瘫筐?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵,是天一觀的道長铐姚。 經(jīng)常有香客問我策肝,道長,這世上最難降的妖魔是什么隐绵? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任之众,我火速辦了婚禮,結(jié)果婚禮上依许,老公的妹妹穿的比我還像新娘棺禾。我一直安慰自己,他們只是感情好峭跳,可當我...
    茶點故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布膘婶。 她就那樣靜靜地躺著,像睡著了一般蛀醉。 火紅的嫁衣襯著肌膚如雪悬襟。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天拯刁,我揣著相機與錄音脊岳,去河邊找鬼。 笑死,一個胖子當著我的面吹牛割捅,可吹牛的內(nèi)容都是我干的奶躯。 我是一名探鬼主播,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼棺牧,長吁一口氣:“原來是場噩夢啊……” “哼巫糙!你這毒婦竟也來了朗儒?” 一聲冷哼從身側(cè)響起颊乘,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎醉锄,沒想到半個月后乏悄,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡恳不,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年檩小,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片烟勋。...
    茶點故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡规求,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出卵惦,到底是詐尸還是另有隱情阻肿,我是刑警寧澤,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布沮尿,位于F島的核電站丛塌,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏畜疾。R本人自食惡果不足惜赴邻,卻給世界環(huán)境...
    茶點故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望啡捶。 院中可真熱鬧姥敛,春花似錦、人聲如沸瞎暑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽金顿。三九已至臊泌,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間揍拆,已是汗流浹背渠概。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人播揪。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓贮喧,卻偏偏與公主長得像,于是被迫代替她去往敵國和親猪狈。 傳聞我的和親對象是個殘疾皇子箱沦,可洞房花燭夜當晚...
    茶點故事閱讀 43,472評論 2 348