Redis入門:初心者でも簡単!インストールから基本操作まで徹底解説
Redis(Remote Dictionary Server)は、インメモリデータ構造ストアとして知られ、その高速性と柔軟性から、キャッシュ、セッション管理、リアルタイム分析など、様々な用途で広く利用されています。本記事では、Redisの基本的な概念から、インストール、設定、そして基本的な操作までを、初心者の方にもわかりやすく解説します。この記事を読めば、Redisの導入から活用までの一歩を踏み出すことができるでしょう。
目次
- Redisとは?
- 1.1 Redisの概要
- 1.2 Redisの主な特徴
- 1.3 Redisのユースケース
- Redisのインストール
- 2.1 Linuxへのインストール
- 2.2 macOSへのインストール
- 2.3 Windowsへのインストール
- Redisの設定
- 3.1 redis.confファイルの概要
- 3.2 よく使う設定項目
- 3.3 設定ファイルの適用
- Redisの起動と停止
- 4.1 Redisサーバーの起動
- 4.2 Redisサーバーの停止
- 4.3 Redisクライアントの起動
- Redisのデータ型と基本操作
- 5.1 Strings (文字列)
- 5.1.1 SETコマンド
- 5.1.2 GETコマンド
- 5.1.3 DELコマンド
- 5.1.4 INCR/DECRコマンド
- 5.2 Hashes (ハッシュ)
- 5.2.1 HSETコマンド
- 5.2.2 HGETコマンド
- 5.2.3 HGETALLコマンド
- 5.2.4 HDELコマンド
- 5.3 Lists (リスト)
- 5.3.1 LPUSH/RPUSHコマンド
- 5.3.2 LPOP/RPOPコマンド
- 5.3.3 LRANGEコマンド
- 5.3.4 LLENコマンド
- 5.4 Sets (セット)
- 5.4.1 SADDコマンド
- 5.4.2 SMEMBERSコマンド
- 5.4.3 SREMコマンド
- 5.4.4 SISMEMBERコマンド
- 5.5 Sorted Sets (ソート済みセット)
- 5.5.1 ZADDコマンド
- 5.5.2 ZRANGEコマンド
- 5.5.3 ZREMコマンド
- 5.5.4 ZSCOREコマンド
- 5.1 Strings (文字列)
- Redisの高度な機能
- 6.1 Pub/Sub (パブリッシュ/サブスクライブ)
- 6.2 Transactions (トランザクション)
- 6.3 Persistence (永続化)
- 6.3.1 RDB (Redis Database)
- 6.3.2 AOF (Append Only File)
- Redisの活用事例
- 7.1 キャッシュとしての利用
- 7.2 セッションストアとしての利用
- 7.3 リアルタイム分析としての利用
- まとめ
1. Redisとは?
1.1 Redisの概要
Redisは、Key-Value型のインメモリデータストアです。RAM(Random Access Memory)上にデータを保持するため、従来のディスクベースのデータベースと比較して、圧倒的な高速性を実現しています。Key-Value型データベースであるため、複雑なクエリは得意としませんが、単純なデータの読み書きには非常に優れています。
1.2 Redisの主な特徴
- インメモリ: RAM上にデータを保持するため、高速な読み書きが可能です。
- Key-Value型: シンプルなデータ構造で、直感的な操作が可能です。
- 多様なデータ型: Strings、Hashes、Lists、Sets、Sorted Setsといった豊富なデータ型をサポートしています。
- Pub/Sub: パブリッシュ/サブスクライブモデルをサポートしており、リアルタイムなメッセージングやイベント通知に利用できます。
- Transactions: トランザクション機能をサポートしており、複数の操作をまとめて実行できます。
- Persistence: 永続化機能をサポートしており、データの消失を防ぐことができます。
- Luaスクリプティング: Luaスクリプトを実行できるため、複雑な処理をサーバーサイドで実行できます。
- クラスタリング: 複数のRedisサーバーを連携させて、データの分散や可用性を向上させることができます。
1.3 Redisのユースケース
Redisはその高速性と柔軟性から、様々な用途で利用されています。
- キャッシュ: Webアプリケーションのキャッシュとして利用することで、データベースへの負荷を軽減し、レスポンス速度を向上させることができます。
- セッションストア: ユーザーのセッション情報をRedisに保存することで、セッションの共有やスケールアウトが容易になります。
- リアルタイム分析: リアルタイムなアクセスログやイベントログをRedisに保存し、集計や分析を行うことで、リアルタイムなダッシュボードやアラートシステムを構築できます。
- メッセージキュー: Pub/Sub機能を利用して、メッセージキューとして利用することで、非同期処理やイベント駆動型のアーキテクチャを構築できます。
- ランキングシステム: Sorted Setsを利用して、ランキングシステムを構築することで、リアルタイムなランキング表示やスコア更新が可能です。
- 地理空間データ: 地理空間データをRedisに保存し、位置情報に基づいた検索や分析を行うことができます。
- リアルタイムチャット: Pub/Sub機能を利用して、リアルタイムチャットシステムを構築することができます。
2. Redisのインストール
Redisを実際に使用するには、まずRedisサーバーをインストールする必要があります。ここでは、Linux、macOS、Windowsへのインストール方法を解説します。
2.1 Linuxへのインストール
多くのLinuxディストリビューションでは、パッケージマネージャーを使用してRedisを簡単にインストールできます。
Ubuntu/Debianの場合:
bash
sudo apt update
sudo apt install redis-server
CentOS/RHELの場合:
bash
sudo yum install epel-release # EPELリポジトリが必要な場合
sudo yum install redis
インストール後、Redisサーバーが自動的に起動しているはずです。念のため、以下のコマンドで状態を確認できます。
bash
sudo systemctl status redis-server
2.2 macOSへのインストール
macOSでは、Homebrewを使ってRedisをインストールするのが一般的です。Homebrewがインストールされていない場合は、まずHomebrewをインストールしてください。
bash
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
Homebrewのインストールが完了したら、Redisをインストールします。
bash
brew update
brew install redis
インストール後、Redisサーバーを起動します。
bash
brew services start redis
2.3 Windowsへのインストール
Windowsには、公式のRedisインストールパッケージはありません。代わりに、MS Open Techによって開発されたWindows版Redisを使用するか、WSL (Windows Subsystem for Linux) を利用してLinux版のRedisをインストールする方法があります。
MS Open Tech版Redisのインストール:
- MS Open TechのGitHubリポジトリから、最新のRedisリリースをダウンロードします。
- ダウンロードしたzipファイルを展開します。
- 展開したフォルダの中に
redis-server.exe
があります。コマンドプロンプトまたはPowerShellを開き、そのフォルダに移動して、redis-server.exe
を実行すると、Redisサーバーが起動します。
WSLを利用したLinux版Redisのインストール:
- Windows Subsystem for Linux (WSL) を有効にします。Microsoftのドキュメントを参照して、WSLをインストールし、UbuntuなどのLinuxディストリビューションを設定します。
- WSLを起動し、Linuxディストリビューション上で、Linuxへのインストールと同じ手順でRedisをインストールします。
3. Redisの設定
Redisの設定は、通常redis.conf
ファイルで行います。このファイルには、ポート番号、ログレベル、メモリ制限、永続化の設定など、Redisサーバーの動作に関する様々な設定が記述されています。
3.1 redis.confファイルの概要
redis.conf
ファイルは、Redisサーバーの起動時に読み込まれる設定ファイルです。このファイルを編集することで、Redisサーバーの動作を細かく制御することができます。redis.conf
ファイルは、通常、Linuxでは/etc/redis/redis.conf
に、macOSでは/usr/local/etc/redis.conf
に配置されています。Windowsの場合は、展開したRedisフォルダにあります。
3.2 よく使う設定項目
redis.conf
ファイルには、非常に多くの設定項目がありますが、ここでは、特に重要な設定項目を紹介します。
bind
: RedisサーバーがリッスンするIPアドレスを指定します。デフォルトでは127.0.0.1
(ローカルホスト)に設定されています。外部からの接続を許可する場合は、0.0.0.0
に設定するか、特定のIPアドレスを指定します。port
: Redisサーバーがリッスンするポート番号を指定します。デフォルトは6379
です。requirepass
: Redisサーバーへのアクセスにパスワードを設定します。セキュリティのために、必ず設定することを推奨します。maxmemory
: Redisサーバーが使用できる最大メモリ容量を指定します。この値を超えると、Redisは設定されたポリシーに基づいて、古いデータを削除します。maxmemory-policy
: Redisサーバーがメモリ不足になった場合に、どのデータを削除するかを指定します。以下のようなポリシーがあります。volatile-lru
:有効期限が設定されているデータの中で、Least Recently Used (LRU) のデータを削除します。allkeys-lru
:全てのデータの中で、Least Recently Used (LRU) のデータを削除します。volatile-random
:有効期限が設定されているデータの中で、ランダムにデータを削除します。allkeys-random
:全てのデータの中で、ランダムにデータを削除します。volatile-ttl
:有効期限が設定されているデータの中で、TTL (Time To Live) が最も短いデータを削除します。noeviction
:データを削除せずに、書き込み操作を拒否します。
logfile
: Redisサーバーのログを記録するファイルのパスを指定します。dir
: Redisのデータファイルを保存するディレクトリを指定します。
3.3 設定ファイルの適用
redis.conf
ファイルを編集した後、変更を適用するには、Redisサーバーを再起動する必要があります。
Linuxの場合:
bash
sudo systemctl restart redis-server
macOSの場合:
bash
brew services restart redis
Windowsの場合:
コマンドプロンプトまたはPowerShellで、redis-server.exe redis.conf
を実行します。
4. Redisの起動と停止
4.1 Redisサーバーの起動
Redisサーバーの起動方法は、インストール方法によって異なります。
-
Linux/macOS (パッケージマネージャー):
bash
sudo systemctl start redis-server # Linux
brew services start redis # macOS
* Windows (MS Open Tech版):コマンドプロンプトまたはPowerShellで、
redis-server.exe
を実行します。redis.conf
ファイルを指定する場合は、redis-server.exe redis.conf
を実行します。
4.2 Redisサーバーの停止
Redisサーバーの停止方法も、インストール方法によって異なります。
-
Linux/macOS (パッケージマネージャー):
bash
sudo systemctl stop redis-server # Linux
brew services stop redis # macOS
* Windows (MS Open Tech版):コマンドプロンプトまたはPowerShellで、Ctrl+Cを押してプロセスを停止します。または、
redis-cli shutdown
コマンドを実行します。(redis-cli
については後述します。)
4.3 Redisクライアントの起動
Redisサーバーとやり取りするには、Redisクライアントを使用します。Redisには、コマンドラインインターフェース (CLI) であるredis-cli
が付属しています。
redis-cli
を起動するには、コマンドプロンプトまたはPowerShellでredis-cli
と入力します。
bash
redis-cli
パスワードを設定している場合は、-a
オプションを使用してパスワードを指定します。
bash
redis-cli -a <パスワード>
redis-cli
が起動すると、Redisサーバーに対してコマンドを実行できます。
5. Redisのデータ型と基本操作
Redisは、Strings、Hashes、Lists、Sets、Sorted Setsといった多様なデータ型をサポートしています。ここでは、それぞれのデータ型とその基本的な操作について解説します。
5.1 Strings (文字列)
Stringsは、Redisで最も基本的なデータ型です。文字列、数値、バイナリデータなど、あらゆる種類のデータを格納できます。
SET key value
: 指定されたキーに文字列値を設定します。GET key
: 指定されたキーに関連付けられた文字列値を取得します。DEL key
: 指定されたキーとその値を削除します。INCR key
: 指定されたキーの値を1だけインクリメントします。値が整数でない場合、エラーが発生します。DECR key
: 指定されたキーの値を1だけデクリメントします。値が整数でない場合、エラーが発生します。INCRBY key increment
: 指定されたキーの値を指定された数だけインクリメントします。DECRBY key decrement
: 指定されたキーの値を指定された数だけデクリメントします。
例:
“`redis
SET mykey “Hello Redis”
OK
GET mykey
“Hello Redis”
DEL mykey
(integer) 1
GET mykey
(nil)
SET counter 10
OK
INCR counter
(integer) 11
GET counter
“11”
DECR counter
(integer) 10
GET counter
“10”
INCRBY counter 5
(integer) 15
GET counter
“15”
DECRBY counter 3
(integer) 12
GET counter
“12”
“`
5.2 Hashes (ハッシュ)
Hashesは、フィールドと値のペアのコレクションです。JavaScriptオブジェクトやPythonの辞書に似ています。
HSET key field value
: 指定されたキーのハッシュに、フィールドと値のペアを設定します。HGET key field
: 指定されたキーのハッシュから、指定されたフィールドの値を取得します。HGETALL key
: 指定されたキーのハッシュのすべてのフィールドと値を取得します。HDEL key field
: 指定されたキーのハッシュから、指定されたフィールドを削除します。HKEYS key
: 指定されたキーのハッシュのすべてのフィールド名を取得します。HVALS key
: 指定されたキーのハッシュのすべての値を取得します。HLEN key
: 指定されたキーのハッシュのフィールド数を取得します。
例:
“`redis
HSET user:1 name “John Doe”
(integer) 1
HSET user:1 age 30
(integer) 1
HGET user:1 name
“John Doe”
HGETALL user:1
1) “name”
2) “John Doe”
3) “age”
4) “30”
HDEL user:1 age
(integer) 1
HGETALL user:1
1) “name”
2) “John Doe”
HKEYS user:1
1) “name”
HVALS user:1
1) “John Doe”
HLEN user:1
(integer) 1
“`
5.3 Lists (リスト)
Listsは、文字列要素の順序付けられたコレクションです。LinkedListに似ています。
LPUSH key value [value ...]
: 指定されたキーのリストの先頭に、1つ以上の値を追加します。RPUSH key value [value ...]
: 指定されたキーのリストの末尾に、1つ以上の値を追加します。LPOP key
: 指定されたキーのリストの先頭から要素を削除し、その値を返します。RPOP key
: 指定されたキーのリストの末尾から要素を削除し、その値を返します。LRANGE key start stop
: 指定されたキーのリストから、指定された範囲の要素を取得します。start
とstop
はインデックスです。0
はリストの最初の要素、-1
はリストの最後の要素を表します。LLEN key
: 指定されたキーのリストの長さを取得します。
例:
“`redis
LPUSH mylist “world”
(integer) 1
LPUSH mylist “hello”
(integer) 2
LRANGE mylist 0 -1
1) “hello”
2) “world”
RPOP mylist
“world”
LRANGE mylist 0 -1
1) “hello”
LLEN mylist
(integer) 1
“`
5.4 Sets (セット)
Setsは、一意な文字列要素の順序付けられていないコレクションです。
SADD key member [member ...]
: 指定されたキーのセットに、1つ以上のメンバーを追加します。SMEMBERS key
: 指定されたキーのセットのすべてのメンバーを取得します。SREM key member [member ...]
: 指定されたキーのセットから、1つ以上のメンバーを削除します。SISMEMBER key member
: 指定されたキーのセットに、指定されたメンバーが存在するかどうかを確認します。存在する場合は1
、存在しない場合は0
を返します。SCARD key
: 指定されたキーのセットのカーディナリティ(メンバー数)を取得します。SINTER key [key ...]
: 複数のセットの積集合を返します。SUNION key [key ...]
: 複数のセットの和集合を返します。SDIFF key [key ...]
: 複数のセットの差集合を返します。
例:
“`redis
SADD myset “apple”
(integer) 1
SADD myset “banana”
(integer) 1
SADD myset “apple”
(integer) 0
SMEMBERS myset
1) “banana”
2) “apple”
SISMEMBER myset “apple”
(integer) 1
SISMEMBER myset “orange”
(integer) 0
SREM myset “apple”
(integer) 1
SMEMBERS myset
1) “banana”
SCARD myset
(integer) 1
“`
5.5 Sorted Sets (ソート済みセット)
Sorted Setsは、文字列要素とそれに関連付けられたスコアの順序付けられたコレクションです。要素はスコアに基づいてソートされます。
ZADD key score member [score member ...]
: 指定されたキーのソート済みセットに、1つ以上のメンバーとそのスコアを追加します。ZRANGE key start stop [WITHSCORES]
: 指定されたキーのソート済みセットから、指定された範囲の要素を取得します。start
とstop
はインデックスです。0
はソート済みセットの最初の要素、-1
はソート済みセットの最後の要素を表します。WITHSCORES
オプションを指定すると、要素と一緒にスコアも返されます。ZREM key member [member ...]
: 指定されたキーのソート済みセットから、1つ以上のメンバーを削除します。ZSCORE key member
: 指定されたキーのソート済みセットから、指定されたメンバーのスコアを取得します。ZCARD key
: 指定されたキーのソート済みセットのカーディナリティ(メンバー数)を取得します。ZINCRBY key increment member
: 指定されたキーのソート済みセットの、指定されたメンバーのスコアを指定された数だけインクリメントします。
例:
“`redis
ZADD leaderboard 100 “player1”
(integer) 1
ZADD leaderboard 200 “player2”
(integer) 1
ZADD leaderboard 150 “player3”
(integer) 1
ZRANGE leaderboard 0 -1 WITHSCORES
1) “player1”
2) “100”
3) “player3”
4) “150”
5) “player2”
6) “200”
ZREM leaderboard “player1”
(integer) 1
ZRANGE leaderboard 0 -1 WITHSCORES
1) “player3”
2) “150”
3) “player2”
4) “200”
ZSCORE leaderboard “player2”
“200”
ZCARD leaderboard
(integer) 2
ZINCRBY leaderboard 50 “player3”
“200”
ZRANGE leaderboard 0 -1 WITHSCORES
1) “player2”
2) “200”
3) “player3”
4) “200”
“`
6. Redisの高度な機能
Redisは、基本的なKey-Valueストア以上の機能も提供しています。ここでは、Pub/Sub、Transactions、Persistenceといった高度な機能について解説します。
6.1 Pub/Sub (パブリッシュ/サブスクライブ)
Pub/Subは、メッセージの送信者(パブリッシャー)と受信者(サブスクライバー)が直接的に通信するのではなく、チャネルと呼ばれる仲介者を介してメッセージをやり取りするメッセージングパターンです。
PUBLISH channel message
: 指定されたチャネルにメッセージをパブリッシュします。SUBSCRIBE channel [channel ...]
: 指定されたチャネルをサブスクライブします。UNSUBSCRIBE channel [channel ...]
: 指定されたチャネルのサブスクリプションを解除します。PSUBSCRIBE pattern [pattern ...]
: 指定されたパターンに一致するチャネルをサブスクライブします。PUNSUBSCRIBE pattern [pattern ...]
: 指定されたパターンに一致するチャネルのサブスクリプションを解除します。
例:
redis-cli
を2つ起動します。
クライアント1:
“`redis
SUBSCRIBE mychannel
Reading messages… (press Ctrl-C to quit)
1) “subscribe”
2) “mychannel”
3) (integer) 1
“`
クライアント2:
“`redis
PUBLISH mychannel “Hello from client 2”
(integer) 1
“`
クライアント1:
redis
1) "message"
2) "mychannel"
3) "Hello from client 2"
クライアント2がmychannel
にメッセージをパブリッシュすると、クライアント1がそのメッセージを受信します。
6.2 Transactions (トランザクション)
Redisは、複数のコマンドを1つのアトミックな操作として実行するトランザクションをサポートしています。
MULTI
: トランザクションを開始します。EXEC
: トランザクション内のすべてのコマンドを実行します。DISCARD
: トランザクションを破棄します。WATCH key [key ...]
: 指定されたキーを監視します。トランザクションの実行中に、監視されたキーが変更された場合、トランザクションは失敗します。
例:
“`redis
MULTI
OK
INCR counter
QUEUED
INCR counter
QUEUED
EXEC
1) (integer) 1
2) (integer) 2
“`
この例では、INCR counter
コマンドが2回キューに入れられ、EXEC
コマンドでまとめて実行されます。
6.3 Persistence (永続化)
Redisはインメモリデータストアですが、データをディスクに永続化する機能も提供しています。これにより、サーバーが再起動された場合でもデータを復元できます。Redisには、RDB (Redis Database) と AOF (Append Only File) という2つの永続化方法があります。
6.3.1 RDB (Redis Database)
RDBは、指定された間隔でRedisのメモリ内のデータをスナップショットとしてディスクに保存する方法です。redis.conf
ファイルで、スナップショットの頻度と条件を設定できます。
例:
redis
save 900 1 # 900秒以内に1回以上の書き込み操作があった場合にスナップショットを作成する
save 300 10 # 300秒以内に10回以上の書き込み操作があった場合にスナップショットを作成する
save 60 10000 # 60秒以内に10000回以上の書き込み操作があった場合にスナップショットを作成する
6.3.2 AOF (Append Only File)
AOFは、すべての書き込み操作をログファイルに記録する方法です。Redisサーバーは、ログファイルを再生することでデータを復元できます。AOFは、RDBよりもデータの安全性が高いですが、パフォーマンスは若干劣ります。
redis.conf
ファイルで、AOFを有効にできます。
例:
redis
appendonly yes
appendfsync everysec # 1秒ごとにディスクに書き込む
7. Redisの活用事例
Redisは、様々な用途で利用されています。ここでは、代表的な活用事例として、キャッシュとしての利用、セッションストアとしての利用、リアルタイム分析としての利用について解説します。
7.1 キャッシュとしての利用
Redisは、Webアプリケーションのキャッシュとして利用することで、データベースへの負荷を軽減し、レスポンス速度を向上させることができます。よくアクセスされるデータをRedisにキャッシュすることで、データベースへのアクセス頻度を減らし、高速なデータ取得を実現できます。
例えば、Webサイトの商品情報をRedisにキャッシュすることで、商品詳細ページへのアクセス速度を向上させることができます。
7.2 セッションストアとしての利用
ユーザーのセッション情報をRedisに保存することで、セッションの共有やスケールアウトが容易になります。従来のファイルベースやデータベースベースのセッションストアと比較して、Redisは高速なセッションデータの読み書きが可能であり、セッションの共有も容易です。
例えば、複数のWebサーバーで構成された環境で、Redisをセッションストアとして利用することで、ユーザーはどのWebサーバーにアクセスしても、同じセッション情報を利用できます。
7.3 リアルタイム分析としての利用
リアルタイムなアクセスログやイベントログをRedisに保存し、集計や分析を行うことで、リアルタイムなダッシュボードやアラートシステムを構築できます。Redisの高速なデータ処理能力を利用して、リアルタイムなデータ分析を行い、ビジネスの意思決定を支援することができます。
例えば、WebサイトのアクセスログをRedisに保存し、リアルタイムにアクセス数を集計することで、トラフィックの状況を把握し、サーバーの負荷分散やマーケティング戦略の改善に役立てることができます。
8. まとめ
本記事では、Redisの基本的な概念から、インストール、設定、基本的な操作、そして高度な機能までを解説しました。Redisは、その高速性と柔軟性から、様々な用途で利用できる強力なツールです。本記事で得た知識を基に、Redisを実際に利用して、その魅力を体験してみてください。最初は、キャッシュとしての利用から始めるのがおすすめです。
このガイドが、Redisの世界への入門として役立つことを願っています。より深くRedisを理解するために、公式ドキュメントやコミュニティフォーラムなどを参照することをお勧めします。
次のステップ:
- Redisの公式ドキュメントを読む: https://redis.io/documentation
- Redisコミュニティフォーラムに参加する: https://discuss.redis.io/
- Redis関連の書籍やオンラインコースを受講する。
- Redisを使った簡単なアプリケーションを開発してみる。
頑張ってください!