Redis удалить определенных членов из набора

У меня есть набор участников. Например, набор под названием «колледж» с названиями 20 колледжей.

Теперь, как мне удалить только подмножество, например. выбранный набор из 10 колледжей, из набора?

Я использую сервер Redis версии 2.4.5.

В документации, найденной здесь 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"]

Участники «чемпион1» и «чемпион2» не удаляются из набора.

Я установил драгоценный камень redis (2.2.2 ruby).


person Gagan    schedule 15.05.2012    source источник


Ответы (2)


Поскольку ваша клиентская библиотека не поддерживает простой способ сделать это, вы можете использовать sdiff или sdiffstore. Создайте набор элементов, которые нужно удалить, и получите разницу наборов, а затем сохраните результат обратно в исходный набор.

Это может быть немного сложнее, но это должно работать.

person The Real Bill    schedule 15.05.2012
comment
вау, я никогда не думал об этом ... палец вверх. Я буду использовать его, пока клиентская библиотека не предоставит его. - person Gagan; 16.05.2012

Извините, ребята, это проблема, специфичная для Rails.

Я установил redis gem версии 2.2.2, и у него не было поддержки удаления нескольких ключей. Однако, войдя в redis-cli для сервера redis >=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
person Gagan    schedule 15.05.2012