【入門編】 Sorted Set型:基本操作 – Redis

こんにちは。Redisの世界へようこそ。

エンジニアとして多くのシステムを見てきましたが、Redisの「Sorted Set(ソート済みセット)」ほど、シンプルなのに奥が深く、かつ開発者の生産性を劇的に変えてくれるデータ構造は他にありません。

今日は、このSorted Setを「日常の風景」に例えながら、本質をマスターしていきましょう。ここさえクリアすれば、あなたのRedis操作は一段上のレベルに達します。

—

Sorted Setを「クラスの成績順リスト」でイメージする

RedisのSorted Setは、ただの「データの集合」ではありません。「スコア(数値)」によって、常に自動で整列される魔法の掲示板のようなものです。

例えば、クラスの「テストの点数ランキング」を想像してください。

  • メンバー(値): 生徒の名前
  • スコア: テストの点数

新しいテスト結果が出るたびに、名前と点数を登録すれば、Redisは勝手に順位を並べ替えてくれます。これがSorted Setの正体です。

—

1. ZADD:ランキングに名前を刻む

まずはデータの追加です。`ZADD`を使います。

生徒を追加 (ZADD キー スコア 名前)
ZADD class_scores 85 “Alice”
ZADD class_scores 92 “Bob”
ZADD class_scores 78 “Charlie”

OKと返ってくれば、自動的にスコア順に整列されます。

ポイント: `ZADD`は追加だけでなく、既にいる人の点数を書き換えるときも使います。点数が変われば、その瞬間に順位も自動更新されます。まさに「生きているリスト」です。

—

2. ZREM:リストから退場してもらう

誰かが転校したり、登録を取り消すときは`ZREM`です。

Charlieをリストから削除
ZREM class_scores “Charlie”

これで、Charlieはランキングから姿を消し、残ったメンバーだけで順位が再構成されます。

—

3. ZCARD:今、何人がランキングにいる?

リストの総数を知るには`ZCARD`を使います。「カード(枚数)」と覚えましょう。

ZCARD class_scores
=> (integer) 2 (AliceとBobの2人だけになりました)

—

4. ZSCORE:あの人の点数は?

特定のメンバーのスコアをピンポイントで確認するなら`ZSCORE`です。

ZSCORE class_scores “Alice”
=> “85”

データベース全体をスキャンする必要はありません。Redisは内部でハッシュテーブルを使って管理しているため、この検索は一瞬で終わります。

—

5. ZRANK と ZREVRANK:いま何位?

ここがSorted Setの醍醐味です。「順位」を知るコマンドです。

  • ZRANK: 点数が低い順(昇順)の順位。0から始まります。
  • ZREVRANK: 点数が高い順(降順)、つまり「何位か」を知りたいときはこれ。

点数が高い順での順位を確認
ZREVRANK class_scores “Bob”
=> (integer) 0 (Bobが1位!インデックスは0から始まるので0が1位です)

ZREVRANK class_scores “Alice”
=> (integer) 1 (Aliceは2位)

「ランキング機能」を自前で実装しようとすると、データベースを`ORDER BY`で検索して…と大変ですが、Redisならこのコマンド一つで完了です。

—

伝説のアーキテクトからのアドバイス

初心者がやりがちなミスは、「とりあえず全部取ってきて、アプリ側(プログラム側)でソートしようとする」ことです。これではRedisの凄みを半分も活かせません。

Sorted Setは、「データの保存」と「順位の計算」を同時に行うためにあります。Redisに「お任せ」してしまえば、アプリ側は非常にシンプルで高速なコードになります。

今日紹介した6つのコマンドは、どれもRedisの心臓部です。まずはターミナルを開いて、自分の手で叩いてみてください。`ZADD`で値を入れ、`ZREVRANK`で順位が変わる様子を眺める。その体験こそが、エンジニアとしての確かな地力になります。

もし迷ったら、いつでもまたここに戻ってきてください。Redisの旅は、ここからが本当に面白いですよ。

コメント

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