Spring Cache 集成 Redis 缓存
概述
本文介绍 spring cache 使用 redis 缓存的极简配置方法,你只要复制粘贴相关内容即可完成配置。另外 ORM 框架使用 mybatis plus,但这不是重点。配置分为以下几步:
- 创建 spring web 项目;
- 引入相关依赖;
- Redis 配置和数据库基本配置;
- 开启 spring cache;
- 配置 CacheManager;
- 使用 spring cache 注解。
注:Spring boot 版本是 2.7.6。
创建项目
直接使用 idea 创建一个 spring web 项目,这一步比较简单,如果有同学不知道,直接看这里的说明吧。
引入依赖
由于我们需要使用 redis 缓存数据,因此引入 spring-boot-starter-data-redis。后面的两个是为了操作数据库而引入的,如果你的项目不使用 mybatis plus,可不必加入此依赖。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
如果我们还想使用 mybatis plus 的代码生成器,我们可以引入:
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.5.3</version>
</dependency>
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.31</version>
</dependency>
以下是代码生成器的使用方法示例:
public static void main(String[] args) {
String url = "jdbc:mysql://192.168.2.2/your_dbname?useUnicode=true&characterEncoding=utf-8";
FastAutoGenerator.create(url, "user", "passwd")
.globalConfig(builder -> {
builder.author("verytools") // 设置作者
.dateType(DateType.TIME_PACK)
.fileOverride()
.outputDir("/path/to/code/output"); // 指定代码输出目录
})
.packageConfig(builder -> {
// 生成的代码的包名为 c.yourpack.order
builder.parent("c.yourpack") // 设置包名
.moduleName("order") // 设置模块名
.pathInfo(Collections.singletonMap(OutputFile.xml, "/path/to/mapper")); // 设置mapperXml生成路径
})
.strategyConfig(builder -> {
builder.addInclude("some_table") // 设置需要生成的表名
.addTablePrefix("sys_"); // 设置过滤表前缀
})
.templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板
.execute();
}
Redis 配置和数据库基本配置
在 application.properties 中加入以下配置,注意修改配置的值,按照实际情况修改。
spring.datasource.name=your_dbname
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://192.168.2.2/your_dbname?useUnicode=true&characterEncoding=utf-8
spring.datasource.username=root
spring.datasource.password=123456
# redis config
spring.redis.port=6379
spring.redis.host=127.0.0.1
spring.redis.password=
spring.redis.database=4
开启 Spring Cache
@SpringBootApplication
@MapperScan("com.yourpack")
@EnableCaching
public class YourOwesomeApplication {
public static void main(String[] args) {
SpringApplication.run(YourOwesomeApplication.class, args);
}
}
开启 spring cache,只需要加上 @EnableCaching
即可。@MapperScan("com.yourowesome")
是扫描指定包路径下的 mybatis mapper 接口。
配置 CacheManager
CacheManager 是用来管理缓存的,一个项目可能会用到多个缓存,例如这里我们配置了两个缓存,名字分别为 yourCache1 和 yourCache2。他们都采用默认配置,唯一不同的是这两个缓存中 key 的过期时间不同,第一个过期时间是 10 分钟,第二个是 20 分钟。
@Configuration
public class CacheConfig {
@Bean
public RedisCacheManagerBuilderCustomizer redisCacheManagerBuilderCustomizer() {
return (builder) -> builder
.withCacheConfiguration("yourCache1",
RedisCacheConfiguration.defaultCacheConfig().entryTtl(Duration.ofMinutes(10)))
.withCacheConfiguration("yourCache2",
RedisCacheConfiguration.defaultCacheConfig().entryTtl(Duration.ofMinutes(20)));
}
}
使用 Spring Cache 注解
经过以上配置,我们就可以愉快的使用 spring cache 注解来完成数据的缓存了。
@Service
public class OrderService extends ServiceImpl<OrderMapper, Order> {
@CacheEvict(allEntries = true, cacheNames = "yourCache1")
public void deleteById(String id) {
getBaseMapper().deleteById(id);
}
@Cacheable(cacheNames = "yourCache1")
public List<Order> getList() {
return getBaseMapper().selectList(null);
}
}
有问题吗?点此反馈!
温馨提示:反馈需要登录