こんにちは。Redisの世界へようこそ。
大規模システムの心臓部で、ミリ秒単位の応答を支えるRedis。その強力なデータ構造を使いこなす中で、誰もが一度は「今、どんなキーが登録されているんだろう?」と中身を覗きたくなる瞬間が訪れます。
そんな時、初心者がやりがちな「禁断の操作」と、それを華麗に回避する「プロの作法」についてお話ししましょう。ここを理解すれば、あなたのRedis運用は一気に一段上のレベルへ引き上げられますよ。
—
1. 初心者が陥る「禁断の罠」:KEYSコマンド
Redisに保存されているキーを全部見たいとき、つい使いたくなるのが `KEYS ` というコマンドです。
しかし、本番環境でこれを実行するのは、「満員電車で大声で叫んで全員の動きを止める」ような行為です。
なぜか?Redisは「シングルスレッド」で動いています。つまり、一度に一つの仕事しかできません。`KEYS ` は、数百万個あるキーを一つ一つ律儀にチェックし終わるまで、他のすべての処理を完全にフリーズさせてしまうのです。
もし、あなたのサービスが秒間数万件のアクセスを捌いている最中にこれを実行したら……想像するだけで恐ろしいですよね。
2. 救世主「SCANコマンド」:賢い探偵の仕事術
そこで登場するのが `SCAN` コマンドです。「全部一度に見ようとせず、少しずつ分けて探そう」という知的なアプローチです。
これを日常の例えで説明しましょう。
あなたは「巨大な図書館の蔵書リスト」を作らなければなりません。
- KEYSコマンド: 図書館の全通路を全力疾走し、一冊残らずメモを取る。途中で誰かに話しかけられても無視する(=システムが止まる)。
- SCANコマンド: 「今日はこの棚の10冊だけ確認しよう」と決め、終わったら「次は隣の棚から」とメモ(カーソル)を残して一度休憩する。その間、他のお客さんは自由に本を借りられる(=システムが止まらない)。
3. SCANコマンドを使ってみよう
`SCAN` は「カーソル」という道しるべを使って、少しずつ探索を進めます。
基本の書き方
最初の探索(カーソル0からスタート)
SCAN 0
実行結果の読み方(例)
1) “17” <-- 次に探索する場所を示す「新しいカーソル」 2) 1) "user:1" <-- 見つかったキー 2) "user:2" 3) "order:55" この結果の `17` という数字が重要です。次は `SCAN 17` と打つだけで、続きから探索が再開されます。カーソルが `0` に戻ったときが、全探索の完了です。
4. プロからのアドバイス:さらなる高みへ
`SCAN` を使う際、さらに実戦的なテクニックがあります。
- MATCHオプションを使う:
`SCAN 0 MATCH user:` のように書くと、特定のパターン(この場合はユーザー関連のキー)だけを抽出できます。全走査よりもずっと効率的です。
- COUNTオプションで調整:
`SCAN 0 COUNT 100` とすると、一度にチェックする数を指定できます。データ量が多い場合は、ここを増やすことで効率が上がります。
—
まとめ:Redisと長く付き合うために
Redisの運用で最も大切なのは、「メインの処理を邪魔しないこと」です。
`KEYS` は、開発環境で遊ぶ分には便利ですが、本番環境では決して使ってはいけません。`SCAN` という「分断して統治する(Divide and Conquer)」手法を覚えたあなたは、もうRedisの運用で大きな火傷をすることはないでしょう。
最初は少し面倒に見えるかもしれませんが、この「カーソルを回して少しずつ進める」というプロセスこそが、高負荷な環境でも安定して動き続けるプロのエンジニアの流儀です。
さあ、自信を持って次のコマンドを打ってみてください。Redisはあなたの良き相棒として、きっと期待以上のパフォーマンスを返してくれますよ。
コメント