Spring Boot整合Redis


SpringBoot 整合 Redis

1、添加依赖


    org.springframework.boot
    spring-boot-starter-data-redis



    org.apache.commons
    commons-pool2

2、配置文件yml

spring:
  redis:
    host: localhost
    password:
    database: 0
    port: 6379
    timeout: 10000
    lettuce:
      pool:
        max-active: 8
        max-idle: 8
        max-wait: 1000
        min-idle: 0

3、配置类

配置一个 RedisTemplate,并指定 keyvalue 的序列化器。

/**
* redis 配置类,主要配置序列化
*/
@Configuration
public class RedisConfig {

    @Bean
    public RedisTemplate redisTemplate(RedisConnectionFactory factory){
        RedisTemplate redisTemplate = new RedisTemplate<>();
        // 连接工厂必须指定
        redisTemplate.setConnectionFactory(factory);
        // 字符串序列化器
        StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
        // json 序列化器,使用 jackson
        // 还有一种是 Jackson2JsonRedisSerializer serializer = new Jackson2JsonRedisSerializer<>(Object.class);
        GenericJackson2JsonRedisSerializer genericJackson2JsonRedisSerializer = new GenericJackson2JsonRedisSerializer();
        // key 和 hashkey 设置字符串序列化
        redisTemplate.setKeySerializer(stringRedisSerializer);
        redisTemplate.setHashKeySerializer(stringRedisSerializer);
        // 值设置 json 序列化
        redisTemplate.setValueSerializer(genericJackson2JsonRedisSerializer);
        redisTemplate.setHashValueSerializer(genericJackson2JsonRedisSerializer);
        redisTemplate.afterPropertiesSet();
        return redisTemplate;
    }
}

// 测试
@Test
public void test2() {
    redisTemplate.opsForValue().set("goods:2", "3c数码产品。。。");
}



如果不配置序列化器,直接使用默认的,key 和 value 在客户端上显示会是乱码,客户端命令行也会操作错误

如下:

/**
* redis配置类,主要配置序列化
*/
@Configuration
public class RedisConfig {

    @Bean
    public RedisTemplate redisTemplate(RedisConnectionFactory factory){
        RedisTemplate redisTemplate = new RedisTemplate<>();
        redisTemplate.setConnectionFactory(factory);
        return redisTemplate;
    }
}
// 测试
@Test
public void test() {
    redisTemplate.opsForValue().set("user:1", "你好dfsdfsdf");
}

连接工具查看乱码

命令行读取失败

只能从代码里读取

当然这也并不算什么问题,因为操作数据都是使用 Java API 操作的