Spring還能夠這樣用緩存,你知道嗎?

你們在項目開發過程當中,或多或少都用過緩存,爲了減小數據庫的壓力,把數據放在緩存當中,當訪問的請求過來時,直接從緩存讀取。緩存通常都是基於內存的,讀取速度比較快,市面上比較常見的緩存有:memcache、redis、mongodb、guava cache等。html

緩存的常規用法

你們使用緩存時,經常使用的邏輯時這樣的:redis

  1. 根據條件生成key;
  2. 從緩存中讀取數據,若成功讀取數據,則返回;
  3. 若數據不存在,根據條件從數據庫讀取;
  4. 將從數據庫中讀取的數據放入緩存;
  5. 返回數據;

每個使用緩存的場景,上面的邏輯都要重寫一遍,是否是很煩躁,是否是很浪費時間。有沒有簡單的方法完成上面的邏輯?固然有了,這就是今天要向你們介紹的Spring Cache。mongodb

Spring Cache

Spring Cache並不神祕,並且使用起來很是的方便。它是註解組成的,最經常使用的一個註解是@Cacheable。這個註解是在方法上使用的,當使用了註解的方法被調用時,會先從緩存中查詢,若是緩存中不存在,則執行方法,而後將方法的返回值放入緩存中。具體的使用方法以下:數據庫

緩存還能夠這樣玩 你知道嗎?

 

首先,咱們在IDEA中使用Spring Boot搭建環境,在選擇依賴的頁面中,咱們選擇了Lombok和Cache,最主要的選擇Cache哦~ 項目搭建完畢後,咱們看一下pom.xml的依賴:瀏覽器

緩存還能夠這樣玩 你知道嗎?

 

咱們看到在依賴中自動添加了cache。接下來咱們要在SpringBoot的啓動類上加上使用cache的註解@EnableCaching,如圖:緩存

緩存還能夠這樣玩 你知道嗎?

 

而後咱們編寫測試的controller,以下:併發

緩存還能夠這樣玩 你知道嗎?

 

咱們使用@RestController註解,因此它返回的是Json格式的結果。而後在方法上使用了@Cacheable註解,這是咱們今天的主角。測試

  • cacheNames:當系統中有多個緩存時,指定該方法使用其中的哪幾個緩存。
  • key:緩存的key,可使用spEL表達式,上面的例子中,使用了入參name。

還有其餘的關鍵字,在這裏沒有列出來,好比:spa

  • sync :true或false,當併發量很是大時,將同步開啓,能夠保證只有一個線程執行方法,其餘線程將等待,而後從緩存中讀取數據。
  • condition:使用緩存的條件。
  • keyGenerator:指定key的生成器。

咱們啓動項目,並在瀏覽器第一次訪問http://localhost:8080/cache/test?name=allen,結果響應很慢,過了5秒後,頁面顯示結果:線程

緩存還能夠這樣玩 你知道嗎?

 

咱們在看一下後臺日誌:

緩存還能夠這樣玩 你知道嗎?

 

打印語句打印出來了,說明第一次訪問時,是執行了方法的。咱們再在瀏覽器請求相同的地址,結果返回了相同的結果,並且後臺沒有打印出日誌,和上面兩張圖如出一轍。說明此次請求走了緩存,方法並無執行。

總結

怎麼樣?@Cacheable很好用吧,你們趕快動手,在項目中實踐一下吧,有問題評論區留言哦

原文出處:https://www.cnblogs.com/boboooo/p/11248145.html

相關文章
相關標籤/搜索