2010-12-17 60 views
18

我是Redis的新手,我正在寻找一些有关集合的特定帮助。为了提供一些背景知识:我正在构建一个网络应用程序,其中包含大量的卡片卡片,每个卡片都有一组带有独特ID的个人卡片。我希望用户从特定的牌组中随机抽取一组5张牌。在Redis中寻找复制集命令(或替代)

我的计划是将给定卡组的所有卡ID存储在Redis中;那么我想使用SPOP功能来绘制单张牌并将它们从套牌中移除,这样它们就不会被再次抽出。通过将卡组ID的“主集”复制到一个新的临时集中,执行复制中的弹出操作,然后在完成时删除复制的集合,似乎很有意义。

但是:我找不到任何Redis函数来命令set拷贝 - 我能看到的最接近的情况是也会创建一个空set,然后'join'空集和'master copy'与SUNIONSTORE一起设置为一个新的(如果是临时的)集合,但这看起来很乱。我想另一种方法是将设置的项目复制到我的'主机语言'(node.js)中,然后手动将项目插回到新的Redis集合中,但这看起来也很笨重。我可能还没有想到更好的第三种选择。

我做错了什么?我是不是'变'Redis,还是命令集还有点不成熟?

回答

61
redis> sadd mydeck 1 
(integer) 1 
redis> sadd mydeck 2 
(integer) 1 
redis> sadd mydeck 3 
(integer) 1 
redis> smembers mydeck 
1) "1" 
2) "2" 
3) "3" 
redis> sunionstore tempdeck mydeck 
(integer) 3 
redis> smembers mydeck 
1) "1" 
2) "2" 
3) "3" 
redis> smembers tempdeck 
1) "1" 
2) "2" 
3) "3" 

与Redis玩得开心! Salvatore

+1

谢谢@antirez,这工作很好。 – 2011-01-17 08:45:36

+0

是的,sunionstore真的很不错。 – hahakubile 2013-11-29 06:15:09