相关知识
常用 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
结束语
数据库一直都是系统高性能的一个瓶颈,合理正确地使用缓存,可以大大提升系统性能。
但是随之而来的是系统复杂度提高,有更多的问题需要处理,比如缓存一致性,缓存穿透,缓存雪崩等。