Redis:使用SpringDataRedis进行连接操作?

使用流程

一、导入依赖

        <!--Redis依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
        <!--连接池依赖-->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-pool2</artifactId>
        </dependency>

二、配置文件application.yml

spring:
  redis:
    host: 47.93.191.163
    port: 6379
    password: lurenjia
    #lettuce连接池
    lettuce:
      pool:
        max-active: 8
        max-idle: 8
        min-idle: 0
        max-wait: 1000ms

三、代码实现

    //注入对象
    @Autowired
    private RedisTemplate redisTemplate;

    @Test
    void testString(){
        //获取操作String类型的连接对象,并存入数据
        redisTemplate.opsForValue().set("name","lurenjia");
        //取出数据
        System.out.println(redisTemplate.opsForValue().get("name"));
    }

 

序列化器

默认

使用的序列号器为jdk的序列化器,在key-value序列化时,会出现不友好的信息格式:

 

自定义

解决办法:自定义使用的序列化器

@Configuration
public class RedisConfig {
    @Bean
    public RedisTemplate<String,Object> redisTemplate(RedisConnectionFactory factory){
        //1 创建RedisTemplate对象
        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
        //2 设置连接工厂
        redisTemplate.setConnectionFactory(factory);
        //3 创建序列化工具
        GenericJackson2JsonRedisSerializer jsonRedisSerializer = new GenericJackson2JsonRedisSerializer();
        //4 设置key的序列化器,String类型、hash类型
        redisTemplate.setKeySerializer(RedisSerializer.string());
        redisTemplate.setHashKeySerializer(RedisSerializer.string());
        //5 设置value的序列化器,使用jackson提供的序列化器,能够转为json格式
        redisTemplate.setValueSerializer(jsonRedisSerializer);
        redisTemplate.setHashValueSerializer(jsonRedisSerializer);
        
        return redisTemplate;
    }
}

使用Jackson序列化器能够自动序列化和反序列化对象,它的实现是基于储存的时候增入一个属性:"class":类的全限定路径

如果不想储存这个信息,可以使用手动序列号和反序列化的形式。

即,使用string方式进行所有信息(对象、非对象)的序列号反序列化。

 

StringRedisTemplate

默认使用string序列化器,代码示例:

    void testString() throws JsonProcessingException {
        //1 对象数据
        User user = new User("lurenjia",18);
        //2 手动序列化
        String stringUser = objectMapper.writeValueAsString(user);
        //3 存入数据库
        stringRedisTemplate.opsForValue().set("user:1001",stringUser);

        //4 从数据库中取出对象数据
        String val = stringRedisTemplate.opsForValue().get("user:1001");
        System.out.println("看看数据:"+val);
        //5 手动反序列化
        User readValue = objectMapper.readValue(val, User.class);
        System.out.println("看看对象:"+readValue);
    }

 

posted @ 2023-04-18 17:56  在博客做笔记的路人甲  阅读(169)  评论(0编辑  收藏  举报