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

32

我非常新手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
这取决于您想如何访问数据。最重要的是账户还是名称?我会选择包含每个哈希名称的列表。 - fedorqui
我猜名字和姓氏不是唯一的。你的意思是对于键“xyz:name”,你想存储一组非唯一值,如“Bob”和“Sam”吗? - Manu Manjunath
1个回答

37

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

示例数据

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

请使用 Redis 集合 (set 命令) 来执行此操作:

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

您随后将能够通过以下方式检查是否将Bob用作账户abcname:

SISMEMBER abc:name Bob
> true

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

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

注意:

  • 这里的关键名使用[帐户]: [字段]格式。其中[帐户]可以是abcxyz等,字段可以是namelname等。
  • 如果您不想要唯一值,例如:

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

    那么您应该使用列表而不是


我该如何在node-redis中使用SADD [account]:[field]语法? - jgr0
账户:字段是单个键吗?我如何获取账户下所有键的值? - jgr0
1
是的,"[account]:[field]" 是一个单一的键。如果您想获取账户下所有键值,那不是我们想要的。如果您想使用 node-redis 的 SADD [account]:[field] 语法,可以这样写:redis.sadd('account:name', 'Bob', (err, ok) => {}); - FGRibreau

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接