30

我对 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?

4

1 回答 1

33

如果您的目标是检查是否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用作nameaccount 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"]

    那么你应该使用一个列表

于 2013-11-06T10:57:11.500 回答