下文教大家如何快速搭建一个 spring + redis 整合的基础使用场景。
pom依赖
<dependencies>
...无关内容略过...
<!-- redis起步依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
</dependencies>
yaml
server:
port: 8080
spring:
redis:
host: 192.168.xx.xxx
port: 6379
password:
timeout: 30000
配置类
@AllArgsConstructor //lombok 全参数构造
@SpringBootConfiguration
public class RedisTemplateConfig {
// 构造注入
private final RedisConnectionFactory redisConnectionFactory;
// redis序列化器
@Bean
public RedisSerializer redisSerializer() {
return new StringRedisSerializer();
}
// redis操作模板
@Bean
public RedisTemplate<String, Object> redisTemplate() {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate();
// 设置连接工厂
redisTemplate.setConnectionFactory(redisConnectionFactory);
/**
* 配置序列化意思是:配置我们在操作redis时,可传入的key和value的类型。传入的类型不支持
* 会报错,StringRedisSerializer 支持传入String类型,也是默认行为,比如你有一个User类型
* ,redisTemplate.opsForValue().set("key", new User()) 会报错
* 你也可以选择用这个序列换器:GenericJackson2JsonRedisSerializer,支持传入Object类型
* 它默认是使用jackson进行序列化与反序列化,笔者更习惯用fastjson,所以也不用它
* 可以选择自己实现RedisSerializer接口,来定制自己的序列化器,用fastjson来进行序列化与
* 反序列化即可,这块有个纠结的点,我们往redis中存的肯定不止一种类型,所以实现类必然是像
* 这样:xxx implements RedisSerializer<Object>,泛型为Object,反序列化时,返回类型必然
* 丢失,是Object类型,要在使用时自己进行强转,所以实现它就只一个序列化有点用,就挺奢侈的
* ,意义不是很大,可以但没必要,不如对redisTemplate在使用层面进行封装,哈哈....
*/
// 设置redis序列化规则
redisTemplate.setKeySerializer(redisSerializer());
redisTemplate.setValueSerializer(redisSerializer());
redisTemplate.setHashKeySerializer(redisSerializer());
redisTemplate.setHashValueSerializer(redisSerializer());
return redisTemplate;
}
}