我们在这里有一个很大的争议:
我们在服务器上安装了Redis,我们希望在其中保存几种类型的数据:
争议是如何保存提到的表格
我们都知道Redis GET的时间复杂度是O(1) - 因此我们可以将表的每条记录存储为Redis中的记录(用一些前缀来表示它的表格行)
OR
我们可以将表作为单个记录存储在Redis中作为哈希 - 然后在哈希中访问我们想要的行 - 这是两个O(1)步骤。
我认为Redis中一个巨大的不断增长的单一记录是灾难性的,但我需要的不仅仅是我的观点 - 我需要一个Redis专家的回应,指出那个方法中的错误还是会证明我错了。
答案 0 :(得分:1)
首先,让我们清楚一点 - GET和HGET都是O(1)操作。两者之间没有时间复杂性差异。
接下来要考虑如何在以后对键空间进行分区。假设你的增长速度很快,你需要以某种方式集群(企业,OSS或其他)。在所有这些实现中,您无法拆分密钥。所以,如果你只有一个名为users
的哈希,那么一个代表用户ID的字段,正如你所提到的那样,哈希会变得非常大,并且不容易扩展。
更好的做法是将用户划分为子哈希。假设您的用户ID如下所示:1234
那么您要做的就是使用哈希user:12
和34
字段,您可以在其中为用户{{1}存储数据}(1234
)。这样,您可以节省键空间开销,并且仍然可以对键空间进行分区。 Redis Memory Optimization文档中概述了这种策略。
就您的数据而言,您可以执行某种序列化并将所有内容存储在一个字段(JSON,CSV等)中,或者为每个用户和仍然分区的每个数据使用哈希(例如key {{ 1}} / field HGET user:12 34
和user:name:12
/ field 34
)。