前言
springboot项目中引入redis的几个关键点,开始之前要确保redis所在虚拟机在开启状态。
一、导入pom文件
导入SpringBoot整合redis的依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
二、配置文件(application.yml中)
需要配置
- host : redis所在虚拟机的地址。
- port : redis端口号6379。
- password: redis的登录密码。
- pool :reids连接池中的相关配置。
spring:
redis:
host: 192.168.188.128
port: 6379
password: root
jedis:
pool:
max-active: 8
max-wait: -1
max-idle: 8
min-idle: 2
timeout: 10000
三、启动类增加@EnableCaching
启动缓存
注:是springboot项目的启动类,不是test测试的类。
四、创建配置类(关键)
在java内,创建config,并创建配置类 RedisConfig
package com.xxx.config;
import org.springframework.cache.CacheManager;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.cache.RedisCacheConfiguration;
import org.springframework.data.redis.cache.RedisCacheManager;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.RedisSerializationContext;
import java.time.Duration;
@Configuration
public class RedisConfig {
@Bean
public CacheManager cacheManager(RedisConnectionFactory factory){
//配置缓存有效时间 entryTtl(Duration.ofMinutes(30)) disableCachingNullValues()禁用空值 serializeValuesWith 序列化配置
RedisCacheConfiguration configuration = RedisCacheConfiguration.defaultCacheConfig().entryTtl(Duration.ofMinutes(30)).disableCachingNullValues().serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer()));
return RedisCacheManager.builder(factory).cacheDefaults(configuration).build();
}
}
五、注解添加
在服务的实现类层(impl)中,根据需要进行注解的添加。主要是一下两个注解:
-
@Cacheable(value = “Users”)
作用:执行Cacheable下方的语句执行时,将返回的结果,以Users 为文件名并为key,将数据写入redis中。(添加数据)
使用位置:一般在查询中使用。如:findAll的功能为查询Mysql数据库中的全部User。
注:User类包含了id,name,age字段,并需要实现序列化接口Serializable
@Override
@Cacheable(value = "Users")
public List<User> findAll() {
return userDao.findAll();
}
findAll执行后,以Users 为文件名并为key,将数据写入redis中。
redis中保存的json数据格式如下:
[
"java.util.ArrayList",
[
{
"@class":"com.xxx.pojo.User",
"id": 1,
"name": "测试用户1",
"age": 23
}
]
]
- @CacheEvict(value = “Users”,allEntries = true)
作用:执行Cacheable下方的语句执行时,通过Users找到需要删除的数据,allEntires=true 表示全部删除。(删除数据)
使用位置:一般用于增删改之后,需要及时对redis中的数据进行删除。
@Override
@CacheEvict(value = "Users",allEntries = true)
public void addUser(User user) {
userDao.save(user);
}
@Override
@CacheEvict(value = "Users",allEntries = true)
public void deleteUser(Long id) {
userDao.deleteById(id);
}
@Override
@CacheEvict(value = "Users",allEntries = true)
public void updateUser(Long id, User user) {
user.setId(id);
userDao.saveAndFlush(user);
}