2012-05-15 51 views
3

我有一組成員。例如,名爲「學院」的一組名稱爲20所大學。redis從集中刪除特定成員

現在我該如何刪除一個子集,例如一組選定的10所大學,從設置?

我運行v2.4.5

這裏http://redis.io/commands/srem發現該文檔的Redis的服務器說,我們可以刪除多個鍵的Redis> = 2.4,但還是沒能弄清楚如何實現這一目標。

我與RubyonRails工作,我做到了我的軌道控制檯

> $redis 
    #<Redis client v2.2.2 connected to redis://localhost:6379/0 (Redis v2.4.5)> 
> ruby-1.9.3-p0 :011 > $redis.sadd("college","champion1") 
=> true 
ruby-1.9.3-p0 :012 > $redis.sadd("college","champion2") 
=> true 
ruby-1.9.3-p0 :013 > $redis.sadd("college","champion3") 
=> true 
ruby-1.9.3-p0 :014 > $redis.sadd("college","champion4") 
=> true 
ruby-1.9.3-p0 :015 > $redis.sadd("college","champion5") 
=> true 
ruby-1.9.3-p0 :016 > $redis.smembers("college") 
=> ["champion1", "champion2", "champion3", "champion4", "champion5" 
ruby-1.9.3-p0 :017 > $redis.srem("college","champion1" "champion2") 
=> false 
ruby-1.9.3-p0 :018 > $redis.smembers("college") 
=> ["champion1", "champion2", "champion3", "champion4", "champion5"] 

成員「champion1」和「champion2」不會從集合中刪除。

我已經安裝了redis(2.2.2 ruby​​)gem。

回答

3

鑑於您的客戶端庫不支持簡單的方法來做到這一點,你可以使用 sdiffsdiffstore。創建一組要刪除的成員並獲取這些集合的差異,並將結果存儲回原始集合中。

它可能有點複雜,但它應該工作。

+0

哇我從來沒有想過這樣做...豎起大拇指。我將使用它,直到客戶端庫提供它。 – Gagan

3
% telnet localhost 6379 
Trying 127.0.0.1... 
Connected to localhost. 
Escape character is '^]'. 

... 

sadd myset 1 2 3  
:3 
srem myset 1 3 
:2 
3

對不起,這是Rails特有的問題。

我已經安裝了redis gem版本2.2.2,它不支持刪除多個密鑰。 但是,如果redis服務器> = 2.4進入redis-cli,我們可以實現它。

[email protected]:~/projects/test_proj [master]$ redis-cli 
redis 127.0.0.1:6379> smembers "college" 
1) "champion1" 
2) "champion2" 
3) "champion3" 
4) "champion4" 
5) "champion5" 
redis 127.0.0.1:6379> srem "college" "champion1" "champion2" 
(integer) 2 
redis 127.0.0.1:6379> smembers "college" 
1) "champion3" 
2) "champion4" 
3) "champion5" 
redis 127.0.0.1:6379> exit