我对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?
答案 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
可以是field
,name
...... 如果您不想要唯一值,例如:
lname
然后您应该使用a list代替