3 个版本 (稳定版)
1.0.1 | 2023年5月16日 |
---|---|
1.0.0 | 2023年5月15日 |
0.0.1 | 2023年5月14日 |
1959 在 编码 中
每月下载量 32 次
170KB
4.5K SLoC
seredies
seredies 是一个用于 serde 的 Redis 协议实现。
lib.rs
:
seredies
是 Redis 序列化协议 (RESP) 的底层实现。它使用 [serde] 数据模型,作为一个 Serializer
和 Deserializer
。
查看 [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