Redisは、メモリ上でデータを管理するミドルウェアです。データベースとしても使用できますが、特にデータベースへのアクセスを高速化するキャッシュとして活用されることが多いです。
ミドルウェア とは、業務ロジックに直接依存せず、データベース、キャッシュ、メッセージキューといった汎用的な機能を提供するソフトウェア層を指します。
データベースキャッシュ の考え方として、金融業界の「パレートの法則(80/20ルール)」がインターネット領域でも応用されます。すなわち、全体の20%のデータがリクエストの80%を占めるという特性を利用し、アクセス頻度の高い「ホットデータ」をメモリベースのRedisに格納し、残りの「コールドデータ」は従来のデータベースに保持します。リクエストが来たらまずRedisを確認し、存在しなければデータベースへフォールバックすることで、システム全体の応答性能を大幅に向上できます。
Redisの主な特徴
1. インメモリデータ構造
Redisはキーと値のペア(Key-Value)でデータを編成します。キーは常に文字列型ですが、値には文字列、ハッシュ、セットなど複数のデータ型が利用可能です。
MySQLのようなリレーショナルデータベースが「テーブル」形式でデータを管理するのに対し、Redisは「キーと値」の形式をとるため、非リレーショナルデータベース(NoSQL)に分類されます。
2. プログラマビリティ
Redisの操作は、シンプルな対話型コマンドで直接行えるほか、Luaスクリプトを用いて複数の操作を一括実行することも可能です。
3. 拡張性
標準機能に加えて、C, C++, Rustなどの言語で記述したカスタム拡張モジュールをRedisに組み込むことができます。これにより、要件に応じた独自の機能を追加できます。
4. 永続化
メモリ上のデータはサーバ再起動や電断で消失しますが、RedisはRDBスナップショットやAOF(Append Only File)といった永続化機能を備えています。データをディスクに書き出し、再起動時にメモリへリストアすることで、可用性を高められます。
5. クラスタリング
単一ノードでは扱えるデータ量に限界があるため、複数のRedisインスタンスをクラスタとして構成し、データを分散して格納できます。
6. 高可用性
マスター・レプリカ構成をサポートし、レプリカノードが自動的にデータを複製します。マスターに障害が発生した場合、レプリカが即座に引き継ぐことでサービスの継続が可能です。
7. 高速性
Redisが高速な理由はいくつかあります。
- メモリ上で動作するため、ディスクI/Oが必要なデータベースより遥かに高速
- シンプルかつ最適化されたデータ操作を提供
- I/O多重化(I/O Multiplexing)により、単一スレッドで複数のソケットを効率的に管理
- シングルスレッドモデルを採用し、スレッド間の競合やコンテキストスイッチのオーバーヘッドを排除
Ubuntu環境へのインストール手順
- まずroot権限を取得します。
- パッケージリストを更新します。
apt update
- 利用可能なRedis関連パッケージを検索します。
apt search redis
- Redisサーバーをインストールします。
apt install redis-server
- インストール後、Redisクライアントで接続テストを行います。
redis-cli
ping
応答がPONGと返ってくれば、インストールは正常に行われています。
初期状態ではローカルホストからのみアクセス可能です。リモート接続を許可するには、設定ファイルを編集します。
vim /etc/redis/redis.conf
具体的には、以下の行を検索し、適宜コメントアウトや変更を行います。
bind 127.0.0.1→bind 0.0.0.0または特定のIPアドレスに変更protected-mode yes→ 必要に応じてprotected-mode norequirepassを設定してパスワードを付与
最後にRedisサーバーを再起動して設定を反映させます。
service redis-server restart
ステータスを確認するには次のコマンドを使用します。
service redis-server status
正常に起動していれば、active (running)と表示されます。