如何在Redis哈希中存储数组?

时间:2013-11-05 14:53:31

标签: redis

我对Redis很新,并且想看看它是否可行。想象一下,我收到的数据是这样的:

{ "account": "abc", "name": "Bob", "lname": "Smith" }
{ "account": "abc", "name": "Sam", "lname": "Wilson" }
{ "account": "abc", "name": "Joe"}

接收其他帐户的数据:

{ "account": "xyz", "name": "Bob", "lname": "Smith" } 
{ "account": "xyz", "name": "Sam", "lname": "Smith"}

我想以类似的格式将这些数据保存在Redis中:

abc:name ["Bob", "Sam", "Joe"]
abc:lname ["Smith", "Wilson", Null]

对于xyz:

xyz:name["Bob", "Sam"]
xyz:lname["Smith", "Smith"]

所以问题是我应该用什么数据类型存储这个Redis?

1 个答案:

答案 0 :(得分:22)

如果您的目标是检查Bob是否用作帐户name的{​​{1}},解决方案应该是:

示例数据

abc

执行此操作(using a redis set):

{ "account": "abc", "name": "Bob", "lname": "Smith" }
{ "account": "abc", "name": "Sam", "lname": "Wilson" }
{ "account": "abc", "name": "Joe"}

然后,您就可以检查SADD abc:name Bob Sam Joe SADD abc:lname Wilson Smith 是否用作Bob帐户的name,其中包含:

abc

要检索字段的所有值,请使用SMEMBERS:

SISMEMBER abc:name Bob
> true

注意:

  • 此处的密钥名称采用SMEMBERS abc:name > ["Bob", "Sam", "Joe"] 格式。 [account]:[field]可以是[account]abc等等,xyz可以是fieldname ......
  • 如果您不想要唯一值,例如:

    lname

    然后您应该使用a list代替