【问题标题】:How interchangeable are Redis HASH Key and Field?Redis HASH Key 和 Field 的互换性如何?
【发布时间】:2015-07-21 21:05:03
【问题描述】:

我计划通过以下方式使用 Redis 哈希作为映射图: [version ->[key -> serialized data]]

应用和数据设计建议使用 Redis key 作为版本,使用 Redis field 作为 key。在我们的例子中,这意味着只存储几十个 Redis 键,每个键具有数千万个字段。

似乎与 Redis 文档中的用例场景不对称。就简单的获取/设置/删除操作的性能而言是否可以?不会使用密钥过期和其他 Redis 高级技术。

【问题讨论】:

    标签: redis


    【解决方案1】:

    您当然可以使用 Hash 数据结构以这种方式存储您的数据。与仅使用简单的 KV 字符串(即 version:key 作为键和 data 作为值)相比,这种设计增加了一个额外的操作来获取/设置每个字段的值。 OTOH,通过使用简单的 String KV,您最终将拥有很多(几十倍于数千万)密钥,每个密钥的开销都大于您建议的方法(http://redis.io/topics/memory-optimization#using-hashes-to-abstract-a-very-memory-efficient-plain-key-value-store-on-top-of-redis 上的更多内容)。

    也就是说,哈希方法是有效的并且被广泛使用。由于额外操作而导致的性能损失通常可以忽略不计,尤其是考虑到空间节省。

    注意:您的问题没有说明为什么/如何需要获取序列化数据。您是否需要获取给定版本下的所有密钥?也许给定密钥的所有版本?两个都?其他?根据您的用例要求,可能会有更好的选择。

    【讨论】:

    • 您好,谢谢!说到用法,我只需要 a) 计算给定版本的所有键,b) 删除一个版本的所有数据(键和序列化对象)。没有键遍历、搜索操作等。
    • 使用 Hash 进行计数很便宜,但要对删除大的 Hash 感到厌烦 - 批量处理任何对象(Sets、Sorted Sets 和 Lists),如果对象越大,删除时间就会越长
    猜你喜欢
    • 2015-09-01
    • 2018-03-11
    • 1970-01-01
    • 2018-12-06
    • 1970-01-01
    • 2012-10-18
    • 2019-12-20
    • 2020-11-28
    • 2015-10-12
    相关资源
    最近更新 更多