1. 简介
Redis是一个开源的内存数据存储系统,可以用作数据库、缓存和消息中间件。Spring Boot是一种快速构建基于Spring框架应用的方法,可以用来构建Web应用、REST API等。在本文中,我们将会讨论如何在Spring Boot应用中通过Redis作为缓存来提高性能。
2. 搭建Redis环境
2.1 下载Redis
可以从Redis官网下载最新版本的Redis,Windows下可以从官网下载.msi安装包,默认Redis会安装在C盘根目录下。
下载地址:https://redis.io/download
2.2 配置Redis
在Redis根目录下找到redis.windows.conf文件并打开,修改如下字段:
# 将daemonize由原来的no修改为yes,Redis默认是采用守护进程方式运行的,这里改为no之后不会fork出一个子进程,这样方便观察。
daemonize no
# 将bind由原来的注释去掉,否则只能绑定127.0.0.1,其他机器无法访问。
bind 0.0.0.0
# 将requirepass由原来的注释去掉,并设置密码,方便远程连接。
requirepass mypassword
修改完之后,保存配置文件并运行以下命令启动Redis:
redis-server.exe redis.windows.conf
此时Redis已经启动,可以向Redis发送命令,使用Redis-CLI命令行客户端即可。
3. 引入Redis依赖
在Spring Boot应用的pom.xml文件中引入Redis依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
4. 配置Redis连接
在application.properties或application.yml文件中添加以下配置:
spring.redis.host=127.0.0.1
spring.redis.port=6379
spring.redis.password=mypassword
这里的配置参数可以根据Redis服务器的实际情况进行修改,如host可以修改为Redis服务器的IP地址,port可以修改为其他端口。
5. 编写Redis配置类
下面,我们编写一个Redis配置类,用于创建一个RedisTemplate,该类的作用是以编程方式与Redis进行交互。
@Configuration
public class RedisConfig {
@Value("${spring.redis.host}")
private String host;
@Value("${spring.redis.port}")
private int port;
@Value("${spring.redis.password}")
private String password;
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory) {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(connectionFactory);
//使用Jackson2JsonRedisSerializer来序列化和反序列化redis的value值(默认使用JDK的序列化方式)
Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class);
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(objectMapper);
//设置value的序列化器
redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
//设置key的序列化器
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.afterPropertiesSet();
return redisTemplate;
}
@Bean
public RedisConnectionFactory redisConnectionFactory() {
RedisStandaloneConfiguration configuration = new RedisStandaloneConfiguration(host, port);
configuration.setPassword(password);
return new JedisConnectionFactory(configuration);
}
}
6. 使用Redis进行缓存
6.1 使用@Cacheable注解进行缓存
在需要进行缓存的方法上添加@Cacheable注解:
@Cacheable(value = "user", key = "#id")
public User queryUserById(String id) {
//从数据库中获取User对象
return userDao.getUserById(id);
}
其中value表示缓存名称,key表示缓存的key,#id表示方法参数id的值。
6.2 使用@CachePut注解进行更新缓存
在更新方法上添加@CachePut注解:
@CachePut(value = "user", key = "#user.id")
public User updateUser(User user) {
//更新数据库中的User对象
userDao.updateUser(user);
return user;
}
其中value表示缓存名称,key表示缓存的key,#user.id表示方法参数user的id属性的值。
6.3 使用@CacheEvict注解进行清除缓存
在需要清除缓存的方法上添加@CacheEvict注解:
@CacheEvict(value = "user", key = "#id")
public void deleteUserById(String id) {
//从数据库中删除指定的User对象
userDao.deleteUserById(id);
}
其中value表示缓存名称,key表示缓存的key,#id表示方法参数id的值。
7. 总结
本文介绍了如何在Spring Boot应用中使用Redis作为缓存,具体内容包括:
搭建Redis环境
引入Redis依赖
配置Redis连接
编写Redis配置类
使用@Cacheable注解进行缓存
使用@CachePut注解进行更新缓存
使用@CacheEvict注解进行清除缓存
使用Redis作为缓存可以大大提高应用性能和响应速度,提高用户体验和满意度。