一尘不染

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

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?


阅读 820

收藏
2020-06-20

共1个答案

一尘不染

如果您的目标是检查是否Bob用作name该帐户abc的解决方案,则解决方案应类似于:

样本数据

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

执行此操作( 使用redis集 ):

SADD abc:name Bob Sam Joe
SADD abc:lname Wilson Smith

然后,您可以通过以下命令检查是否Bob用作name该帐户的abc

SISMEMBER abc:name Bob
> true

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

SMEMBERS abc:name
> ["Bob", "Sam", "Joe"]

注意:

  • 密钥名称在此[account]:[field]格式下。在哪里[account]abcxyz等等,并field可以namelname
  • 如果您不希望唯一值,例如:

abc:name ["Bob", "Sam", "Joe", "Bob", "Joe"]

那么你应该使用一个列表,而不是

2020-06-20