RedisにおけるSet操作の基礎

RedisのSetは、String型の重複を許さない無順序の集合です。各要素は一意であり、同じデータが複数存在することはできません。 RedisのSetはハッシュテーブルによって実装されており、追加、削除、検索の時間計算量は全てO(1)です。また、最大で232-1(4,294,967,295)個のメンバーを格納可能です。

1. 要素の追加

コマンド: sadd
形式: sadd キー メンバー1 [メンバー2]

127.0.0.1:6379> sadd set_data itemA
(integer) 1
127.0.0.1:6379> sadd set_data itemB itemC
(integer) 2

2. 全てのメンバーを取得

コマンド: smembers
形式: smembers キー

127.0.0.1:6379> smembers set_data
1) "itemC"
2) "itemB"
3) "itemA"

3. ランダムなメンバーを削除して返す

コマンド: spop
形式: spop キー

127.0.0.1:6379> sadd set_data itemA itemB itemC itemD itemE itemF itemG itemH itemI
(integer) 9
127.0.0.1:6379> spop set_data
"itemE"
127.0.0.1:6379> smembers set_data
1) "itemF"
2) "itemA"
3) "itemD"
4) "itemG"
5) "itemC"
6) "itemB"
7) "itemH"
8) "itemI"

4. 特定のメンバーを削除

コマンド: srem
形式: srem キー メンバー1 [メンバー2]

127.0.0.1:6379> srem set_data itemA itemB itemC
(integer) 3
127.0.0.1:6379> smembers set_data
1) "itemH"
2) "itemD"
3) "itemF"
4) "itemI"
5) "itemG"

5. メンバーの存在確認

コマンド: sismember
形式: sismember キー メンバー

127.0.0.1:6379> sismember set_data itemH
(integer) 1
127.0.0.1:6379> sismember set_data itemA
(integer) 0

6. 集合のサイズを取得

コマンド: scard
形式: scard キー

127.0.0.1:6379> scard set_data
(integer) 5

7. 差集合を取得

コマンド: sdiff
形式: sdiff key1 [key2] ...

127.0.0.1:6379> sadd group1 val1 val2 val3
(integer) 3
127.0.0.1:6379> sadd group2 val3 val4 val5
(integer) 3
127.0.0.1:6379> sdiff group1 group2
1) "val2"
2) "val1"

8. 差集合を別のキーに保存

コマンド: sdiffstore
形式: sdiffstore destination key1 [key2] ...

127.0.0.1:6379> sdiffstore result group1 group2
(integer) 2
127.0.0.1:6379> smembers result
1) "val2"
2) "val1"

9. 積集合を取得

コマンド: sinter
形式: sinter key1 [key2] ...

127.0.0.1:6379> sinter group1 group2
1) "val3"

10. 積集合を別のキーに保存

コマンド: sinterstore
形式: sinterstore destination key1 [key2] ...

127.0.0.1:6379> sinterstore inter_result group1 group2
(integer) 1
127.0.0.1:6379> smembers inter_result
1) "val3"

11. メンバーを別のセットに移動

コマンド: smove
形式: smove source destination member

127.0.0.1:6379> sadd origin valA valB valC
(integer) 3
127.0.0.1:6379> sadd target valD valE valF
(integer) 3
127.0.0.1:6379> smove origin target valA
(integer) 1
127.0.0.1:6379> smembers target
1) "valD"
2) "valF"
3) "valA"
4) "valE"

12. ランダムなメンバーを取得

コマンド: srandmember
形式: srandmember key [count]

127.0.0.1:6379> srandmember random_set
"valA"
127.0.0.1:6379> srandmember random_set 3
1) "valB"
2) "valA"
3) "valC"

13. 和集合を取得

コマンド: sunion
形式: sunion key1 [key2] ...

127.0.0.1:6379> sadd setA alpha beta
(integer) 2
127.0.0.1:6379> sadd setB gamma delta
(integer) 2
127.0.0.1:6379> sunion setA setB
1) "delta"
2) "gamma"
3) "beta"
4) "alpha"

14. 和集合を別のキーに保存

コマンド: sunionstore
形式: sunionstore destination key1 [key2] ...

127.0.0.1:6379> sunionstore union_result setA setB
(integer) 4
127.0.0.1:6379> smembers union_result
1) "delta"
2) "gamma"
3) "beta"
4) "alpha"

15. 集合をイテレーションする

コマンド: sscan
形式: sscan key cursor [MATCH pattern] [COUNT count]

127.0.0.1:6379> sscan set_key 0 MATCH me* COUNT 2
1) "1"
2) 1) "member1"
   2) "member3"

タグ: redis set data-structure

7月3日 18:29 投稿