【入門編】 Set型:集合演算 – Redis

やあ、Redisの世界へようこそ。私はこのアーキテクチャの深淵を長年見つめてきたエンジニアだ。

Redisと聞くと「ただの高速なキャッシュ」だと思われがちだが、実はその真髄は、「手元のデータをどう組み合わせて、意味ある価値に変えるか」というデータ構造の柔軟性にある。

今回は、Redisの中でも特に強力な「Set(集合)」を使った演算について話そう。数学の授業で習ったような話に見えるかもしれないが、実務ではこれが「ユーザーの行動分析」や「SNSの友達関係の抽出」の肝になるんだ。

専門用語を並べ立てるのは簡単だが、今回はあえて「日常の出来事」に例えて、その本質を君の脳に焼き付けよう。

—

Set(集合)って、結局なんなの?

Setとは、一言で言えば「重複を許さない、整列されていない箱」だ。

例えば、君のスマホの連絡先を想像してほしい。同じ名前の友達が二重に登録されていたら困るよね? Setは自動的に「同じものは一つにまとめる」というルールで管理してくれる、非常に賢い箱なんだ。

今回は、以下の3つの演算をマスターする。
1. SUNION(和集合):混ぜる
2. SINTER(積集合):共通点を探す
3. SDIFF(差集合):違いを抜き出す

—

1. SUNION:全部まとめて「混ぜる」

例:2つのグループの参加者を合わせる

グループA(`fruits`)に「りんご、みかん」があり、グループB(`vegetables`)に「みかん、キャベツ」があるとしよう。これを混ぜるとどうなる?

グループAに登録
SADD fruits “apple” “orange”
グループBに登録
SADD vegetables “orange” “cabbage”

2つを混ぜる(SUNION)
SUNION fruits vegetables
結果: “apple”, “orange”, “cabbage”
※ “orange” は重複しているので、ちゃんと一つになる。

ここがポイント: 重複を気にせず、とりあえず全部突っ込んでから「これら全部を対象にしたい」という時に使う。シンプルだが強力だ。

—

2. SINTER:共通点を探す

例:共通の趣味を持つ人を探す

これがRedisの真骨頂だ。SNSで「AさんもBさんもフォローしている共通のユーザー」を表示する機能は、まさにこれだ。

ユーザーAのフォローリスト
SADD user_A “alice” “bob” “charlie”
ユーザーBのフォローリスト
SADD user_B “bob” “charlie” “david”

共通フォローを探す(SINTER)
SINTER user_A user_B
結果: “bob”, “charlie”

ここがポイント: 巨大なデータの中から「共通項」を一瞬で見つけ出せる。これがデータベースの検索クエリだと時間がかかる処理も、Redisならメモリ上で爆速で終わる。

—

3. SDIFF:違いを抜き出す

例:まだやっていないタスクを探す

「全体」から「終わったこと」を引けば、「残りのやるべきこと」がわかる。これがSDIFFだ。

全てのタスク
SADD all_tasks “task1” “task2” “task3”
完了したタスク
SADD done_tasks “task1”

まだのタスクを抜き出す(SDIFF)
SDIFF all_tasks done_tasks
結果: “task2”, “task3”

ここがポイント: 「引き算」ができることで、複雑な条件分岐を書かずに「残りの要素」を抽出できる。コードが劇的にスッキリする瞬間だ。

—

【重要】STOREが付く命令の使い道

上記のコマンド(SUNION, SINTER, SDIFF)の最後に「STORE」が付いたものがある。
例:`SUNIONSTORE destination key1 key2`

これは、計算結果を別のキーに保存するための命令だ。

  • なぜ重要か?

計算コストが高い処理を毎回行うのは非効率だ。「計算結果を一旦キャッシュしておく」ことで、2回目以降の読み込みがゼロ秒になる。これが、世界最高峰のサービスを支える「エンジニアの知恵」なんだ。

—

最後に:君へのエール

Setの演算を使いこなせるようになると、これまで「ループ処理で一つずつ確認していた」ような泥臭いコードが、たった1行のRedisコマンドに置き換わる。

コードが短くなることは、バグが減るということ。そして、システムが爆速になるということだ。

ここをクリアすれば、Redisの基本はバッチリマスターできたと言っていい。次は、これらを実際のアプリケーションのどこに組み込むか、君自身の想像力で試してみてほしい。

何かわからないことがあれば、またいつでも聞きに来てくれ。エンジニア同士、これからも楽しんでいこう。

コメント

タイトルとURLをコピーしました