《Spring實戰(zhàn)》-第十三章:緩存數據(2)-在方法上使用緩存

慢來比較快有勾,虛心學技術

Spring 的緩存抽象在很大程度上是圍繞切面構建的仆邓。在 Spring 中啟用緩存時,會創(chuàng)建一個切面悼凑,它觸發(fā)一個或更多的 Spring 的緩存注解摊聋,Spring提供的緩存注解主要有以下幾個:


Ⅰ鸡捐、填充緩存

由上述注解可知,@Cacheable@CachePut注解可以往緩存填充內容麻裁,兩者的共有屬性有:

在最簡單的情況下箍镜,在 @Cacheable 和 @CachePut 的這些屬性中,只需使用 value 屬性指定一個或多個緩存即可

上一篇文章中我們介紹了Spring整合Redis的過程悲立,我們依舊使用Redis緩存了解Spring對緩存的抽象

我們事先編寫一個BaseDao作為操作基準

@Component
public class BaseDao {

    /**
     * 根據id獲取信息
     **/
    @Cacheable(value = "myCache")
    public String findOne(Integer id){
        System.out.println("執(zhí)行findOne方法鹿寨。。薪夕。脚草。");
        return "我是BaseDao"+id;
    }

    /**
     * 根據id更改信息
     **/
    @CachePut(value = "myCache")
    public String save(Integer id){
        System.out.println("執(zhí)行save方法。原献。馏慨。。姑隅。");
        return "BaseDao"+id;
    }

    /**
     * 根據id移除信息
     **/
    @CacheEvict(value = "myCache")
    public void remove(Integer id){
        System.out.println("執(zhí)行remove方法写隶。。讲仰。慕趴。。");
    }
}

編寫測試類:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {RedisCacheConfig.class})
public class AppTest {
    @Autowired
    private BaseDao baseDao;
}

測試使用@Cacheable存取數據

我們知道當緩存中沒有對應數據的時候鄙陡,會執(zhí)行使用了@Cacheable注解的方法冕房,并將結果存入緩存

如果緩存中已經存在對應數據,則直接將緩存數據返回:

@Test
public void testCacheAble(){
    System.out.println(this.baseDao.findOne(0));
    System.out.println(this.baseDao.findOne(0));
}

此處執(zhí)行兩次findOne(0)趁矾,測試結果:

執(zhí)行findOne方法耙册。。毫捣。详拙。
我是BaseDao0
我是BaseDao0

可以看到,此處只是實際上只有一次真正進入了findOne方法內蔓同,第二次從緩存中獲取數據饶辙,以下是redis-cli中看到的結果:

在緩存中,緩存的key值默認為 緩存名稱::傳參值

測試使用@CachePut更新數據

由于使用@CachePut注解默認每次都會進入方法并使用返回值更新緩存斑粱,所以該注解在實際業(yè)務中一般用在更新數據的方法上

@Test
public void testCachePut(){
    this.baseDao.save(0);
    this.baseDao.save(0);
    System.out.println(this.baseDao.findOne(0));
}

測試結果:

執(zhí)行save方法畸悬。。。蹋宦。披粟。
執(zhí)行save方法。冷冗。守屉。。蒿辙。
BaseDao0

可以看到拇泛,此處兩次執(zhí)行save方法都進入了,執(zhí)行save之后再調用findOne方法思灌,依舊直接從緩存取值俺叭,緩存已更新

自定義緩存的key

@Cacheable@CachePut 都有一個名為 key 屬性,這個屬性能夠替換默認的 key 泰偿,它是通過一個 SpEL 表達式計算得到的

如將上述findOne()和save()方法緩存的key定義為BaseDao的class

@Cacheable(value = "myCache",key = "#root.targetClass")
public String findOne(Integer id){
    System.out.println("執(zhí)行findOne方法熄守。。耗跛。裕照。");
    return "我是BaseDao"+id;
}

@CachePut(value = "myCache",key = "#root.targetClass")
public String save(Integer id){
    System.out.println("執(zhí)行save方法。调塌。晋南。。羔砾。");
    return "BaseDao"+id;
}

再次執(zhí)行測試testCacheAble()方法:

執(zhí)行findOne方法负间。。姜凄。政溃。
我是BaseDao0
我是BaseDao0

可以看到緩存如下:使用class com.my.spring.dao.BaseDao作為緩存的key

Ⅱ、移除緩存

使用@CacheEvict測試移除緩存

@Test
public void testCacheEvict(){
    this.baseDao.remove(0);
}

執(zhí)行測試結果:

執(zhí)行remove方法檀葛。。腹缩。屿聋。。

緩存已經清除:

此時再去訪問findOne(),結果:

執(zhí)行findOne方法藏鹊。润讥。。盘寡。
我是BaseDao0
我是BaseDao0
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末楚殿,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子竿痰,更是在濱河造成了極大的恐慌脆粥,老刑警劉巖砌溺,帶你破解...
    沈念sama閱讀 216,651評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異变隔,居然都是意外死亡规伐,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 92,468評論 3 392
  • 文/潘曉璐 我一進店門匣缘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來猖闪,“玉大人,你說我怎么就攤上這事肌厨∨嗷牛” “怎么了?”我有些...
    開封第一講書人閱讀 162,931評論 0 353
  • 文/不壞的土叔 我叫張陵柑爸,是天一觀的道長吵护。 經常有香客問我,道長竖配,這世上最難降的妖魔是什么何址? 我笑而不...
    開封第一講書人閱讀 58,218評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮进胯,結果婚禮上用爪,老公的妹妹穿的比我還像新娘。我一直安慰自己胁镐,他們只是感情好偎血,可當我...
    茶點故事閱讀 67,234評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著盯漂,像睡著了一般颇玷。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上就缆,一...
    開封第一講書人閱讀 51,198評論 1 299
  • 那天帖渠,我揣著相機與錄音,去河邊找鬼竭宰。 笑死空郊,一個胖子當著我的面吹牛,可吹牛的內容都是我干的切揭。 我是一名探鬼主播狞甚,決...
    沈念sama閱讀 40,084評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼廓旬!你這毒婦竟也來了哼审?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,926評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎涩盾,沒想到半個月后十气,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 45,341評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡旁赊,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,563評論 2 333
  • 正文 我和宋清朗相戀三年桦踊,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片终畅。...
    茶點故事閱讀 39,731評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡籍胯,死狀恐怖,靈堂內的尸體忽然破棺而出离福,到底是詐尸還是另有隱情杖狼,我是刑警寧澤,帶...
    沈念sama閱讀 35,430評論 5 343
  • 正文 年R本政府宣布妖爷,位于F島的核電站蝶涩,受9級特大地震影響,放射性物質發(fā)生泄漏絮识。R本人自食惡果不足惜绿聘,卻給世界環(huán)境...
    茶點故事閱讀 41,036評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望次舌。 院中可真熱鬧熄攘,春花似錦、人聲如沸彼念。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽逐沙。三九已至哲思,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間吩案,已是汗流浹背棚赔。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留徘郭,地道東北人靠益。 一個月前我還...
    沈念sama閱讀 47,743評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像崎岂,于是被迫代替她去往敵國和親捆毫。 傳聞我的和親對象是個殘疾皇子闪湾,可洞房花燭夜當晚...
    茶點故事閱讀 44,629評論 2 354

推薦閱讀更多精彩內容