2010-12-17 66 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