3

私はメンバーのセットを持っています。たとえば、20 の大学の名前を持つ「college」という名前のセット。

セットから、たとえば選択した 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 をインストールしました。

4

3 に答える 3

4

申し訳ありませんが、これは Rails 固有の問題です。

redis gem バージョン 2.2.2 をインストールしましたが、複数のキーの削除がサポートされていませんでした。ただし、redis サーバー >=2.4 の redis-cli に入ると、それを達成できます。

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
于 2012-05-15T01:12:50.380 に答える
3

クライアント ライブラリがそれを行う簡単な方法をサポートしていない場合は、 sdiffまたはsdiffstoreを使用できます。削除するメンバーのセットを作成し、セットの差分を取得して、結果を元のセットに格納します。

もう少し複雑かもしれませんが、うまくいくはずです。

于 2012-05-15T02:42:19.357 に答える
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
于 2012-05-15T00:33:40.910 に答える