redis性能,将json对象存储为字符串

Luc*_*Luc 22 redis node.js

我需要保存用户模型,例如:

{ "nickname": "alan",
  "email": ...,
  "password":...,
  ...} // and a couple of other fields
Run Code Online (Sandbox Code Playgroud)

今天,我使用Set:users
在这个Set中,我有一个像user
这样的成员:alan 在这个成员中我有上面的哈希

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

仍然使用用户设置(轻松获取用户(成员)列表)
在此设置中仅使用键/值存储,如:

key:alan value:上述用户哈希的stringify版本

然后检索记录会更容易(我将不得不使用JSON解析它).

我对redis很新,我不确定什么是最好的.你怎么看 ?

yoj*_*o87 20

您可以使用Redis 哈希数据结构来存储JSON对象字段和值.例如,您的"用户"集仍然可以用作存储所有用户的列表,您的个人JSON对象可以存储为哈希,如下所示:

db.hmset("user:id", JSON.stringify(jsonObj));
Run Code Online (Sandbox Code Playgroud)

现在,您可以通过键获取所有用户或仅获取特定用户(从中获取/设置仅指定的字段/值).此外,这些 2点的问题都可能与您的方案.

编辑:(对不起,我没有意识到我们之前谈过这个)

然后检索记录会更容易(我将不得不使用JSON解析它).

这是事实,但是使用哈希数据结构,您只能获取/设置需要使用的字段/值.如果您只想更改对象的一部分(另一个是您需要每次都需要对对象进行字符串化/解析),检索整个JSON对象可能会导致性能下降(取决于您执行此操作的频率).


Dav*_*vid 7

JSON优于哈希的另一个优点是维护类型. 123.3成为字符串"123.3",依赖于库Null/ None可能意外地被转换为"null".

两者都有点单调乏味,因为这需要编写一个变换器来提取字符串并将它们转换回预期的类型.

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


mza*_*zar 6

请记住:哈希不能存储嵌套对象,JSON 可以。