在Redis中保存和检索字符串数组

8
我正在寻找一些获取和设置字符串数组的示例,但似乎无法找到一个能够正常工作的。这些字符串本身是SecureRandom.hex值,可以将它们视为邀请码。我想要创建一对键/值:

1)Key=> invite:code:88bb4bdfef Value=> userid

2)Key=> userid:invite:codes Value => 88bb4bdfef,73dbfac453,etc...(每个先前集合的一个条目)

我只是在处理第二个键/值对中的值时卡住了。

更新: 因此,挑战在于如果我创建一个数组并像这样设置它:

foo=Array.new
foo.push("abc")
foo.push("def")

此时,foo的样子是这样的:["abc","def"]

因此,我将foo设置在redis中,并将其检索到bar中:

$redis.set(:foo,foo)
bar=$redis.get(:foo)

现在,Bar的样子看起来像这样:"[\"abc\",\"def\"]"


首先尝试使用几个redis-cli命令手动完成...这看起来并不太难。 - Didier Spezia
我已经做了,见更新。我无法(很可能是由于无知)将该结果字符串转换回字符串数组。 - Webjedi
您可以在存储之前对数组进行JSON编码,如果您不想使用@Chris Heald建议的列表。 - akonsu
1个回答

16

您需要使用列表或集合,而不是简单的键。这里是一个使用Redis集合功能的示例:

$redis.sadd("userid:invite:codes", ["88bb4bdfef", "73dbfac453"])
$redis.smembers("userid:invite:codes")
=> ["88bb4bdfef", "73dbfac453"]

相关问题...我需要设置两组键来管理这个过程,这是不是意味着我不应该使用redis来做这件事? - Webjedi
1
不一定。Redis非常好,但是要在一些传统的数据库事务中使用需要付出一些工作。这真的取决于你的用例。 - Chris Heald
补充Chris的陈述,如果您在像PostgreSQL这样的SQL数据库中进行此操作,您可以创建两个表,并确保为它们创建索引以处理外键。第二个关键字,即ID集合,执行的功能与表上的索引相同。 因此,您实际上并不需要额外工作。您正在进行额外的调用,但是关系型数据库管理系统将添加相同的步骤。 您只是更加清楚而已。 - The Real Bill

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