pythonでredisをさわる練習 3

昨日に続いて、pythonでredisのセットを操作してみた。
リストよりわかりやすい。

# coding=utf-8
import redis


r = redis.StrictRedis(host='localhost', port=6379, db=0)

r.delete('alphabet')
r.delete('digit')
r.delete('character')

# sadd: キーに対応するセットに値を追加する
r.sadd('alphabet', 'A', 'B', 'C', 'D')
r.sadd('digit', 1, 2, 3, 4, 'Z')

# smembers: キーに対応するセットのすべての値を返す
values = r.smembers('alphabet')
assert(values == {'A', 'B', 'C', 'D'})

# srem: キーに対応するセットから値を削除する
r.srem('alphabet', 'D')
values = r.smembers('alphabet')
assert(values == {'A', 'B', 'C'})

# spop: キーに対応するセットからランダムに値を取り出す
value = r.spop('alphabet')
assert(value in ['A', 'B', 'C'])

# scard: キーに対応するセットの要素数を取り出す
count = r.scard('alphabet')
assert(count == 2)

# smove: セットからセットへ値を移動する
r.smove('digit', 'alphabet', 'Z')

# sismember: キーに対応するセットに値があるかどうか確認する
assert(r.sismember('alphabet', 'Z'))
assert(not r.sismember('digit', 'Z'))


# sunion: 複数のセットの結合
union_set = r.sunion('alphabet', 'digit')
# => set(['A', 'B', '1', '3', '2', '4', 'Z'])
assert(len(union_set) == 7)

# sunionstore: 複数のセットを結合してredisに格納する
r.sunionstore('character', 'alphabet', 'digit')
assert(r.scard('character') == 7)

# srandmember: ランダムで値を一つ取り出す
random = r.srandmember('character')
assert(random in union_set)

# sinter: 複数のセットの共通セットを返す
inter_set = r.sinter('character', 'digit')
assert(inter_set == {'1', '2', '3', '4'})

# sinterstore: 複数のセットの共通セットをredisに格納する
r.sinterstore('new_digit', 'character', 'digit')
assert(r.scard('new_digit') == 4)


# sdiff: 複数のセットの差分セットを返す
diff_set = r.sdiff('character', 'digit')
assert(len(diff_set) == 3)

# sdiffstore: 複数のセットの差分セットをredisに格納する
r.sdiffstore('new_alphabet', 'character', 'digit')
assert(r.scard('new_alphabet') == 3)


print 'alphabet: ', r.smembers('alphabet')
print 'digit',  r.smembers('digit')
print 'new_alphabet: ', r.smembers('new_alphabet')
print 'new_digit',  r.smembers('new_digit')

# alphabet:  set(['A', 'C', 'Z'])
# digit set(['1', '3', '2', '4'])
# new_alphabet:  set(['A', 'C', 'Z'])
# new_digit set(['1', '3', '2', '4'])