gpt4 book ai didi

c# - Redis 在 .net MVC 中压缩字符串值

转载 作者:可可西里 更新时间:2023-11-01 11:22:01 26 4
gpt4 key购买 nike

在我的应用程序中,我想压缩存储在 redis 字符串键中的数据。我不想压缩所有这些,因为小数据值不能很好地压缩,我想避免它们的 cpu 开销。

我的问题是,当我读取字符串键以执行解压缩时,如何检测到一个值被压缩?

我尝试了一些代码将自定义 header 附加到 zip 流,但我没有任何运气。

最佳答案

一种常见的模式是使用负载前缀和分隔符。

例如,您可以使用这样的格式:

[key];[encoding];[metatype];[version]\t[payload]

我在这里使用分隔符 ;\t。如果您更喜欢其他分隔符,请选择它们。当然,您必须防止这些定界符出现在您的前缀标签中。 [payload] 包含例如二进制数据、字符串数据等。 [encoding] 例如可以是 zip, msgpack ,utf8,base64,json(只是一些想法)。

使用负载前缀的好处是您不必反序列化或解压缩负载本身即可将其用作实体。例如,在 Redis-Lua 中,您无法解压缩。但是您可以简单地读取预加载前缀,然后响应客户端请求。即使您可以在 Redis-Lua 中反序列化,例如 JSON 或 MsgPack格式,由于性能原因,您可能不想这样做。

当然还有其他选择。如果你不喜欢带分隔符的前缀,你也可以将有效载荷和编码标签放在一个数组中,并将其序列化为 MsgPack。或者,使用 JSON 作为前缀,然后是空字符,然后是负载。或者甚至(更高效的内存):使用 4 或 8 个字节作为前缀大小,使用 MsgPack 作为前缀,并使用前缀大小来确定有效负载的开始位置(甚至可能是 MsgPack)。

最后的忠告:不要弄乱有效负载本身(例如更改 zip header ),这肯定会给您带来很多不必要的麻烦。

希望这有帮助,TW

关于c# - Redis 在 .net MVC 中压缩字符串值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23021361/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com