1,Redis介绍
Redis是以key-value形式存储的非关系型数据库,常用作缓存,消息队列等。
存储结构
- String
- HashMap
- Set
- List
- Sorted Set: 有序集合
Redis 官网:redis.io/
2,SpringBoot整合Redis
1, 导 pom
<!--redis依赖配置-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
2,改yml
spring:
redis:
port: 6379
host: 192.168.0.238
database: 0 # Redis数据库索引(默认为0)
3,新建配置类
@Configuration
public class RedisConfig {
@Bean
public RedisTemplate<String,Object> redisTemplate(RedisConnectionFactory redisConnectionFactory){
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(redisConnectionFactory);
//key采用String的序列化方式
redisTemplate.setKeySerializer(new StringRedisSerializer());
// hash的key也采用String的序列化方式
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
RedisSerializer<Object> serializer = redisSerializer();
// value序列化方式采用jackson
redisTemplate.setValueSerializer(serializer);
// hash的value序列化方式采用jackson
redisTemplate.setHashValueSerializer(serializer);
redisTemplate.afterPropertiesSet();
return redisTemplate;
}
@Bean
public RedisSerializer<Object> redisSerializer(){
//创建json序列化器
Jackson2JsonRedisSerializer<Object> serializer = new Jackson2JsonRedisSerializer<Object>(Object.class);
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
//必须设置,否则无法将json转化为对象,会转化为map类型
objectMapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance,ObjectMapper.DefaultTyping.NON_FINAL);
serializer.setObjectMapper(objectMapper);
return serializer;
}
}
注:spring中其实帮我们配置了RedisTemplate,但RedisTemplate指定的泛型为<Object,Object>,不利于我们操作,而且没有为 key-value 设置序列化。
4,测试
@Autowired
private UmsAdminService umsAdminService;
@Test
void redisTest(){
redisTemplate.opsForValue().set("mall","hello redis");
System.out.println(redisTemplate.opsForValue().get("mall"));
}