セット型は文字列型の順不同の集合です。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つと言えるでしょう。
