本文へスキップ
totonoe.tech

プログラミング言語を整える

中級

Redis を整える。

= キャッシュやランキングに使う Redis のコマンドを、本物と同じ表示の再現で試して学ぶ

Redis が初めての方は、先に そもそも Redis とは・どんな場面で使うか をどうぞ。

Redisとは

データをメモリに置いて高速に読み書きするキーバリューストアで、キャッシュやセッションの置き場、ランキングなどに使われます。

誕生 2009年
作った人・組織 Salvatore Sanfilippo(antirez)。現在は Redis 社(旧 Redis Labs)が開発を主導しています
種類 インメモリのキーバリューストア
ライセンス 7.2 までは BSD ライセンス。2024年の 7.4 から RSALv2 と SSPLv1 のデュアルライセンスに変わり、2025年の Redis 8 で AGPLv3 も選べるようになりました
得意なこと 文字列・ハッシュ・リスト・セット・ソート済みセットといったデータ構造を、メモリ上でとても速く読み書きできることです。
手元で動かすには redis-cli

日本での使われ方

  • データベースの読み込み結果を一時的に置いておくキャッシュとして、Web サービスの裏側でよく使われています。
  • ログイン中の利用者のセッション情報の置き場として使われ、複数のサーバーで同じセッションを共有できます。
  • ソート済みセットを使うと、ゲームのスコアや人気順のランキングを手軽に作れます。
  • INCR と有効期限(EXPIRE)を組み合わせて、一定時間あたりのアクセス回数を数える流量制限(レート制限)にも使われます。
  • リストやストリームを使って、時間のかかる処理を後で順番に片付けるための簡単なキュー(待ち行列)を作ることもあります。

使えるクラウドサービス

  • Amazon ElastiCache:AWS が提供するマネージドのキャッシュサービスで、Redis(と互換の Valkey)を選べます。
  • Amazon MemoryDB:AWS が提供する Redis 互換のインメモリデータベースで、データを複数のアベイラビリティーゾーンに永続化します。
  • Google Cloud Memorystore:Google Cloud が提供するマネージドのインメモリサービスで、Redis を扱えます。
  • Azure Cache for Redis:Microsoft Azure が提供するマネージドの Redis です。
  • Redis Cloud:Redis 社自身が提供するマネージドの Redis です。
  • Upstash:リクエスト単位の料金で使えるサーバーレスの Redis 互換サービスです。

研修・学習での位置づけ

Redis は、RDB の次に「SQL を使わないデータベース(NoSQL)」の考え方を学ぶ題材としてよく使われます。表と WHERE で後から自由に問い合わせる RDB と違い、どんな問い合わせをするかを先に決めて、それに合うキーとデータ構造を設計する点が大きな違いです。2024年のライセンス変更を受けて、Linux Foundation のもとで BSD ライセンスのまま続く派生版 Valkey も作られました。Redis 社には開発者向けの認定(Redis Certified Developer)がありましたが、現在の実施状況はこのページでは確かめられていないため、受ける場合は公式サイトで確認してください。

関わる資格

このデータベース専用の資格は、確認できた範囲ではありません。

ブラウザでRedisを動かす

redis-cli に打つコマンドを、このページの中で再現して動かします。本物の Redis ではありませんが、表示は本物の redis-cli と同じになるように作り、照合しています。書いたコマンドは端末の外には出ません。

Redis 再現・本物の Redis ではありません(表示は Redis 7.0.15 と照合)

結果

「実行」を押すと、準備のデータ(下の「準備(全お題共通)」)を入れてから、エディタのコードを流します。

この練習場でできること・できないこと
  • 本物の Redis ではなく、文字列・リスト・ハッシュ・集合・ソート済み集合と有効期限のよく使うコマンドを再現したものです。対応していないコマンドは「unknown command」になります(本物には有るものも含みます)。
  • 表示は Redis 7.0.15 の redis-cli(対話で打ったとき)と同じ形です。日本語の値は redis-cli と同じく \xe3… のようにバイトで表示されます。
  • 文字列の集合を SMEMBERS で並べたときの順番は、本物でも決まっていません(再現では入れた順に出ます)。
  • データはこのページを開いている間だけ続きます。永続化・レプリケーション・Pub/Sub・トランザクション(MULTI)は再現していません。

そもそも Redis とは

データをメモリに置いて、とにかく速く返す、キーと値のデータベース。

Redis(レディス)は、SQL を使わないNoSQLのうち、キー・バリュー型のデータベースです。名前(キー)をつけて値を入れ、そのキーで取り出します。データを主にメモリの上に置くので、読み書きがとても速いのが特徴です。値には文字列のほか、リスト・ハッシュ・集合・ソート済み集合といった形も使えます。

