セット型は文字列型の順不同の集合です。PythonのSetとよく似ていますが、やはりこちらも論理演算ができる点が特徴です。また、異なる集合間で要素を移動させることが可能ですので、なんらかのグループを扱うこともできます。
全てのコマンドについては説明できませんのが、基本的にはRedisコマンドを小文字にしたものがメソッドとして提供されています。セット型のRedisコマンドの詳細は以下ドキュメントを参考にしてください。
http://redis.shibu.jp/commandreference/sets.html
Contents
セット型の基本操作
ではまず、セット型の基本操作です。要素の追加、取得、削除は以下のように行います。
# 集合を追加 r.sadd('fruits', 'apple', 'orange', 'banana') # 要素数を取得 r.scard('fruits') # 3 # 指定した要素が存在するかどうかを調べる r.sismember('fruits', 'apple') # True # 要素を全て取得する r.smembers('fruits') # {b'apple', b'banana', b'orange'} # 要素をpopする(取り出して削除) r.spop('fruits') # b'apple' # 要素を削除する r.srem('fruits', 'banana')
セット型の論理演算
2つのセット型で論理演算をしてみましょう。sunion、sinter、sdiffメソッドでそれぞれ論理和、論理積、論理差が実行できます。引数に演算対象のセット型のキーを指定します。
サンプルでは果物の名前が格納されている2つの集合fruits1、fruits2に対し、論理和、論理積、論理差の演算をしてみます。
# セット型を定義 r.sadd('fruits1', 'apple', 'orange', 'banana') r.sadd('fruits2', 'banana', 'orange', 'strawberry', 'cherry') # 論理和 r.sunion('fruits1', 'fruits2') # {b'apple', b'banana', b'cherry', b'orange', b'strawberry'} # 論理積 r.sinter('fruits1', 'fruits2') # {b'banana', b'orange'} # 論理差 r.sdiff('fruits1', 'fruits2') # {b'apple'}
集合の論理演算もRDBにはないRedisの強みの1つと言えるでしょう。