SpringBoot整合Redis

87 阅读1分钟

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 设置序列化。

image.png

4,测试

@Autowired
private UmsAdminService umsAdminService;

@Test
void redisTest(){

    redisTemplate.opsForValue().set("mall","hello redis");

    System.out.println(redisTemplate.opsForValue().get("mall"));
}

image.png