PostgreSQL や MySQL のように表を作って SQL で問い合わせる RDB とは考え方が違い、主役のデータベースの横で併用されることが多い道具です。メモリだけでなく、ディスクへ保存する機能もあります。MongoDB のように入れ子の文書を扱うのではなく、単純な形のデータを高速に扱います。

どこで・どんな場面で使うか

  • キャッシュ

    何度も読むデータを一時的に置いておき、メインのデータベースへの問い合わせを減らして画面を速くします。

  • ログイン状態(セッション)の保存

    ログイン中のユーザーの情報を、期限つきで短時間だけ持つのに向いています。

  • ランキング

    ソート済み集合を使うと、得点順の並びを素早く更新・取得できます。

  • 処理待ちの行列(キュー)

    メール送信など、あとで順番に処理する仕事を並べておく用途にも使われます。

  • 求人での位置づけ

    バックエンドやインフラの募集で、RDB と並んで名前が出ます。

向いている場面・向いていない場面

  • 向いている場面:素早い読み書きが大事な短い値、期限つきのデータ、ランキングや行列。
  • 向いていない場面:大量のデータを全部置く用途(容量はメモリに左右されます)や、複雑な条件での検索・集計。これは RDB が得意です。
  • 併用が基本。メインのデータベース+Redis という組み合わせを知っておくと、Web サービスの構成が読めるようになります。

上の練習場では、redis-cli のコマンドの動きをブラウザの中で再現して試せます(本物の Redis ではありません)。下のお題のコマンドを流して、結果を確かめてみてください。

6つのお題をRedisで書く

PostgreSQL・MySQL・DuckDB・MongoDB・Redis の5ページで、同じ商品と注文のデータに同じ6つのお題を並べています。SQL の方言の違いや、SQL を使わないデータベースでの考え方の違いがそのまま比べられます。

上の練習場は本物の Redis ではなく、よく使うコマンドの動きを再現したものです。表示している結果は、Redis 7.0.15 で redis-cli に実際に流した表示と、練習場の再現の表示の両方が一字一句同じになることを確かめています。

準備(全お題共通)データを入れるコード。お題2〜6・クイズ・エラーの例は、これを流した後に続けて流した結果です。
HSET product:1 name apple category fruit price 150
HSET product:2 name mikan category fruit price 80
HSET product:3 name milk category drink price 200
HSET product:4 name tea category drink price 120
HSET product:5 name bread category bakery price 250
ZADD products:by_price 150 1 80 2 200 3 120 4 250 5
SADD category:fruit 1 2
SADD category:drink 3 4
SADD category:bakery 5
HSET order:1 product_id 1 qty 3 ordered_on 2026-10-01
HSET order:2 product_id 3 qty 1 ordered_on 2026-10-01
HSET order:3 product_id 2 qty 5 ordered_on 2026-10-02
HSET order:4 product_id 1 qty 2 ordered_on 2026-10-03
HSET order:5 product_id 4 qty 4 ordered_on 2026-10-03

redis-cli

HSET product:1 name apple category fruit price 150
HSET product:2 name mikan category fruit price 80
HSET product:3 name milk category drink price 200
HSET product:4 name tea category drink price 120
HSET product:5 name bread category bakery price 250
ZADD products:by_price 150 1 80 2 200 3 120 4 250 5
SADD category:fruit 1 2
SADD category:drink 3 4
SADD category:bakery 5
HSET order:1 product_id 1 qty 3 ordered_on 2026-10-01
HSET order:2 product_id 3 qty 1 ordered_on 2026-10-01
HSET order:3 product_id 2 qty 5 ordered_on 2026-10-02
HSET order:4 product_id 1 qty 2 ordered_on 2026-10-03
HSET order:5 product_id 4 qty 4 ordered_on 2026-10-03
HGETALL product:1

結果

(integer) 3
(integer) 3
(integer) 3
(integer) 3
(integer) 3
(integer) 5
(integer) 2
(integer) 2
(integer) 1
(integer) 3
(integer) 3
(integer) 3
(integer) 3
(integer) 3
1) "name"
2) "apple"
3) "category"
4) "fruit"
5) "price"
6) "150"

Redis には表がなく、「キー → 値」の組を入れていきます。ここでは商品1件を product:1 のようなキーのハッシュ(項目名と値の組の集まり)にし、価格順の索引としてソート済みセット products:by_price、カテゴリごとの集合 category:fruit などを自分で作っています。値はすべて文字列として保存されます。日本語の値も保存できますが、redis-cli は "\xe3\x82\x8a…" のようにバイト単位でエスケープして表示するため、このページでは英字の値を使っています。

同じお題をほかのデータベースで: PostgreSQL・MySQL・DuckDB・MongoDB

出力当てクイズ

準備のデータを入れた後に流したときの、最後のコマンドの結果を選んでください。選ぶと正解と理由が出ます(答えはどこにも送られず、記録もしません)。

