SpringBoot系列:Spring Boot集成Spring Cache

一象浑、關于Spring Cache

緩存在現(xiàn)在的應用中越來越重要窖铡,
Spring從3.1開始定義了org.springframework.cache.Cache和org.springframework.cache.CacheManager接口來統(tǒng)一不同的緩存技術,并支持使用JCache(JSR-107)注解簡化我們開發(fā)衡载。

通過SpringCache搔耕,可以快速嵌入自己的Cache實現(xiàn),主要是@Cacheable痰娱、@CachePut弃榨、@CacheEvict菩收、@CacheConfig、@Caching等注解來實現(xiàn)鲸睛。

  • @Cacheable:作用于方法上娜饵,用于對于方法返回結果進行緩存,如果已經(jīng)存在該緩存官辈,則直接從緩存中獲取箱舞,緩存的key可以從入?yún)⒅兄付ǎ彺娴膙alue為方法返回值拳亿。
  • @CachePut:作用于方法上褐缠,無論是否存在該緩存,每次都會重新添加緩存风瘦,緩存的key可以從入?yún)⒅兄付ǘ游海彺娴膙alue為方法返回值,常用作于更新万搔。
  • @CacheEvict:作用于方法上胡桨,用于清除緩存。
  • @CacheConfig:作用在類上瞬雹,統(tǒng)一配置本類的緩存注解的屬性昧谊。
  • @Caching:作用于方法上,用于一次性設置多個緩存酗捌。
  • @EnableCaching:作用于類上呢诬,用于開啟注解功能。

二胖缤、演示示例

欲使用Spring Cache尚镰,需要先引入Spring Cache的依賴。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--Spring Cache依賴-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-cache</artifactId>
</dependency>

然后在啟動類上哪廓,我們需要使用@EnableCaching來聲明開啟緩存狗唉。

@EnableCaching //開啟緩存
@SpringBootApplication
public class SpringbootApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringbootApplication.class, args);
    }

}

這樣就可以使用注解來操作緩存了,創(chuàng)建CacheService類涡真,其中dataMap的Map存儲數(shù)據(jù)分俯,省去了數(shù)據(jù)庫的操作。

@Slf4j
@Service
public class CacheService {

    private Map<Integer, User> dataMap = new HashMap <Integer, User>(){
        {
            for (int i = 1; i < 100 ; i++) {
                User u = new User("code" + i, "name" + i);
                put(i, u);
            }
        }
     };

    // 獲取數(shù)據(jù)
    @Cacheable(value = "cache", key = "'user:' + #id")
    public User get(int id){
        log.info("通過id{}查詢獲取", id);
        return dataMap.get(id);
    }

    // 更新數(shù)據(jù)
    @CachePut(value = "cache", key = "'user:' + #id")
    public User set(int id, User u){
        log.info("更新id{}數(shù)據(jù)", id);
        dataMap.put(id, u);
        return u;
     }
     
    //刪除數(shù)據(jù)
    @CacheEvict(value = "cache", key = "'user:' + #id")
    public User del(int id){
        log.info("刪除id{}數(shù)據(jù)", id);
        dataMap.remove(id);
        return u;
    }

}

get方法模擬查詢哆料,@Cacheable用于添加緩存缸剪,set方法用于修改,@CachePut更新緩存东亦,del方法用于刪除數(shù)據(jù)杏节, @CacheEvict刪除緩存。需要注意的是,注解的value表示緩存分類拢锹,并不是指緩存的對象值谣妻。

然后在創(chuàng)建CacheApi,用于調用CacheService進行測試卒稳。

@RestController
@RequestMapping("cache")
public class CacheApi {

    @Autowired
    private CacheService cacheService;

    @GetMapping("get")
    public User  get(@RequestParam int id){
        return cacheService.get(id);
    }

    @PostMapping("set")
    public User  set(@RequestParam int id, @RequestParam String code, @RequestParam String name){
        User u = new User(code, name);
        return cacheService.set(id, u);
    }

    @DeleteMapping("del")
    public void  del(@RequestParam int id){
        cacheService.del(id);
    }

}

然后我們打開swagger-ui界面(http://localhost:10900/swagger-ui.html)進行測試蹋半,多次調用查詢,可以看到充坑, CacheService的get方法减江,對于同一id僅僅執(zhí)行一遍。然后再調用更新捻爷,再次get時辈灼,即可發(fā)現(xiàn)數(shù)據(jù)已經(jīng)更新,而調用del也榄,則可以清除緩存巡莹,再次查詢又會調用方法。

源碼地址:https://github.com/imyanger/springboot-project/tree/master/p20-springboot-cache

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末甜紫,一起剝皮案震驚了整個濱河市降宅,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌囚霸,老刑警劉巖腰根,帶你破解...
    沈念sama閱讀 219,039評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異拓型,居然都是意外死亡额嘿,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評論 3 395
  • 文/潘曉璐 我一進店門劣挫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來册养,“玉大人,你說我怎么就攤上這事揣云〔度澹” “怎么了冰啃?”我有些...
    開封第一講書人閱讀 165,417評論 0 356
  • 文/不壞的土叔 我叫張陵邓夕,是天一觀的道長。 經(jīng)常有香客問我阎毅,道長焚刚,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,868評論 1 295
  • 正文 為了忘掉前任扇调,我火速辦了婚禮矿咕,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己碳柱,他們只是感情好捡絮,可當我...
    茶點故事閱讀 67,892評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著莲镣,像睡著了一般福稳。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上瑞侮,一...
    開封第一講書人閱讀 51,692評論 1 305
  • 那天的圆,我揣著相機與錄音,去河邊找鬼半火。 笑死越妈,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的钮糖。 我是一名探鬼主播梅掠,決...
    沈念sama閱讀 40,416評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼店归!你這毒婦竟也來了瓤檐?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,326評論 0 276
  • 序言:老撾萬榮一對情侶失蹤娱节,失蹤者是張志新(化名)和其女友劉穎挠蛉,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體肄满,經(jīng)...
    沈念sama閱讀 45,782評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡谴古,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,957評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了稠歉。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片掰担。...
    茶點故事閱讀 40,102評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖怒炸,靈堂內(nèi)的尸體忽然破棺而出带饱,到底是詐尸還是另有隱情,我是刑警寧澤阅羹,帶...
    沈念sama閱讀 35,790評論 5 346
  • 正文 年R本政府宣布勺疼,位于F島的核電站,受9級特大地震影響捏鱼,放射性物質發(fā)生泄漏执庐。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,442評論 3 331
  • 文/蒙蒙 一导梆、第九天 我趴在偏房一處隱蔽的房頂上張望轨淌。 院中可真熱鬧迂烁,春花似錦、人聲如沸递鹉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽躏结。三九已至址芯,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間窜觉,已是汗流浹背谷炸。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留禀挫,地道東北人旬陡。 一個月前我還...
    沈念sama閱讀 48,332評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像语婴,于是被迫代替她去往敵國和親描孟。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,044評論 2 355

推薦閱讀更多精彩內(nèi)容