Redis中的序列化器

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

目录

一、什么是序列化器?

二、Redis使用步骤

1.在Maven中引入依赖

2.配置redis的相关信息

三.更改redis key的序列化器



一、什么是序列化器?

在Java中,序列化器主要用于将对象转换为字节流,以便将其存储到文件、数据库或通过网络传输到其他计算机,然后再将字节流反序列化为原始对象。

二、Redis使用步骤

1.在Maven中引入依赖

<!--Spring Data Redis-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

2.配置redis的相关信息

在yml配种文件中 配置redis的相关信息

spring:
  redis:
    host: ${sky.redis.host}
    port: ${sky.redis.port}
    password: ${sky.redis.password}
    database: ${sky.redis.database}

3.进行测试

package com.sky.test;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.*;

import java.util.concurrent.TimeUnit;

/**
 * @author: Administrator
 * @description: TODO
 * @date: 2023/8/22 10:48
 */
@SpringBootTest
public class SpringDataRedisTest {
    @Autowired
    private RedisTemplate redisTemplate;

    @Test
    public void testRedisTemplate(){
        System.out.println(redisTemplate);
        //string数据操作
        ValueOperations valueOperations = redisTemplate.opsForValue();
        //hash类型的数据操作
        HashOperations hashOperations = redisTemplate.opsForHash();
        //list类型的数据操作
        ListOperations listOperations = redisTemplate.opsForList();
        //set类型数据操作
        SetOperations setOperations = redisTemplate.opsForSet();
        //zset类型数据操作
        ZSetOperations zSetOperations = redisTemplate.opsForZSet();
    }

    @Test
    public void redisTemplateTest(){
        ValueOperations valueOperations = redisTemplate.opsForValue();
        HashOperations hashOperations = redisTemplate.opsForHash();
        ListOperations listOperations = redisTemplate.opsForList();
        SetOperations setOperations = redisTemplate.opsForSet();
        ZSetOperations zSetOperations = redisTemplate.opsForZSet();
        System.out.println(valueOperations);
        System.out.println(hashOperations);
        System.out.println(listOperations);
        System.out.println(setOperations);
        System.out.println(zSetOperations);
    }



    /**
     * 操作字符串类型的数据
     */

    @Test
    public void testString(){
        ValueOperations valueOperations = redisTemplate.opsForValue();
        valueOperations.set("name","hasaki");
        System.out.println(valueOperations.get("name"));
        valueOperations.set("age",15,30,TimeUnit.SECONDS);
        System.out.println(valueOperations.get("age"));
        Boolean b = valueOperations.setIfAbsent("name", "李四");
        System.out.println(b);
        Boolean b1 = valueOperations.setIfAbsent("gender", "男");
        System.out.println(b1);
        Object object = valueOperations.get("gender");
        System.out.println(object);
    }
}

通过图形化界面,我们能观察到,key和value都是被序列化的

为什么要使用序列化呢,任何存储都需要使用序列化,使用序列化也是一种加密,能够保证数据的安全,还能方便数据的传输,redis是在内存来操作数据的,它的效率比较高,如果想把一个内存中的对象存储下来就必须使用序列化转换为xml(字符串)、json(字符串)或二进制(流)

 接下来我们通过观察源码来更改key的序列化,通常value我们需要加密,而key的话不需要使用java自带的序列化器

从这张图我们可以观察到RedisTemplate 实现了RedisAccessor,而RedisAccessor又实现了InitializingBean,在InitializingBean只有一个方法,子类重写了这个方法,在里面会创建序列化器 

三.更改redis key的序列化器

package com.sky.config;

import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;

@Configuration
@Slf4j
public class RedisConfiguration {

    @Bean
    public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory){
        log.info("开始创建redis模板对象...");
        RedisTemplate redisTemplate = new RedisTemplate();
        //设置redis的连接工厂对象
        redisTemplate.setConnectionFactory(redisConnectionFactory);
        //设置redis key的序列化器
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        return redisTemplate;
    }
}