Spring Data Redis 教程

Spring Data Redis 序列化接口

本章将介绍 Spring Data Redis 的序列化接口 org.springframework.data.redis.serializer.RedisSerializer。

RedisSerializer 基础接口定义了将对象转换为字节数组(二进制数据)的序列化和反序列化方法。建议将实现设计为在序列化和反序列化端处理空对象/空字节数组。注意,Redis 不接受空键或空值,但可以返回 null(对于不存在的键)。

RedisSerializer 接口方法定义

序列化

序列化方法定义如下:

byte[] serialize(T t)

该方法将给定对象 t 序列化为二进制数据,及字节数组。注意:对象 t 和返回值可以为 null。

反序列化

反序列化方法定义如下:

T deserialize(byte[] bytes)

该方法将从给定的二进制数据(字节数组)反序列化为一个对象。注意:bytes 字节数组和返回值 T 均可以为 null。

注意:如果上面的 serialize() 和 deserialize() 方法在执行时报错,将抛出org.springframework.data.redis.serializer.SerializationException 异常。

RedisSerializer 接口的实现

下面将通过 Spring Data Redis 提供的 org.springframework.data.redis.serializer.StringRedisSerializer 实现来学习怎样实现序列化和反序列。StringRedisSerializer 源码如下:

package org.springframework.data.redis.serializer;

import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import org.springframework.lang.Nullable;
import org.springframework.util.Assert;

public class StringRedisSerializer implements RedisSerializer<String> {
	// 定义字符集
	private final Charset charset;
	public static final StringRedisSerializer US_ASCII = new StringRedisSerializer(StandardCharsets.US_ASCII);
	public static final StringRedisSerializer ISO_8859_1 = new StringRedisSerializer(StandardCharsets.ISO_8859_1);
	public static final StringRedisSerializer UTF_8 = new StringRedisSerializer(StandardCharsets.UTF_8);
	
	// 使用 StandardCharsets.UTF_8 创建一个新的 StringRedisSerializer。
	public StringRedisSerializer() {
		this(StandardCharsets.UTF_8);
	}

	// 使用给定的 Charset 创建一个新的 StringRedisSerializer 来编码和解码字符串。
	public StringRedisSerializer(Charset charset) {
		Assert.notNull(charset, "Charset must not be null!");
		this.charset = charset;
	}

	// 反序列化,将字节数组转换成字符串
	@Override
	public String deserialize(@Nullable byte[] bytes) {
		return (bytes == null ? null : new String(bytes, charset));
	}

	// 序列化,将字符串转换成字节数组
	@Override
	public byte[] serialize(@Nullable String string) {
		return (string == null ? null : string.getBytes(charset));
	}
}

上面代码虽然简单,但却完整的说明了怎样去实现 RedisSerializer 接口,主要关注 serialize() 和 deserialize() 方法。

说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号