相關知識
常用 Spring Cache 緩存註解
- @CacheConfig 在類上設置當前緩存的一些公共設置,比如緩存名稱。
- @Cacheable 作用在方法上,表明該方法的結果可以緩存,如果緩存存在,則目標方法不會被調用,直接從緩存中獲取,如果緩存不存在,則執行方法體,並將結果存入緩存。
- @CacheEvice 作用在方法上,刪除緩存項或者清空緩存。
- @CachePut 作用在方法上,不管緩存是否存在,都會執行方法體,並將結果存入緩存。
- @Caching 作用在方法上,以上的註解如果需要同時註解多個,可以包在 @Caching 內
目標
使用 Redis 作為緩存,實現對數據庫進行增刪改時,同步更新數據至緩存,查詢時優先從緩存中查找。
準備工作
創建表
操作步驟
添加依賴
引入 Spring Boot Starter 父工程
添加 redis、jpa 及 mysql 的依賴,添加後的整體依賴如下
配置
數據源、Redis、緩存進行配置。
- spring.cache.type 配置緩存類型,默認為 simple,配置使用 redis 作為緩存中間件,只需要配置 spring.cache.type 屬性為 redis 即可
編碼
實體對象
因為 Redis 初始化時,默認使用的序列化類是 JdkSerializationRedisSerializer,所以需要實體對象實現 Serializable 接口。
Repository 層代碼
Service 層代碼
對增刪查改方法添加緩存註解
啟動類
在啟動類上添加 @EnableCaching 註解,用於開啟緩存
驗證結果
編寫測試用例
將 UserService 中的緩存相關注解全部註釋,執行測試用例,日誌顯示如下:
恢復緩存註解,再次執行測試用例,日誌顯示如下:
可以看到,使用緩存之後,根據用戶ID獲取用戶數據時,並不執行SQL。
去到 Redis 進行查看,可以看到當前的 Redis Key 為 user::12,其中 12 為用戶的 ID
源碼地址
本章源碼 : https://gitee.com/gongm_24/spring-boot-tutorial.git
結束語
數據庫一直都是系統高性能的一個瓶頸,合理正確地使用緩存,可以大大提升系統性能。
但是隨之而來的是系統複雜度提高,有更多的問題需要處理,比如緩存一致性,緩存穿透,緩存雪崩等。
閱讀更多 死牛胖子 的文章