redis从集合中删除特定成员

时间:2012-05-15 00:28:40

标签: redis set members

我有一组成员。例如,名为“college”的集合,名称为20所大学。

现在我如何只删除一个子集,例如一套精选的10所大学,来自集合?

我正在运行v2.4.5的redis服务器

此处的文档http://redis.io/commands/srem表示我们可以删除redis> = 2.4的多个密钥,但仍然无法弄清楚如何实现此目的。

我正在使用RubyonRails,我在rails控制台中完成了它

> $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 个答案:

答案 0 :(得分: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

答案 1 :(得分:3)

对不起,伙计们,这是Rails特有的问题。

我已经安装了redis gem版本2.2.2并且它不支持删除多个密钥。 但无论如何进入redis-cli for redis服务器&gt; = 2.4,我们都可以实现它。

gagan@gagan-desktop:~/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

答案 2 :(得分:3)

鉴于您的客户端库不支持这样做的简单方法,您可以使用 sdiffsdiffstore。创建一组要删除的成员并获取集合的差异,并将结果存储回原始集合中。

它可能有点复杂但它应该有用。