相關知識
常用 Spring Cache 緩存註解
- @CacheConfig 在類上設置當前緩存的一些公共設置,比如緩存名稱。
- @Cacheable 作用在方法上,表明該方法的結果可以緩存,如果緩存存在,則目標方法不會被調用,直接從緩存中獲取,如果緩存不存在,則執行方法體,並將結果存入緩存。
- @CacheEvice 作用在方法上,刪除緩存項或者清空緩存。
- @CachePut 作用在方法上,不管緩存是否存在,都會執行方法體,並將結果存入緩存。
- @Caching 作用在方法上,以上的註解如果需要同時註解多個,可以包在 @Caching 內
目標
使用 Redis 作爲緩存,實現對數據庫進行增刪改時,同步更新數據至緩存,查詢時優先從緩存中查找。
準備工作
創建表
DROP TABLE IF EXISTS `t_user`;
CREATE TABLE `t_user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_name` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,
`level` tinyint(2) NULL DEFAULT NULL,
`birth_day` date NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 16 CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Dynamic;
SET FOREIGN_KEY_CHECKS = 1;
操作步驟
添加依賴
配置
數據源、Redis、緩存進行配置。
- spring.cache.type 配置緩存類型,默認爲 simple,配置使用 redis 作爲緩存中間件,只需要配置 spring.cache.type 屬性爲 redis 即可
編碼
實體對象
因爲 Redis 初始化時,默認使用的序列化類是 JdkSerializationRedisSerializer,所以需要實體對象實現 Serializable 接口。
Repository 層代碼
Service 層代碼
對增刪查改方法添加緩存註解
啓動類
在啓動類上添加 @EnableCaching 註解,用於開啓緩存
驗證結果
可以看到,使用緩存之後,根據用戶ID獲取用戶數據時,並不執行SQL。
去到 Redis 進行查看,可以看到當前的 Redis Key 爲 user::12,其中 12 爲用戶的 ID
源碼地址
本章源碼 :https://github.com/caiyuanzi-song/boot.git
結束語
數據庫一直都是系統高性能的一個瓶頸,合理正確地使用緩存,可以大大提升系統性能。
但是隨之而來的是系統複雜度提高,有更多的問題需要處理,比如緩存一致性,緩存穿透,緩存雪崩等。