#redis #serde #deserialize #protocols #de

seredies

Redis 协议的 serde (de) 序列化实现

3 个版本 (稳定版)

1.0.1 2023年5月16日
1.0.0 2023年5月15日
0.0.1 2023年5月14日

1959编码

每月下载量 32

MPL-2.0 许可协议

170KB
4.5K SLoC

seredies

seredies 是一个用于 serde 的 Redis 协议实现。


lib.rs:

seredies 是 Redis 序列化协议 (RESP) 的底层实现。它使用 [serde] 数据模型,作为一个 SerializerDeserializer

查看 [de] 和 [ser] 模块以了解如何序列化和反序列化 RESP 数据的示例。

忠实实现

seredies 是对 RESP 的忠实 serde 实现。这意味着它(基本上)不会尝试超出 RESP 数据模型所能表达的内容,这主要是字符串、整数和数组。特别是它不能反序列化结构体、映射或复杂枚举。相反,seredies 提供了一系列 组件,这些组件将常见模式转换为 Redis 的最小数据模型。这确保了开发者不会对反序列化器尝试做一些意外的“聪明”的事情感到惊讶,但可以选择更简化的行为。

支持的数据类型

以下是序列化和反序列化器支持的数据类型。

  • bool(被视为整数 0 或 1)。
  • 所有整数(尽管请注意,RESP 仅支持有符号 64 位范围内的整数)。
  • 单元(被视为 null)。
  • 序列、元组和元组结构体。
  • 字节和字符串类型。
  • 请参阅 RedisString 组件,该组件提供了一个包装类型,可以将任何原始值转换为或从 Redis 字符串转换。
  • 由于 RESP 完全二进制安全,因此很容易从负载中反序列化 &str 和其他借用数据。
  • Result(见下文)。
  • Option:类似于JSON,一个 Option 被处理为null或未标记的值
  • 单元变体:这些被编码为字符串。

不支持的数据类型

  • 浮点数。
  • 考虑使用 RedisString,因为Redis通常将浮点数据作为字符串处理。
  • 映射、结构体、复杂枚举。
  • 考虑使用 KeyValuePairs,因为Redis通常将键值数据作为扁平化的键值对数组处理。

如果您正在尝试序列化Redis命令,还可以考虑使用 Command 组件;它将所有命令数据转换为字符串列表,使用符合典型Redis命令约定的约定。

错误和结果

RESP包括一个 错误类型,当出现错误时会通过响应传递。默认情况下,在反序列化时,此错误类型被视为反序列化错误,并在遇到时显示为 Error::Redis 变体。但是,您可以通过直接(反)序列化一个 Result 来处理它们;在这种情况下,[Ok] 变体将包含数据,而成功(反)序列化的 [Err] 变体将包含Redis错误。

此外,seredies广泛使用简单的字符串"OK"来表示不引人注意的成功。这种模式非常常见,因此 seredies 支持直接将其(反)序列化到 Ok(()) Result 值。

依赖项

~0.6–1.4MB
~28K SLoC