はじめに
今月は「知見のない技術を学ぼう月間」ということで、Redisを学習していきます。
Redisの役割についてはなんとなく理解していましたが、実際に自分で使用したことはありませんでした。そこで今回は、DockerでRedisを起動し、基本的なコマンドを実行しながら学習していきます。
Redisの学習記事は前編と後編に分ける予定です。前編となる今回は、以下の内容を扱います。
- Redisとは何か
- DockerでRedisを起動する
- redis-cliで基本操作を試す
後編では、RedisとLaravelを組み合わせて、実際にキャッシュとして利用する方法を学習する予定です。
Redisとは何か
Redis(Remote Dictionary Server) は、主にメモリ上でデータを管理するオープンソースのデータストアです。
一般的には、次のような用途で使われます。
- キャッシュ
- セッション管理
- ランキング
- メッセージング
- 一時的なデータの保存
Redisの大きな特徴は、データを主にメモリ(RAM)上に保持することになります。Redisは主にメモリ上でデータを操作するため、RDBMSと比較して、単純なキーによるデータ取得などを高速に処理できる場合があります。ただし、Redisを使えば必ず高速化する訳ではないです。そして、RedisがRDBMSの完全な上位互換というわけではなく、それぞれに役割があります。
| 項目 | Redis | RDBMS |
|---|---|---|
| データモデル | キーと値、各種データ構造 | リレーショナル |
| 主な保存場所 | メモリ | ディスク+メモリキャッシュ |
| データ操作 | Redisコマンド | SQL |
| データの関連付け | アプリ側で設計 | JOINなど |
| 永続化 | RDB、AOFなど | 標準で永続化 |
| 主な用途 | キャッシュ、セッション、ランキング | 業務データの管理 |
RDBMSでもメモリキャッシュは利用されますが、Redisはインメモリでのデータ操作を中心に設計されています。
また、Redisでもデータの永続化機能はありますが、今回の記事では触れません。
DockerでRedisを起動する
まずはRedisの公式Dockerイメージを取得します。
docker pull redis:7.4
今回の記事では7.4系を指定します。取得したイメージを確認します。
test@test ~ % docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
redis 7.4 d24fb73aa9ca 6 days ago 120MB
Redisコンテナを起動します。
docker run -d \
--name redis-study \
-p 127.0.0.1:6379:6379 \
redis:7.4
各オプションの意味は以下の通りです。
| オプション | 説明 |
|---|---|
-d | バックグラウンドで起動 |
--name redis-study | コンテナ名を指定 |
-p 127.0.0.1:6379:6379 | ホストのlocalhostからRedisへ接続できるようにする |
redis:7.4 | 使用するDockerイメージ |
Redisの標準ポートは6379になります。コンテナが起動できているか確認します。
test@test ~ % docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d5359a3304c9 redis:7.4 "docker-entrypoint.s…" 4 minutes ago Up 4 minutes 127.0.0.1:6379->6379/tcp redis-study
test@test ~ % docker logs redis-study
1:C 12 Oct 2026 02:27:05.659 * oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
1:C 12 Oct 2026 02:27:05.659 * Redis version=7.4.11, bits=64, commit=00000000, modified=0, pid=1, just started
1:C 12 Oct 2026 02:27:05.659 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
1:M 12 Oct 2026 02:27:05.660 * monotonic clock: POSIX clock_gettime
1:M 12 Oct 2026 02:27:05.661 * Running mode=standalone, port=6379.
1:M 12 Oct 2026 02:27:05.661 * Server initialized
1:M 12 Oct 2026 02:27:05.661 * Ready to accept connections tcp
test@test ~ %
STATUSがUpになっているため、起動しています。ここでは、Redisのログも確認しています。ログからも正常に起動できていることが確認できました。Warningメッセージが表示されていますが、Redisの設定ファイルを明示していないため、デフォルト設定を使用するという意味になります。
Redisには、コマンドを実行するためのredis-cli (CLIツール)が用意されています。
test@test ~ % docker exec -it redis-study redis-cli
127.0.0.1:6379> PING
PONG
127.0.0.1:6379>
接続確認のために、PINGコマンドを実行して、PONGが返ってきました。正常に接続できています。
redis-cliで基本操作を試す
今回の基本操作で試す項目は以下になります。
- String型:
SET/GET - キーの操作:
EXISTS/DEL - 有効期限:
EXPIRE/TTL - List型:
LPUSH/LRANGE - Hash型:
HSET/HGETALL
操作の前にRedisの型について、軽くまとめておきます。
| データ型 | 用途の例 |
|---|---|
| String | 文字列、数値、キャッシュ |
| List | 順序付きデータ、キュー |
| Set | 重複のない集合 |
| Hash | ユーザー情報など |
| Sorted Set | スコア付きランキング |
| Stream | イベント・メッセージ処理 |
上記以外にも型はありますが、今回は省略します。
それでは、1のString型のデータをSETしてみます。
127.0.0.1:6379> SET name "TEST"
OK
SET コマンドは、指定したキーに値を保持します。今度は反対に、保持したデータを取得します。
127.0.0.1:6379> GET name
"TEST"
存在しないキーを指定すると、次のようになります。
127.0.0.1:6379> GET unknown
(nil)
また、String型は数値を保持することもできます。
127.0.0.1:6379> SET count 10
OK
127.0.0.1:6379> GET count
"10"
数値として扱える値に対する操作も用意されています。
127.0.0.1:6379> INCR count
(integer) 11
127.0.0.1:6379> GET count
"11"
127.0.0.1:6379>
INCRコマンドは値を1増やします。INCRコマンドをうまく使えば、アクセスカウンターとして利用できます。
次にキーの操作です。EXISTS/DEL の確認です。EXISTSコマンドはキーが存在するか確認するコマンドです。
127.0.0.1:6379> EXISTS name
(integer) 1
127.0.0.1:6379> EXISTS count
(integer) 1
127.0.0.1:6379> EXISTS sample
(integer) 0
存在すれば 1、存在しなければ、0 を返します。EXISTSコマンドは複数のキーを指定することもできます。複数のキーを指定した場合は、存在するキーの数が返ります。
127.0.0.1:6379> EXISTS name count sample
(integer) 2
127.0.0.1:6379>
DELコマンドはキーを削除します。
127.0.0.1:6379> DEL name
(integer) 1
127.0.0.1:6379> GET name
(nil)
戻り値は削除されたキーの数になります。EXISTS同様複数のキーを指定できます。
127.0.0.1:6379> SET num 800
OK
127.0.0.1:6379> DEL num count sample
(integer) 2
127.0.0.1:6379> GET num
(nil)
127.0.0.1:6379> GET count
(nil)
次に有効期限のEXPIRE/TTLの確認です。
Redisでは、キーに有効期限を設定することができます。
127.0.0.1:6379> SET session "testtest"
OK
127.0.0.1:6379> EXPIRE session 60
(integer) 1
sessionキーの有効期限が60秒になりました。キーの有効期限の残り時間を確認します。
127.0.0.1:6379> TTL session
(integer) 55
127.0.0.1:6379> TTL session
(integer) 53
TTLはキーの有効期限の残り時間を秒単位で取得します。有効期限が過ぎたキーをGETするとnil が返ってきます。
| TTLの戻り値 | 意味 |
|---|---|
0 以上 | 残りの有効期限(秒) |
-1 | キーは存在するが、有効期限が設定されていない |
-2 | キーが存在しない |
127.0.0.1:6379> GET session
(nil)
次にList型のLPUSH/LRANGE を確認します。RedisのList型は要素を順序付きで管理するデータ型です。
127.0.0.1:6379> LPUSH languages "PHP"
(integer) 1
127.0.0.1:6379> LPUSH languages "C"
(integer) 2
127.0.0.1:6379> LPUSH languages "Java"
(integer) 3
127.0.0.1:6379>
LPUSH キー名 値 で追加することができます。リストの要素を取得するにはLRANGE を使います。
127.0.0.1:6379> LRANGE languages 0 -1
1) "Java"
2) "C"
3) "PHP"
127.0.0.1:6379>
ここでは追加順と逆になっています。今回の例では、LPUSHとLPOPは省略しますLPUSH と LPOP を組み合わせればスタックとして利用できます。その他にも、List型を操作するコマンドはあります。気になる型は公式ドキュメントを参照してください。
Redis listsIntroduction to Redis lists
次はHash型のHSET/HGETALL の確認です。
127.0.0.1:6379> HSET user:1 name "TEST" age 28 language "C"
(integer) 3
ここではuser:1というキーに対して3つのフィールドを保存しています。
user:1
├── name → TEST
├── age → 28
└── language → C
HGETALLコマンドで、すべてのフィールドを取得します。
127.0.0.1:6379> HGETALL user:1
1) "name"
2) "TEST"
3) "age"
4) "28"
5) "language"
6) "C"
127.0.0.1:6379>
これで、ユーザ情報のような複数項目をまとめて扱えます。Hash型も内部のフィールドと値は文字列として扱われます。また、Redisでは、user:1のようにコロン(:)でキー名を区切る命名方法が一般的です。ただし、Redis自体がコロンを特別な文字として扱うわけではなく、キー名を整理しやすくするための慣習です。
List型やHash型も同様にEXPIREコマンドで有効期限を設定することができます。
127.0.0.1:6379> EXPIRE user:1 60
(integer) 1
127.0.0.1:6379> TTL user:1
(integer) 54
127.0.0.1:6379> TTL user:1
(integer) -2
127.0.0.1:6379> HGETALL user:1
(empty array)
127.0.0.1:6379>
また、Hash型の個々のフィールドに対しての操作もあります。気になる方は公式ドキュメントを参照してみてください。
Redis hashesIntroduction to Redis hashes
最後に
今回はDockerでRedisを起動し、redis-cliを使って基本的なコマンドを試してみました。
実際に操作してみると、Redisは単純にキーと値を保存するだけでなく、ListやHashなどのデータ型を扱えることがわかりました。また、キーに有効期限を設定できる点も、キャッシュとして利用するうえで重要な仕組みだと感じました。
今回はRedis単体での基本操作まででしたが、次回はLaravelアプリと組み合わせて、実際にキャッシュとして利用する方法を学習していきたいと思います。
最後まで読んでいただき、ありがとうございました。
