gpt4 book ai didi

redis - 在redis中将对象存储在有序集合中的常规方法是什么?

转载 作者:IT王子 更新时间:2023-10-29 05:57:55 25 4
gpt4 key购买 nike

在值是对象而不仅仅是字符串的 Redis 中实现排序集的最方便/快速的方法是什么。

我应该只将对象 ID 存储在排序集中,然后通过其键分别查询每个对象,还是有一种方法可以将它们直接存储在排序集中,即值必须是字符串?

最佳答案

这取决于您的需要,如果您需要与其他 zsets/structures 共享此数据并且希望每次更改只写入一次值,您可以将一个 id 作为 zset 值并添加一个哈希来存储对象.然而,这意味着当您从 zset 读取数据时进行额外的查询(一个 zrange + n hgetall 用于 zset 中的 n 个值),但是在许多结构之间写入和同步值是便宜的(仅更新与该值对应的哈希)。

但是如果它是“自包含的”,在 zset 之外没有或很少访问,您可以将对象序列化为选定的格式(JSON、MESSAGEPACK、KRYO ...),然后将其存储为您的值zset条目。这样,当你从 zset 读取时会有更好的性能(只有 1 个查询 O(log(N)+M),它实际上相当不错,可能是你能得到的最好的),但也许你将不得不重复如果您需要在外部读取/写入此值,则其他 zsets/结构中的值,这也意味着手动维护该值的同步。

Redis 对每个命令的性能都有很好的文档,因此请检查您将编写哪些查询并计算总成本,以便您可以很好地比较这两个选项。

此外,不要忘记 Redis 带有乐观锁定,因此如果您需要悲观锁定(例如由于争用),您将不得不手动和/或使用 lua 脚本来完成。如果您需要大量同步,第一个选项似乎更好(读取性能较低,但仍然不错,查询和写入的复杂性较低),但如果您的值变化不大并且内存空间不是问题,第二个选项将提供更好的读取性能(您可以复制 redis 中的值,例如定期同步值)。

关于redis - 在redis中将对象存储在有序集合中的常规方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20481749/

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