問1

SET visits 10
INCR visits

画面に出るのは?

問2

SET greeting hello
APPEND greeting world

画面に出るのは?

問3

LPUSH queue a b c
LRANGE queue 0 0

画面に出るのは?

問4

SET token abc
TTL token

画面に出るのは?

よくあるエラーと直し方

書き始めの人が出会いやすいエラーです。メッセージは英語のまま出るので、どの言葉を手がかりにすればよいかもあわせて載せています。

型の違うキーに命令した

エラーになるコード

GET product:1

画面に出るメッセージ(抜粋)

(error) WRONGTYPE Operation against a key holding the wrong kind of value

何が起きているか:product:1 はハッシュなのに、文字列を読む GET を使ったためです。Redis の命令はデータ構造ごとに分かれています。

直し方:TYPE product:1 で型を確かめ、ハッシュなら HGET や HGETALL を使います。

数でない値を増やそうとした

エラーになるコード

SET word apple
INCR word

画面に出るメッセージ(抜粋)

(error) ERR value is not an integer or out of range

何が起きているか:INCR は整数として読める文字列にしか使えません。apple は整数として読めないためエラーになりました。

直し方:カウンターに使うキーには数だけを入れます。小数を足したいときは INCRBYFLOAT を使います。

引数の数が違う

エラーになるコード

GET

画面に出るメッセージ(抜粋)

(error) ERR wrong number of arguments for 'get' command

何が起きているか:GET には読むキーを1つ渡す必要がありますが、何も渡していませんでした。

直し方:GET product_name のようにキーを付けます。複数のキーを一度に読むときは MGET を使います。

命令の名前を間違えた

エラーになるコード

HGETAL product:1

画面に出るメッセージ(抜粋)

(error) ERR unknown command 'HGETAL', with args beginning with: 'product:1' 

何が起きているか:HGETALL を HGETAL と書き間違えたため、Redis が知らない命令として扱いました。

直し方:命令の綴りを見直します。redis-cli では命令を打つ途中で引数のヒントが表示されるので、それも手がかりになります。

ほかのデータベースの解説

  • PostgreSQL 1986年にカリフォルニア大学バークレー校で始まった研究プロジェクト POSTGRES が元で・リレーショナルデータベース
  • MySQL 1995年・リレーショナルデータベース
  • DuckDB 2019年・組み込み型の分析用
  • MongoDB 2009年・ドキュメント指向データベース

5つのデータベースと SQLite を並べた比較は データベースを整える にあります。 書いたコードはどこにも送られません(このページに入力欄はクイズの選択だけで、選んだ答えも記録しません)。

このツールについて

データをメモリに置いて高速に読み書きするキーバリューストアで、キャッシュやセッションの置き場、ランキングなどに使われます。

Redis の概要と、同じ6つのお題をキーとデータ構造の考え方で。コマンドを再現した練習場の表示は本物の redis-cli と同じです。

主な機能

  • 概要(誕生・作った人・種類・ライセンス)と日本での使われ方・クラウドサービス・研修と資格
  • 同じ商品と注文のデータで6つのお題(PostgreSQL・MySQL・DuckDB・MongoDB の同じお題へ移れる)
  • 出力当てクイズ4問(正解と理由)
  • よくあるエラー4件(実際のメッセージ・原因・直し方)
  • よく使うコマンドを再現した練習場(表示は Redis 7.0.15 の redis-cli と照合済み)
  • 送信ゼロ

よくある質問

Q. 練習場では本物の Redis が動いているのですか?

A. 動いていません。Redis はブラウザの中で動かせないため、文字列・リスト・ハッシュ・集合・ソート済み集合と有効期限のよく使うコマンドを再現しています。解説のコードはどれも、本物の Redis 7.0.15 の redis-cli と再現の両方で流し、表示が一字一句同じになることを確かめています。

Q. 日本語の値が \xe3\x81… のように表示されるのはなぜですか?

A. redis-cli は値をバイト列として扱い、表示できない文字を \xNN の形で出すためです。値そのものは壊れていません。redis-cli に --raw を付けると、そのままの文字で表示されます。

Q. Redis で WHERE や JOIN のような問い合わせはできますか?

A. SQL のような問い合わせの言葉はありません。あとで聞きたい問いに合わせて、ソート済み集合や集合を「索引」として自分で用意しておき、キーを指定して読み出します。複数のデータを組み合わせるのは、アプリケーションの側の仕事になります。

入力値はURLの「#」以降に入るためサーバーには送信されません。リンクを開くと同じ状態を復元します。

続けて整える

データの時点:各ページに記載の版(各プロジェクトの公式リリース)

データの更新予定の一覧

運営サイト

私たちが運営するサイト