大家在項目開發過程中,或多或少都用過緩存,為了減少數據庫的壓力,把數據放在緩存當中,當訪問的請求過來時,直接從緩存讀取。緩存一般都是基於內存的,讀取速度比較快,市面上比較常見的緩存有:memcache、redis、mongodb、guava cache等。
緩存的常規用法
大家使用緩存時,常用的邏輯時這樣的:
- 根據條件生成key;
- 從緩存中讀取數據,若成功讀取數據,則返回;
- 若數據不存在,根據條件從數據庫讀取;
- 將從數據庫中讀取的數據放入緩存;
- 返回數據;
每一個使用緩存的場景,上面的邏輯都要重寫一遍,是不是很煩躁,是不是很浪費時間。有沒有簡單的方法完成上面的邏輯?當然有了,這就是今天要向大家介紹的Spring Cache。
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。
還有其他的關鍵字,在這里沒有列出來,比如:
- sync :true或false,當並發量非常大時,將同步開啟,可以保證只有一個線程執行方法,其他線程將等待,然后從緩存中讀取數據。
- condition:使用緩存的條件。
- keyGenerator:指定key的生成器。
我們啟動項目,並在瀏覽器第一次訪問http://localhost:8080/cache/test?name=allen,結果響應很慢,過了5秒后,頁面顯示結果:

我們在看一下后台日志:

打印語句打印出來了,說明第一次訪問時,是執行了方法的。我們再在瀏覽器請求相同的地址,結果返回了相同的結果,而且后台沒有打印出日志,和上面兩張圖一模一樣。說明這次請求走了緩存,方法並沒有執行。
總結
怎么樣?@Cacheable很好用吧,大家趕快動手,在項目中實踐一下吧,有問題評論區留言哦