2012-02-14 83 views
8

我正在使用Redis中的兩個有序集。在某個時間點,我需要過期set 1,將set 2重命名爲set 1。這刪除了set 2。然後我需要複製set 1重新創建set 2作爲副本。這可能嗎?是否可以複製Redis Sorted Set?

我在Redis文檔中發現了zunionstore,但我不確定這是我以後的樣子。

回答

14

確實,zunionstore似乎工作正常。它在指定的集合之間進行聯合,並存儲結果。如果你只提供一套,它會複製一份。至少,我只是試了一下,它似乎工作:

zadd foo 1 a 
zadd foo 2 b 
zunionstore bar 1 foo 
zrange bar 0 -1 
1) "a" 
2) "b" 
+2

偉大,感謝萊納斯。我正在用Redis Ruby gem來做這件事,看起來它的語法與我期待的略有不同。我最終通過以下方式在IRB中工作:'REDIS.zunionstore('bar',[1,'foo'])''。你的回答正是我之後的確認。 – Pete 2012-02-14 21:04:43

+0

太棒了!我也學到了一些新的東西,我會牢記這一點! – 2012-02-14 22:06:23

+3

是不是有更有效的方法來複制?根據文檔,'zunionstore'是'O(N)+ O(M log(M))'。 – Mahn 2014-12-09 14:32:37

相關問題