【问题标题】:Redis key designRedis 密钥设计
【发布时间】:2014-09-10 22:07:37
【问题描述】:

我想知道我们在 Redis 中“设计”键的方式是否会影响性能和可扩展性。 例如,如果我将与“用户”相关的内容存储在 "user:<user_id>" 之类的键下,而将与群组相关的内容存储在 "group:<group_id>" 之类的键下,我所有的键都将以 "user:" 或 "group:" 开头。

这会对 Redis 内部散列键的方式产生负面影响吗?

【问题讨论】:

    标签: redis


    【解决方案1】:

    没有负面影响。正是你提到的设计推荐在official Redis docs,这点上说得很清楚:

    非常长的键不是一个好主意,例如 1024 字节的键是一个坏主意 ...

    但是,请继续阅读:

    非常短的键通常不是一个好主意。如果您可以改为写“user:1000:followers”,那么将“u1000flw”写为键几乎没有意义。后者更具可读性,与键对象本身和值对象使用的空间相比,增加的空间很小。虽然短键显然会消耗更少的内存,但您的工作是找到合适的平衡点。

    尝试坚持使用模式。例如“object-type:id”是个好主意,如“user:1000”。点或破折号通常用于多字字段,如“comment:1234:reply.to”或“comment:1234:reply-to”。

    (强调我的。)

    另见:Redis key naming conventions?

    因为它基本上是一个底层的哈希表,所以没有什么类似于 SQL 风格的WHERE。这就是糟糕的设计可能会影响性能的地方。

    【讨论】:

      【解决方案2】:

      不,像这样为密钥添加前缀应该没有任何问题。 Redis 在内部使用了一个哈希表,该哈希表又使用了一个适当的哈希函数(如果我没记错的话,它是杂音哈希之一),它不会因前缀而让步。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-08-07
        • 2011-03-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-26
        相关资源
        最近更新 更多