Redis中的序列化器
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
目录
一、什么是序列化器?
在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;
}
}