redis性能,将json对象存储为一个string

我需要保存一个用户模型,如下所示:

{ "nickname": "alan", "email": ..., "password":..., ...} // and a couple of other fields 

今天我使用Set:users
在这个集合中,我有一个像alan这样的用户
在这个成员我有上面的散列

这工作正常,但我只是想知道是否可以使用以下方法的上述方法:

仍然使用用户设置(轻松获取用户(成员)列表)
在这个集合中只使用一个键/值存储,如:

key:alan value:上述用户散列的stringify版本

检索logging会更容易(我将不得不parsing与JSON)。

我对redis很陌生,我不确定最好的是什么。 你怎么看 ?

您可以使用Redis 散列数据结构来存储您的JSON对象字段和值。 例如,您的“用户”集仍然可以用作存储所有用户的列表,并且您的个人JSON对象可以像这样存储到哈希中:

 db.hmset("user:id", JSON.stringify(jsonObj)); 

现在,您可以通过键入所有用户或只有特定的一个(从中获取/设置指定的字段/值)。 这 两个问题也可能与您的情况有关。

编辑:(抱歉,我没有意识到,我们之前谈到这个)

检索logging会更容易(我将不得不parsing与JSON)。

这是真的,但是使用散列数据结构,您只能获取/设置需要使用的字段/值。 如果您只想更改对象的一部分(其他的一点是您需要每次对对象进行string化/parsing),则检索整个JSON对象可能会导致性能下降(取决于您多久执行一次)。

JSON over HASH的另一个优点是维护types。 123.3变成了string"123.3"并且依赖于库Null / None可以意外地被转换为"null"

两者都是有点繁琐,因为这将需要写一个变压器提取string,并将其转换回其预期的types。

对于空间/内存消耗的考虑,我开始倾向于将值存储为JSON列表["my_type_version", 123.5, null , ... ]所以我没有N * ( sum(len(concat(JSON key names))) ,在我的情况下,它是Redis已用内存占用量的+ 60%。

记住:哈希不能存储嵌套的对象,JSON可以做到这一点。

说实话,无论哪种方式工作正常。 你存储的方式是你需要做的devise决定。 这取决于你想如何检索用户信息等

在性能方面,存储用户对象的JSON编码版本将使用较less的内存,并且花费较less的时间来存储/检索。 也就是说,JSONparsing可能比从Redis中检索每个字段更快。 而且,即使不是这样,也可能更有效率。 无论如何,性能的差异可能是最小的。