Spring Boot提供了很方便的方式来集成Redis,主要涉及的内容如下:
1. 包依赖
添加Redis依赖,在Maven或Gradle构建工具中,需要添加Spring Data Redis的依赖,例如在Maven中:
引入spring-boot-starter-data-redis包,SpringBoot2中默认的客户端Lettuce, 所以需要exclude掉lettuce-core包,并引入jedis的包。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<exclusions>
<exclusion>
<artifactId>lettuce-core</artifactId>
<groupId>io.lettuce</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
<version>2.9.0</version>
</dependency>
2. yml配置
配置Redis连接信息
在Spring Boot应用的配置文件(比如application.properties或application.yml)中,添加Redis连接信息,例如:
spring:
redis:
database: 0
host: 127.0.0.1
port: 6379
password: test
jedis:
pool:
min-idle: 0
max-active: 8
max-idle: 8
max-wait: -1ms
connect-timeout: 30000ms
#
3. RedisConfig配置
@Configuration
public class RedisConfig {
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
RedisTemplate<String, Object> template = new RedisTemplate<>();
template.setConnectionFactory(factory);
template.setKeySerializer(new StringRedisSerializer());
template.setHashKeySerializer(new StringRedisSerializer());
template.setValueSerializer(new GenericJackson2JsonRedisSerializer());
template.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
template.afterPropertiesSet();
return template;
}
}
4. RedisTemplate的使用
使用RedisTemplate操作Redis
在Spring Boot应用中,可以使用Spring Data Redis提供的RedisTemplate来操作Redis,例如:
@RestController
@RequestMapping("/user")
public class UserController {
// 注意:这里@Autowired是报错的,因为@Autowired按照类名注入的
@Resource
private RedisTemplate<String, User> redisTemplate;
@PostMapping("add")
public ResponseResult<User> add(User user) {
redisTemplate.opsForValue().set(String.valueOf(user.getId()), user);
return ResponseResult.success(redisTemplate.opsForValue().get(String.valueOf(user.getId())));
}
@GetMapping("find/{userId}")
public ResponseResult<User> edit(@PathVariable("userId") String userId) {
return ResponseResult.success(redisTemplate.opsForValue().get(userId));
}
}
在上面的例子中,通过自动注入RedisTemplate,可以调用opsForValue()方法获取操作String类型的数据的对象,并通过set()和get()方法操作Redis。
除了RedisTemplate之外,Spring Data Redis还提供了其他的Template,如Hash、List、Set等。