Redis ダウンロード方法とインストール手順


Redis ダウンロードから実践まで:詳細なインストール手順と基本設定ガイド

はじめに

現代のアプリケーション開発において、高速なデータアクセスは不可欠です。リレーショナルデータベースだけではカバーしきれない、セッション管理、キャッシュ、メッセージキュー、リアルタイム分析といった多様なニーズに応えるために、多くの企業や開発者が「Key-Value Store(KVS)」や「NoSQLデータベース」を活用しています。その中でも特に人気が高く、多くのシステムで利用されているのが Redis です。

Redisは、その高いパフォーマンス、豊富なデータ構造のサポート、永続化オプション、そして使いやすさから、多くの開発者に愛されています。インメモリデータ構造ストアとして機能し、データの読み書きを非常に高速に行えるため、アプリケーションの応答性を劇的に向上させることが可能です。

しかし、Redisを利用するためには、まずお使いの環境にRedisサーバーをインストールする必要があります。インストールプロセスは、オペレーティングシステムや目的、利用したい機能によっていくつかの方法があり、それぞれ手順が異なります。特に初めてRedisをインストールする方や、特定の環境に合わせた詳細な手順を知りたい方にとっては、網羅的で分かりやすいガイドが必要です。

この記事では、Redisのダウンロードからインストール、そして基本的な設定と起動までのプロセスを、初心者の方でも理解できるように詳細かつ丁寧に解説します。約5000語というボリュームを活かし、単なるコマンドの羅列に終わらず、それぞれのステップの意味や、考えられるエラー、その対処法についても触れていきます。

具体的には、以下の内容を網羅します。

  • Redisとは何か、その魅力とユースケース
  • インストールに必要なシステム要件と推奨環境
  • Redisの様々なダウンロード方法(公式ソースコード、パッケージマネージャー、Docker、WSL)
  • 各方法による詳細なインストール手順(特にソースコードからのビルドは詳しく解説)
  • Redisの基本的な設定ファイル(redis.conf)の解説と編集方法
  • Redisサーバーの起動方法(フォアグラウンド、バックグラウンド、systemd/init.d)
  • インストール後の確認と基本的なコマンド操作
  • 簡単なトラブルシューティングのヒント

この記事を最後までお読みいただければ、ご自身の環境にRedisを正常にインストールし、基本的な設定を行って起動できるようになるはずです。ぜひ、お手元にPCをご用意いただき、手順に従ってRedisの世界に第一歩を踏み出してみてください。

さあ、高速なデータ処理を可能にするRedisの世界へ飛び込みましょう!

第1章: Redisの理解 – なぜRedisを使うのか?

インストール手順に入る前に、そもそもRedisがどのようなもので、なぜ多くのシステムで利用されているのかを理解しておきましょう。これにより、Redisをインストールする意義や、後の設定項目の意味がより深く理解できるようになります。

1.1 Redisの主要な特徴

Redis (Remote Dictionary Server) は、BSDライセンスで提供されるオープンソースのインメモリデータ構造ストアです。単なるKey-Valueストアとしてだけでなく、以下のような豊富な特徴を持っています。

  • インメモリ: Redisのデータは基本的にメインメモリに保存されます。これにより、ストレージ(SSDやHDD)へのアクセスと比較して桁違いに高速なデータ読み書きが可能になります。応答速度が重視されるアプリケーション(例:Webサイトのキャッシュ、セッションストア)に最適です。
  • 多様なデータ構造: Redisは単なる文字列(String)だけでなく、以下のような高度なデータ構造をネイティブにサポートしています。
    • リスト (Lists): 要素を挿入された順序で保持するシーケンス。キューやスタックとして利用できます。
    • セット (Sets): 重複しない文字列のコレクション。メンバーシップテストや集合演算(和集合、差集合など)に使えます。
    • ソート済みセット (Sorted Sets): 各メンバーにスコアを持たせることができるセット。スコア順に並べ替えたり、範囲検索したりできます。リーダーボードの実装などに利用されます。
    • ハッシュ (Hashes): フィールドと値のマッピングを含むマップ。オブジェクトの表現に適しています。
    • ビットマップ (Bitmaps): 文字列型をビットの配列として扱い、ビット単位の操作を行います。ユーザーのオンライン状況管理などに利用できます。
    • ハイパーログログ (HyperLogLogs): 要素を重複なく数えるための確率的データ構造。メモリ使用量を抑えつつ、集合のカーディナリティ(要素数)を推定できます。
    • ストリーム (Streams): ログ、イベント、メッセージのシーケンスを扱うためのデータ構造。メッセージキューとして利用できます。
  • 永続化オプション: インメモリであるにも関わらず、Redisはデータをディスクに永続化するメカニズムを提供します。
    • RDB (Redis Database): 特定の時点のデータセットのスナップショットをバイナリファイルとして保存します。バックアップや災害復旧に適しています。
    • AOF (Append Only File): サーバーが受信した書き込みコマンドをログとして記録します。サーバー起動時にこのログを再生することで、データの状態を復元します。RDBよりも最新のデータ損失リスクが少ないですが、ファイルサイズが大きくなる傾向があります。両方を併用することも可能です。
  • アトミック操作: Redisの全ての操作はアトミック(不可分)です。これは、複数のクライアントが同時に同じデータにアクセスしても、データの一貫性が保たれることを意味します。競合状態を防ぎ、並行処理を容易にします。
  • レプリケーション (Replication): マスター/スレーブ構成をサポートし、データの冗長性や読み込みのスケーラビリティを提供します。マスターのデータを複数のスレーブに非同期で複製できます。
  • Sentinel: Redis Sentinelは、Redisの高可用性 (High Availability) システムです。マスターサーバーに障害が発生した場合、自動的にスレーブサーバーを新しいマスターに昇格させます。
  • クラスター (Cluster): データを複数のRedisノードに分散させるシャーディングメカニズムを提供します。大規模なデータセットや高いスループット要件に対応できます。
  • Pub/Sub (Publish/Subscribe): メッセージングパターンをサポートし、クライアント間でメッセージをリアルタイムにやり取りできます。チャットアプリケーションや通知システムに利用されます。
  • Luaスクリプティング: サーバーサイドでLuaスクリプトを実行できます。複数のコマンドをアトミックに実行したり、複雑なロジックをサーバー側で処理したりすることが可能です。

これらの特徴により、Redisは多様なアプリケーションの要求に応えることができます。

1.2 Redisの代表的なユースケース

Redisは、その高速性と柔軟性から、様々な用途で利用されています。

  • キャッシュ (Caching): データベースの読み込み負荷を軽減するために、頻繁にアクセスされるデータをRedisにキャッシュします。アプリケーションの応答速度が大幅に向上します。最も一般的なユースケースの一つです。
  • セッションストア (Session Store): Webアプリケーションのユーザーセッション情報をRedisに保存します。セッション情報を複数のWebサーバー間で共有できるため、ロードバランシングされた環境でステートレスなアプリケーションを構築しやすくなります。
  • メッセージキュー (Message Queue): Pub/Subやリスト、ストリームなどのデータ構造を利用して、アプリケーションコンポーネント間の非同期通信を実現します。タスクキューやイベント処理に利用されます。
  • リアルタイム分析 (Real-time Analytics): 新着データに対して高速な集計や分析を行います。例えば、Webサイトのリアルタイムアクティブユーザー数やアクセス数のカウントなどに利用できます。
  • レートリミッター (Rate Limiter): APIアクセスなどに制限をかけるために、特定の期間内のリクエスト数をカウント・管理します。
  • リーダーボード/ランキングシステム (Leaderboards/Ranking Systems): ソート済みセットを利用して、ユーザーのスコアに基づいたランキングをリアルタイムに生成・更新します。
  • データ構造ストア (Data Structure Store): Redisの豊富なデータ構造を直接利用して、複雑なデータのモデリングや操作を効率的に行います。

このように、Redisはアプリケーションのパフォーマンス向上や機能実装において非常に強力なツールとなります。これらのメリットを享受するためには、適切にRedisをインストールし、設定する必要があります。

第2章: インストール前の準備 – どの方法を選ぶか?

Redisのインストールに取りかかる前に、いくつかの準備が必要です。最も重要なのは、「どの方法でインストールするか」を決めることです。Redisのインストール方法にはいくつかの選択肢があり、それぞれにメリットとデメリットがあります。

2.1 システム要件

Redisをインストールする前に、お使いのシステムが以下の要件を満たしているか確認しましょう。

  • オペレーティングシステム: Redisは、主にLinux(Ubuntu, Debian, CentOS, RHEL, Fedoraなど)、macOS、FreeBSDなどのPOSIX準拠のシステムで公式にサポートされています。WindowsでもWSL(Windows Subsystem for Linux)を使えば簡単に利用できます。ネイティブWindows版も非公式ながら存在しますが、本番環境での利用は推奨されません。この記事では、Linux/macOS/WSLを対象とします。
  • ハードウェア:
    • メモリ: Redisはインメモリデータベースであるため、保存したいデータ量に見合った、あるいはそれ以上のメモリが必要です。OSや他のアプリケーションが使用するメモリも考慮に入れる必要があります。数GBから数十GB、時には数百GBのメモリを必要とする場合があります。設定ファイルでmaxmemoryを設定することで、メモリの使用量を制限できます。
    • CPU: Redis自体はシングルスレッドで動作する部分が多いですが(I/O多重化は別)、ビルドプロセスや一部のバックグラウンド処理(RDB/AOF書き込みなど)ではCPUを利用します。一般的には、それほど強力なCPUは必要ありませんが、高負荷な環境では複数のCPUコアが利用されるため、適切なCPUを選択することが望ましいです。
    • ディスク容量: データ永続化(RDBやAOF)を有効にする場合、データのコピーやコマンドログを保存するためのディスク容量が必要です。また、スワップ領域も適切に設定しておくことが推奨されます。
    • ネットワーク: Redisはクライアント-サーバーモデルで動作するため、ネットワーク接続が必要です。デフォルトのポートは6379/TCPです。
  • 必要なソフトウェア/依存関係:
    • ソースコードからビルドする場合、コンパイラ(GCCやClang)、makeユーティリティが必要です。Linuxシステムでは通常これらはインストールされていますが、ない場合はインストールが必要です。
    • make testを実行する場合、Tclインタプリタが必要です。
    • パッケージマネージャーを使う場合、特に依存関係を意識する必要は少ないですが、OSやリポジトリのセットアップは必要です。

これらの要件を満たしているか確認し、必要に応じてシステムを準備してください。特にメモリはRedisのパフォーマンスに直結するため、十分な容量を確保することが重要です。

2.2 どのインストール方法を選択するか

Redisのインストールには、主に以下の方法があります。それぞれの特徴を理解し、自身の目的や環境に最適な方法を選びましょう。

  1. ソースコードからのビルド:

    • メリット:
      • 常に最新のバージョンを入手できます。
      • 特定の環境や要件に合わせてコンパイルオプションをカスタマイズできます。
      • 内部の仕組みを理解するのに役立ちます。
    • デメリット:
      • ビルド環境の準備や、依存関係の解決が必要になる場合があります。
      • インストール後の管理(サービス化、設定ファイルの場所など)を手動で行う必要があります。
      • 手順が他の方法に比べてやや複雑です。
    • 向いているケース: 最新機能を利用したい、特定の最適化を行いたい、開発環境で内部を調査したい場合。
  2. パッケージマネージャーを使ったインストール:

    • メリット:
      • 最も簡単で手軽な方法です。
      • 依存関係の解決、サービスの自動起動設定などがパッケージマネージャーによって自動的に行われます。
      • アップグレードやアンインストールも容易です。
    • デメリット:
      • 利用できるRedisのバージョンが、OSのリポジトリに含まれるバージョンに限定される場合があります(最新版ではない可能性がある)。
      • コンパイルオプションをカスタマイズすることはできません。
    • 向いているケース: ほとんどのユーザーにとって最も推奨される方法です。開発環境、検証環境、またはバージョンにこだわりがない本番環境。
  3. Windows Subsystem for Linux (WSL) を使う:

    • メリット:
      • Windows上でLinux環境とRedisを簡単に利用できます。
      • Windowsネイティブ版よりも安定しており、公式の挙動に近いです。
      • Linuxのパッケージマネージャーを利用できます。
    • デメリット:
      • WSL自体のセットアップが必要です。
      • ネイティブLinux環境ほどのパフォーマンスは期待できない場合があります。
    • 向いているケース: WindowsユーザーがRedisを開発環境として利用したい場合。
  4. Dockerを使う:

    • メリット:
      • ホストOSに影響を与えずにRedis環境を構築できます。
      • バージョンの管理や複数バージョンの共存が容易です。
      • 設定やデータの永続化をコンテナの仕組みで管理できます。
      • 開発環境の再現性が高いです。
    • デメリット:
      • Docker自体のセットアップが必要です。
      • コンテナの概念を理解する必要があります。
      • ホストOSから直接Redisのファイルシステムにアクセスするのに一手間かかる場合があります。
    • 向いているケース: 開発環境、CI/CD環境、マイクロサービスアーキテクチャの一部として利用する場合。

この記事では、これら主要な4つの方法について、それぞれ具体的な手順を解説します。ご自身の環境や目的に合わせて、最適な方法を選んでください。

第3章: Redisのダウンロード

インストール方法を決めたら、まずはRedisの実行ファイルやソースコードを入手する必要があります。ここでは、選択した方法に応じたダウンロード手順を解説します。

3.1 方法1: 公式ウェブサイトからのソースコードダウンロード

最新版のRedisや、特定のバージョンが必要な場合は、公式ウェブサイトからソースコードをダウンロードしてビルドするのが確実です。

  1. Redis公式サイトにアクセス:
    ウェブブラウザを開き、以下のRedis公式サイトのダウンロードページにアクセスします。
    https://redis.io/download

  2. 最新安定版の確認:
    ダウンロードページには、現在利用可能な最新安定版のバージョン番号と、そのソースコードへのリンクが表示されています。例えば、「Latest stable version: X.Y.Z」のように表示されています。

  3. ソースコードのダウンロード:
    ソースコードは通常、.tar.gz形式で提供されています。ダウンロード方法としては、以下の2つがあります。

    • ブラウザからダウンロード:
      ダウンロードページにある「Download redis-X.Y.Z.tar.gz」といったリンクをクリックすると、ブラウザ経由でファイルをダウンロードできます。

    • コマンドラインからダウンロード (wgetまたはcurl):
      サーバー上で直接ダウンロードする場合などに便利です。ターミナルを開き、以下のコマンドを実行します(バージョン番号 X.Y.Z は、公式サイトで確認した最新版に置き換えてください)。

      wget https://download.redis.io/releases/redis-X.Y.Z.tar.gz

      または

      curl -O https://download.redis.io/releases/redis-X.Y.Z.tar.gz

      これらのコマンドは、指定したURLからファイルをダウンロードし、現在のディレクトリに保存します。

  4. ダウンロードしたファイルの検証 (任意):
    ダウンロードしたファイルが破損していないか、または改ざんされていないかを確認するために、ハッシュ値を検証することができます。公式サイトのダウンロードページには、各バージョンのソースコードに対するSHA256ハッシュ値が記載されています。

    ダウンロードしたファイルのSHA256ハッシュ値を計算するコマンドはOSによって異なります。

    • Linux: sha256sum redis-X.Y.Z.tar.gz
    • macOS: shasum -a 256 redis-X.Y.Z.tar.gz

    コマンドの出力として表示されたハッシュ値が、公式サイトに記載されている値と一致するか確認してください。

これでソースコードのダウンロードは完了です。次の章でこのソースコードをビルドしてインストールする手順に進みます。

3.2 方法2: パッケージマネージャーを使ったダウンロード(インストールも兼ねる)

多くのLinuxディストリビューションやmacOSには、パッケージマネージャーと呼ばれるソフトウェア管理システムがあります。これを使うと、コマンド一つでRedisをダウンロードしてインストールまで自動で行ってくれるため、非常に簡単です。ここでは主要なパッケージマネージャーを使った方法を解説します。

注意点: パッケージマネージャーでインストールされるRedisのバージョンは、そのOSやリポジトリによって異なります。最新版ではない場合があることに注意してください。

3.2.1 Debian / Ubuntu (apt)

DebianやUbuntu Linuxでは、aptパッケージマネージャーを使用します。

  1. パッケージリストの更新:
    まず、パッケージリストを最新の状態に更新します。
    sudo apt update

  2. Redisサーバーのインストール:
    以下のコマンドでRedisサーバーをインストールします。通常、redis-serverというパッケージ名です。
    sudo apt install redis-server

    このコマンドを実行すると、Redisサーバー本体とその依存関係がダウンロードされ、自動的にシステムにインストールされます。インストール完了後、Redisサーバーはサービスとして自動的に起動するように設定されることが多いです。

  3. 利用可能なバージョンの確認 (任意):
    インストールされるバージョンを確認したい場合は、インストール前に以下のコマンドで確認できます。
    apt policy redis-server

3.2.2 CentOS / RHEL / Fedora (yum または dnf)

CentOS、RHEL、FedoraなどのRPMベースのLinuxディストリビューションでは、yum(CentOS/RHEL 7以前)またはdnf(CentOS/RHEL 8以降、Fedora)パッケージマネージャーを使用します。

  1. EPELリポジトリの追加 (CentOS/RHELの場合、任意):
    CentOSやRHELのデフォルトリポジトリには、最新または特定のバージョンのRedisが含まれていない場合があります。その場合、EPEL (Extra Packages for Enterprise Linux) リポジトリを追加することで、より新しいバージョンのパッケージを利用できることがあります。

    • CentOS/RHEL 7: sudo yum install epel-release
    • CentOS/RHEL 8: sudo dnf install epel-release
    • Fedora: 通常不要ですが、念のため確認してください。
  2. Redisのインストール:
    EPELを追加したら、以下のコマンドでRedisをインストールします。パッケージ名は通常redisです。

    • CentOS/RHEL 7: sudo yum install redis
    • CentOS/RHEL 8 / Fedora: sudo dnf install redis

    このコマンドにより、Redis本体と依存関係がダウンロード・インストールされます。インストール完了後、サービスが有効化・起動されることが多いです。

  3. 利用可能なバージョンの確認 (任意):
    インストールされるバージョンを確認したい場合は、インストール前に以下のコマンドで確認できます。

    • yum info redis または dnf info redis

3.2.3 macOS (Homebrew)

macOSユーザーには、Homebrewというパッケージマネージャーを使うのが最も簡単です。

  1. Homebrewのインストール (まだインストールしていない場合):
    Homebrewがインストールされていない場合は、公式ウェブサイトの指示に従ってインストールします。ターミナルで以下のコマンドを実行するのが一般的です。
    /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
    インストールには少し時間がかかります。画面の指示に従ってください。

  2. Redisのインストール:
    Homebrewがインストールされたら、以下のコマンドでRedisをインストールします。
    brew install redis

    Homebrewは、Redisのダウンロード、コンパイル、インストールを自動で行います。完了後、Redisサーバーの起動方法などがメッセージで表示されます。

3.2.4 その他のOS

  • Alpine Linux (apk): sudo apk add redis
  • FreeBSD (pkg): sudo pkg install redis
  • Windows (非推奨): Microsoftが提供していたネイティブビルドは開発が停止しています。ChocolateyやScoopといったパッケージマネージャーでも利用可能ですが、公式サポート外のため本番環境での利用は推奨されません。WSLを利用する方が安全です。

パッケージマネージャーを使ったインストールは、基本的にコマンド一つで完了し、非常に便利です。インストール後の設定やサービス起動については、第5章で詳しく解説します。

3.3 方法3: Windows Subsystem for Linux (WSL) を使う

Windows 10以降であれば、WSLを利用してWindows上でLinux環境を構築し、その中でRedisをインストール・実行するのが最も公式に近い方法です。

  1. WSLのインストール:
    まだWSLをインストールしていない場合は、まずWSLをセットアップします。管理者権限でPowerShellまたはコマンドプロンプトを開き、以下のコマンドを実行します。
    wsl --install
    このコマンドは、デフォルトのLinuxディストリビューション(通常はUbuntu)をインストールします。インストール後、再起動が求められる場合があります。完了すると、Linuxのユーザー名とパスワードを設定するよう求められます。

    • WSLのインストールに関する詳細は、Microsoftの公式ドキュメントを参照してください。
  2. WSL環境へのアクセス:
    インストールしたLinuxディストリビューション(例: Ubuntu)を起動します。スタートメニューから起動するか、PowerShell/コマンドプロンプトで wsl と入力してEnterを押すと、WSL環境のシェルに入れます。

  3. WSL環境内でのRedisインストール:
    WSL環境に入ったら、あとは標準的なLinux環境として扱えます。上記「方法2: パッケージマネージャーを使ったダウンロード」の該当するLinuxディストリビューションの手順(例: Ubuntuならaptを使う手順)に従ってRedisをインストールします。

    例 (Ubuntu on WSL):
    sudo apt update
    sudo apt install redis-server

これでWSL環境内にRedisサーバーがインストールされます。インストール後の設定や起動は、標準的なLinux手順で行います。

3.4 方法4: Dockerを使う

Dockerを利用すると、ホストOSにRedisを直接インストールせず、コンテナとしてRedisを実行できます。これにより、環境を汚染せず、簡単にRedis環境を構築・破棄できます。

  1. Dockerのインストール:
    Dockerがインストールされていない場合は、まずDocker Desktop(Windows/macOS)またはDocker Engine(Linux)をインストールします。公式ウェブサイト https://www.docker.com/get-started/ からお使いのOS用のインストーラーをダウンロード・実行してください。

  2. Redisイメージのプル:
    Dockerがインストールされ、実行できるようになったら、Redisの公式イメージをDocker Hubからダウンロード(プル)します。ターミナルまたはコマンドプロンプトを開き、以下のコマンドを実行します。
    docker pull redis
    これにより、最新版のRedisイメージがダウンロードされます。特定のバージョンをプルしたい場合は、docker pull redis:バージョン番号のように指定します(例: docker pull redis:6.2)。

ダウンロードしたRedisイメージを使ってコンテナを実行する手順は、インストールというよりは実行環境の構築にあたるため、第4章の「Dockerを使った実行」で詳しく解説します。

ここまでで、Redisのソースコードを入手するか、パッケージマネージャーやDockerを使ってRedisをダウンロード・インストールするための準備が整いました。次の章では、ダウンロードしたファイルを使って実際にRedisをインストール・実行する手順を詳しく見ていきます。

第4章: Redisのインストールとビルド

この章では、ダウンロードしたRedisを実行可能な状態にするための具体的な手順を解説します。ソースコードからのビルドが最も詳細な手順を必要とするため、重点的に説明します。パッケージマネージャーを使った方法は、ダウンロードとインストールが一体化しているため、補足的な説明となります。

4.1 方法1: ソースコードからのビルドとインストール

ソースコードからRedisをインストールする場合、以下のステップが必要です。この方法は、最新機能を試したい、特定の最適化を施したい、あるいはRedisの内部構造を学びたい場合に適しています。

  1. ダウンロードしたソースコードの展開:
    第3章でダウンロードした .tar.gz ファイルを、インストールを行いたいディレクトリに展開します。ターミナルを開き、ダウンロードしたファイルがあるディレクトリに移動して、以下のコマンドを実行します(バージョン番号は適宜置き換えてください)。

    tar xvzf redis-X.Y.Z.tar.gz

    このコマンドにより、redis-X.Y.Z という名前の新しいディレクトリが作成され、その中にソースコードファイルが展開されます。

  2. 展開したディレクトリへの移動:
    展開によって作成されたソースコードディレクトリに移動します。

    cd redis-X.Y.Z

    以降のコマンドは、このディレクトリ内で実行します。

  3. 依存関係の確認とインストール:
    Redisをビルドするには、Cコンパイラ(GCCまたはClang)とmakeユーティリティが必要です。また、オプションでmake testを実行するにはTclインタプリタが必要です。多くのLinuxシステムにはデフォルトでこれらがインストールされていますが、ない場合はインストールが必要です。

    • Debian / Ubuntu:
      sudo apt update
      sudo apt install build-essential tcl
      (build-essential パッケージには、GCCやmakeなどが含まれています。tcl はテスト用です。)

    • CentOS / RHEL / Fedora:
      sudo yum groupinstall "Development Tools" (または sudo dnf groupinstall "Development Tools")
      sudo yum install tcl (または sudo dnf install tcl)
      (Development Tools グループには、GCCやmakeなどが含まれています。)

    • macOS (Homebrew):
      Homebrewをインストールしていれば、通常は依存関係も自動的に解決されます。GCCやmakeはXcode Command Line Toolsに含まれているため、Homebrewインストール時にインストールされるか、必要に応じてインストールを促されます。TclもHomebrewでインストールできます。
      brew install tcl

  4. ビルド (make):
    依存関係が揃ったら、いよいよソースコードをビルドします。展開したRedisソースコードディレクトリ内で、以下のコマンドを実行します。

    make

    このコマンドは、Makefileを読み込み、Cコンパイラを使ってソースコードをコンパイルし、Redisの実行ファイルを生成します。処理が開始されると、コンパイルの進行状況や生成されるファイルに関するメッセージがターミナルに表示されます。

    “`bash

    makeコマンド実行例(出力の一部)

    cd src && make all
    make[1]: Entering directory ‘/path/to/redis-X.Y.Z/src’
    CC Makefile.dep
    CC adlist.o
    CC ae.o
    CC anet.o
    … (コンパイル処理が続く) …
    LINK redis-server
    LINK redis-cli
    LINK redis-benchmark
    LINK redis-check-aof
    LINK redis-check-rdb

    make[1]: Leaving directory ‘/path/to/redis-X.Y.Z/src’
    “`

    ビルドが成功すると、src ディレクトリ内に redis-server, redis-cli, redis-benchmark, redis-check-aof, redis-check-rdb といった実行ファイルが生成されます。

    考えられるビルドエラーとその対処法:
    * コンパイラやmakeが見つからない: 「command not found」のようなエラーが出た場合、ステップ3に戻り、必要な依存関係が正しくインストールされているか確認してください。環境変数PATHが正しく設定されているかも確認します。
    * コンパイルエラー: 特定のヘッダーファイルが見つからない、関数が定義されていないなどのエラーが出た場合、必要なライブラリや開発パッケージが不足している可能性があります。エラーメッセージをよく読み、不足しているパッケージを特定してインストールしてください。例えば、jemalloc関連のエラーが出た場合は、libjemalloc-dev(Debian/Ubuntu)やjemalloc-devel(CentOS/RHEL/Fedora)などのパッケージが必要になる場合があります。

  5. テスト (make test – 任意だが推奨):
    ビルドが成功したら、正しく動作するか確認するためにテストを実行することが強く推奨されます。Redisソースコードディレクトリ内で、以下のコマンドを実行します。make testにはTclインタプリタが必要です。

    make test

    このコマンドは、Redisのテストスイートを実行します。数分から数十分かかる場合があります。多くのテストケースが実行され、結果が表示されます。

    “`bash

    make testコマンド実行例(出力の一部)

    You need tcl 8.5 or 8.6 in order to run the Redis test suite.
    make[1]: Entering directory ‘/path/to/redis-X.Y.Z/src’

    \o/ All tests passed without errors!
    \o/
    “`

    すべてのテストがパスすれば問題ありません。「All tests passed without errors!」というメッセージが表示されるはずです。

    テストが失敗した場合:
    テストが失敗した場合は、環境に何らかの問題がある可能性があります。
    * Tclインタプリタが正しくインストールされているか確認します。
    * システムのメモリが不足していると、テストが失敗することがあります。十分なメモリがあるか確認してください。
    * 過去のバージョンで発生した既知の問題が原因かもしれません。エラーメッセージを検索して、関連情報を探してみてください。

  6. インストール (make install):
    ビルドとテストが成功したら、システム全体でRedisコマンドを実行できるように、実行ファイルを適切なディレクトリにインストールします。Redisソースコードディレクトリ内で、以下のコマンドを実行します。

    sudo make install

    sudo を使うのは、通常、システムディレクトリ(例: /usr/local/bin)への書き込みに管理者権限が必要だからです。このコマンドは、srcディレクトリで生成された以下の実行ファイルをデフォルトのインストール先にコピーします。

    • redis-server: Redisサーバー本体
    • redis-cli: Redisコマンドラインインターフェイス(クライアント)
    • redis-benchmark: Redisのパフォーマンスベンチマークツール
    • redis-check-aof: AOFファイルの整合性チェック・修復ツール
    • redis-check-rdb: RDBファイルの整合性チェックツール

    デフォルトのインストール先は /usr/local/bin です。このディレクトリは通常、システムのPATH環境変数に含まれているため、どこからでもredis-serverredis-cliといったコマンドを実行できるようになります。

    インストール先の変更 (PREFIXオプション):
    デフォルト以外の場所にインストールしたい場合は、make install実行時にPREFIXオプションを指定します。
    sudo make install PREFIX=/opt/redis
    この場合、実行ファイルは /opt/redis/bin ディレクトリにインストールされます。必要に応じて、このディレクトリをシステムのPATHに追加する必要があります。

  7. インストール後のファイル構成:
    make installを実行した場合、/usr/local/bin(または指定したPREFIX配下のbin)に実行ファイルがコピーされます。
    設定ファイル (redis.conf) やサービス管理のためのスクリプトは、make installでは自動的にインストールされません。これらは手動で適切な場所に配置する必要があります。

    • デフォルトの設定ファイルは、ソースコードディレクトリのルートにある redis.conf です。
    • サービス管理スクリプトの例は、ソースコードディレクトリの utils ディレクトリにあります(例: utils/redis_init_script)。

    これらの設定ファイルやスクリプトの配置、およびサービスとしての起動設定については、第5章で詳しく解説します。

ソースコードからのインストールは、これらのステップを経るため時間はかかりますが、最も柔軟性の高い方法です。

4.2 方法2: パッケージマネージャーからのインストール (続き)

第3章でパッケージマネージャーを使ったインストールコマンドを実行した場合、Redisはすでにダウンロードされ、システムにインストールされています。この方法の利点は、インストール後の設定がパッケージマネージャーによってある程度自動で行われることです。

インストールコマンド(sudo apt install redis-server, sudo yum install redis, brew install redisなど)が正常に完了していれば、Redisの実行ファイルはシステムの適切なディレクトリ(例: /usr/bin, /usr/sbin, /usr/local/binなど)に配置され、環境変数PATHを通じてコマンドが利用可能になっています。

  • インストールされたファイルの場所:
    パッケージマネージャーによってインストールされたファイルの場所は、OSやパッケージによって異なります。

    • 実行ファイル: /usr/bin/redis-server, /usr/bin/redis-cli など。
    • 設定ファイル: /etc/redis/redis.conf が一般的です。Homebrewの場合は /usr/local/etc/redis.conf などになることもあります。
    • データディレクトリ: デフォルトでは /var/lib/redis などに設定されていることが多いです。
    • ログファイル: デフォルトでは /var/log/redis/redis-server.log などに設定されていることが多いです。
      正確な場所は、パッケージのドキュメントを確認するか、以下のコマンドなどで調べることができます。
    • Debian/Ubuntu: dpkg -L redis-server
    • CentOS/RHEL/Fedora: rpm -ql redis
  • サービスの設定:
    多くのパッケージマネージャーは、インストール時にRedisサーバーをシステムサービスとして登録し、自動起動を有効化します。systemdを採用しているシステムでは、redis または redis-server という名前のサービスとして登録されます。これを確認し、管理する方法については第5章で詳しく解説します。

パッケージマネージャーを使ったインストールは、ソースコードからのビルドに比べて手軽ですが、インストール先のカスタマイズや、利用できるバージョンの選択肢が制限されることがあります。

4.3 方法3: WSLを使ったインストール (続き)

WSL環境内でパッケージマネージャーを使ってRedisをインストールした場合も、「方法2: パッケージマネージャーからのインストール」の手順と同様です。WSL環境が提供するLinuxディストリビューションの標準的なパッケージ管理システム(aptdnfなど)によって、Redisがインストールされます。

インストールされたファイルの場所や、サービス管理の方法は、WSL環境内で動作しているLinuxディストリビューションの慣習に従います。例えば、WSL上のUbuntuであれば、設定ファイルは/etc/redis/redis.conf、サービス管理はsystemctlコマンドで行うのが一般的です。

WSLを使う場合、Windowsのホスト環境からRedisに接続するには、WSLインスタンスのIPアドレスやポートフォワード設定が必要になる場合があります。ただし、単にWSL内で開発やテストを行うだけであれば、特に意識する必要はありません。

4.4 方法4: Dockerを使った実行 (インストールとは少し異なる)

Dockerを使った場合は、ホストOSにRedisを「インストール」するのではなく、Redisを実行するための「コンテナ」を作成して起動します。これは、Redisの実行環境を分離し、管理を容易にするための方法です。

第3章でRedisイメージをプルしたら、以下のコマンドでRedisコンテナを実行します。

docker run --name my-redis -d -p 6379:6379 redis

このコマンドの各オプションの意味は以下の通りです。

  • docker run: 新しいコンテナを作成して実行するコマンド。
  • --name my-redis: コンテナに my-redis という名前を付けます。分かりやすい名前を指定することで、後でコンテナを管理しやすくなります。
  • -d: コンテナをデタッチドモード(バックグラウンド)で実行します。このオプションがないと、Redisサーバーのログが現在のターミナルに表示され続け、ターミナルを閉じるとコンテナも停止してしまいます。
  • -p 6379:6379: ホストOSのポート6379を、コンテナのポート6379にマッピングします。これにより、ホストOSから localhost:6379 でコンテナ内のRedisにアクセスできるようになります。必要に応じて、ホスト側のポート番号は変更できます(例: -p 6380:6379 でホストの6380ポートにマッピング)。
  • redis: どのDockerイメージを使ってコンテナを作成するかを指定します。ここでは、プルした redis イメージ(デフォルトで最新版)を指定しています。特定のバージョンを使いたい場合は redis:バージョン番号 を指定します。

このコマンドを実行すると、Redisコンテナがバックグラウンドで起動します。コンテナIDが表示されれば成功です。

コンテナの起動確認:
docker ps コマンドを実行すると、現在実行中のコンテナ一覧が表示されます。my-redis という名前のコンテナが表示され、ステータスが Up になっていれば正常に起動しています。

データの永続化:
上記のコマンドだけでは、コンテナを停止・削除するとコンテナ内のデータも失われてしまいます。データを永続化するには、DockerのVolume機能を使って、ホストOSのディレクトリやDocker Volumeをコンテナ内のデータディレクトリにマウントします。Redisのデフォルトのデータディレクトリは /data です。

例 (名前付きVolumeを使う場合):
docker volume create redis_data
docker run --name my-redis -d -p 6379:6379 -v redis_data:/data redis
このコマンドは、redis_data という名前付きVolumeを作成し(初回のみ必要)、それをコンテナの /data ディレクトリにマウントします。コンテナを再起動・削除しても、redis_data Volumeは残り、データは保持されます。

例 (ホストOSのディレクトリをマウントする場合):
mkdir $HOME/redis_data # ホストOSにデータ保存用ディレクトリを作成
docker run --name my-redis -d -p 6379:6379 -v $HOME/redis_data:/data redis
ホストOSの $HOME/redis_data ディレクトリをコンテナの /data にマウントします。

設定ファイルの適用:
Dockerイメージで起動したRedisコンテナは、デフォルトの設定で実行されます。カスタム設定を適用したい場合は、ホストOSに用意した redis.conf ファイルをコンテナにマウントします。Redisコンテナがデフォルトで参照する設定ファイルの場所は、イメージによって異なりますが、多くは /usr/local/etc/redis/redis.conf です。

例 (カスタム設定ファイルをマウントする場合):
mkdir $HOME/redis_conf
cp /path/to/your/redis.conf $HOME/redis_conf/redis.conf # カスタム設定ファイルをコピー
docker run --name my-redis -d -p 6379:6379 -v $HOME/redis_data:/data -v $HOME/redis_conf/redis.conf:/usr/local/etc/redis/redis.conf redis redis-server /usr/local/etc/redis/redis.conf
このコマンドは、データディレクトリとカスタム設定ファイルをマウントし、コンテナ起動時にその設定ファイルを指定してRedisサーバーを起動します。最後の redis-server /usr/local/etc/redis/redis.conf は、コンテナ起動時に実行されるコマンドを上書きし、マウントした設定ファイルを使うように指示しています。

Dockerを使った方法は、ホスト環境をクリーンに保ちたい場合や、開発・テスト用に使い捨てのRedisインスタンスを簡単に用意したい場合に非常に便利です。

ここまでで、選択した方法に応じたRedisのインストールまたは実行環境の準備が完了しました。次は、Redisサーバーの基本的な設定と起動方法について解説します。

第5章: Redisの基本設定と起動

Redisがシステムにインストールされたら、次はRedisサーバーの設定を行い、起動します。Redisの動作をカスタマイズするために、設定ファイルを編集することが一般的です。

5.1 設定ファイル (redis.conf) の解説

Redisサーバーの動作は、設定ファイル redis.conf によって制御されます。このファイルには多くの設定項目(ディレクティブ)が含まれており、ネットワーク設定、永続化、メモリ管理、セキュリティなど、様々な側面を調整できます。

5.1.1 設定ファイルの場所

設定ファイルの場所は、インストール方法によって異なります。

  • ソースコードからインストールした場合:
    デフォルトでは自動でインストールされません。ソースコードディレクトリのルートにある redis.conf を任意の場所にコピーして使用します。一般的な場所としては /etc/redis/redis.conf などが挙げられます。
    sudo mkdir /etc/redis
    sudo cp /path/to/redis-X.Y.Z/redis.conf /etc/redis/redis.conf
    sudo chown redis:redis /etc/redis/redis.conf # 実行ユーザーに合わせて所有者を変更

  • パッケージマネージャーからインストールした場合:
    パッケージマネージャーが自動的にインストールしてくれることがほとんどです。

    • Debian/Ubuntu: /etc/redis/redis.conf
    • CentOS/RHEL/Fedora: /etc/redis.conf または /etc/redis/redis.conf
    • macOS (Homebrew): /usr/local/etc/redis.conf
      これらのパスは一般的な例であり、実際の場所はパッケージやバージョンによって異なる場合があります。

5.1.2 主要な設定項目の詳細な解説

redis.conf ファイルは、各設定項目の説明がコメントアウト(行頭が#)で詳しく書かれています。設定を変更するには、該当する行のコメントアウトを外し、値を変更します。編集には、nanovimなどのテキストエディタを使用します。

sudo nano /etc/redis/redis.conf (例: Debian/Ubuntuでデフォルトパスの場合)

以下に、特に重要ないくつかの設定項目を抜粋して解説します。

  • bind <ip>:
    Redisサーバーが接続を受け付けるネットワークインターフェイスのIPアドレスを指定します。

    • bind 127.0.0.1: ローカルホスト(同じサーバー内)からの接続のみを許可します。最も安全な設定です。
    • bind 0.0.0.0: 全てのネットワークインターフェイスからの接続を許可します。外部からアクセス可能になりますが、セキュリティリスクが高まります。この設定にする場合は、ファイアウォールでアクセス元IPアドレスを制限するか、requirepass設定による認証を必須にすることを強く推奨します。
    • 複数のIPアドレスを指定することも可能です: bind 192.168.1.100 10.0.0.5
  • protected-mode yes:
    バージョン3.2から導入されたセキュリティ機能です。この設定がyesになっていて、かつbindがローカルアドレスのみに設定されていない(例: bind 0.0.0.0)、またはrequirepassが設定されていない場合、外部からの接続を拒否します。デフォルトはyesです。インターネットに公開されたサーバーでこの設定を無効にするのは非常に危険です。開発環境などで外部からアクセスさせたい場合は、bindを適切なIPアドレスに設定し、requirepassを必ず設定するか、protected-mode noとしますが、後者は非推奨です。

  • port <number>:
    Redisサーバーが接続をリスンするTCPポート番号を指定します。デフォルトは 6379 です。他のサービスとポートが競合する場合や、セキュリティ上の理由から変更することがあります。

  • daemonize yes/no:
    Redisサーバーをバックグラウンド(デーモンプロセス)として実行するかどうかを設定します。

    • daemonize no: フォアグラウンドで実行します。ターミナルを閉じるとサーバーも停止します。開発やデバッグ用。
    • daemonize yes: バックグラウンドで実行します。設定ファイルで指定して起動する場合に一般的です。
  • pidfile <path>:
    daemonize yesで起動した場合、RedisサーバーのプロセスID (PID) を保存するファイルのパスを指定します。プロセス管理に利用されます。デフォルトは /var/run/redis_6379.pid など、環境によって異なります。

  • logfile <path>:
    ログを書き出すファイルのパスを指定します。重要なイベントやエラーがここに記録されます。設定しない場合、ログは標準出力に書き出されます(daemonize noの場合)。daemonize yesの場合は、ログファイルを設定することが必須です。/var/log/redis/redis-server.log などが一般的です。

  • loglevel debug/verbose/notice/warning:
    ログの詳細レベルを指定します。

    • debug: 最も詳細な情報(デバッグ用)
    • verbose: 多くの情報(開発・テスト用)
    • notice: 重要な情報(本番環境で推奨)
    • warning: 警告のみ(問題発生時のみ)
  • databases <number>:
    Redisサーバーが保持できるデータベースの数を指定します。各データベースは0から始まり、番号で指定して切り替えて使用します(デフォルトは16個)。SELECT <dbid>コマンドでデータベースを切り替えます。

  • save <seconds> <changes>:
    RDB永続化の設定です。指定された秒数(seconds) の間に指定された回数(changes) 以上の書き込みが発生した場合に、データセットをディスクに自動保存します。複数のsave行を指定して、異なる条件でスナップショットを取るように設定できます。
    例: save 900 1 (900秒(15分)間に1回以上の変更があれば保存)
    例: save 300 10 (300秒(5分)間に10回以上の変更があれば保存)
    例: save 60 10000 (60秒間に10000回以上の変更があれば保存)
    この設定をすべてコメントアウトすると、RDBによる自動保存は無効になります。

  • stop-writes-on-bgsave-error yes/no:
    RDBバックグラウンド保存(BGSAVE)中にエラーが発生した場合に、クライアントからの書き込みを許可するかどうかを設定します。yesの場合、書き込みが停止されます。デフォルトはyesで、これはデータが失われるリスクを最小限に抑えるためです。

  • rdbcompression yes/no:
    RDBファイルに保存する際に、LZF圧縮を行うかどうかを設定します。デフォルトはyesです。ファイルサイズは小さくなりますが、CPU使用率が少し増加します。

  • dbfilename <filename>:
    RDBファイルのファイル名を指定します。デフォルトは dump.rdb です。

  • dir <directory>:
    Redisがデータファイル(RDBファイルやAOFファイル)を保存する作業ディレクトリを指定します。このディレクトリは、サーバー起動時に存在し、Redisユーザーが書き込み権限を持っている必要があります。デフォルトはサーバー起動ディレクトリまたは /var/lib/redis などです。/var/lib/redisなどが一般的です。

  • appendonly yes/no:
    AOF永続化を有効にするかどうかを設定します。

    • appendonly no: AOFは無効です。RDBのみまたは永続化なしになります。
    • appendonly yes: AOFを有効にします。書き込みコマンドはAOFファイルに追記されます。
  • appendfilename <filename>:
    AOFファイルのファイル名を指定します。デフォルトは appendonly.aof です。

  • appendfsync everysec/always/no:
    AOFファイルをディスクに同期する頻度を設定します。

    • always: 全ての書き込みコマンドをすぐにディスクに同期します。最も安全ですが、パフォーマンスが低下します。
    • everysec: 1秒ごとに同期します。ほとんどの場合で推奨される設定です。最大1秒分のデータ損失のリスクがあります。
    • no: OSに同期を任せます。最も高速ですが、数秒分のデータ損失のリスクがあります。
  • no-appendfsync-on-rewrite yes/no:
    AOFファイルの書き換え(compactify)中に、appendfsync設定で指定された同期処理を行うかどうかを設定します。yesの場合、AOF書き換え中は同期を行わないため、ディスクI/Oの負荷を軽減できますが、その間は同期間隔が長くなり、データ損失のリスクが高まります。デフォルトはyesです。

  • auto-aof-rewrite-percentage <percentage> および auto-aof-rewrite-min-size <size>:
    AOFファイルの自動書き換え(コンパクション)を行う条件を設定します。現在のAOFファイルサイズが前回の書き換え後のサイズから指定されたパーセンテージ(percentage) 以上増加し、かつファイルサイズが指定された最小サイズ(size) 以上になった場合に、自動的にAOFファイルの書き換えが行われます。これにより、AOFファイルの肥大化を防ぎます。

  • requirepass <password>:
    クライアントがRedisに接続する際に必要となるパスワードを設定します。設定した場合、クライアントはAUTH <password>コマンドで認証を行う必要があります。セキュリティ上、インターネット経由でアクセス可能な環境では必ず設定することを推奨します。非常に重要です。

  • maxmemory <bytes>:
    Redisが使用する最大メモリ容量を指定します。指定した容量を超えた場合、maxmemory-policy設定に従ってデータを削除します。単位はB、KB、MB、GBで指定できます(例: maxmemory 2gb)。

  • maxmemory-policy noeviction/allkeys-lru/volatile-lru/allkeys-random/...:
    maxmemoryを超過した場合に、どのキーを削除するか(エビクションポリシー)を設定します。

    • noeviction: 削除しません。書き込みコマンドはエラーになります。
    • allkeys-lru: 全てのキーの中から、最も長い間使われていないキー(LRU: Least Recently Used)を削除します。
    • volatile-lru: 有効期限が設定されているキーの中から、LRUなキーを削除します。
    • 他にも様々なポリシーがあります。ユースケースに応じて最適なポリシーを選択してください。
  • tcp-keepalive <seconds>:
    クライアント接続に対するTCPキープアライブの頻度(秒)を設定します。これにより、切断されたクライアント接続をより早く検出できます。デフォルトは300秒です。

これらの設定項目はごく一部ですが、Redisの基本的な動作に大きく影響するため、用途に合わせて適切に設定することが重要です。設定ファイルを編集したら、変更を有効にするためにRedisサーバーを再起動する必要があります。

5.2 Redisサーバーの起動方法

Redisサーバーを起動するにはいくつかの方法があります。状況に応じて最適な方法を選択してください。

5.2.1 フォアグラウンドでの起動 (テスト・デバッグ用)

最も簡単な起動方法で、主に開発やデバッグに使用します。

  1. ターミナルを開く:
    Redisサーバーを起動したいターミナルウィンドウを開きます。

  2. redis-serverコマンドを実行:
    redis-serverの実行ファイルがPATHに含まれている場合、以下のコマンドで起動できます。
    redis-server

    設定ファイルを指定して起動する場合は、以下のコマンドを実行します。
    redis-server /path/to/redis.conf

    サーバーが起動すると、設定情報やログメッセージがターミナルに表示され続けます。

    “`

    redis-server 実行例(出力の一部)

    .
    .-__ ''-._
    _.-
    .
    . ”-. Redis version X.Y.Z (00000000/0)
    .-‘.-‘'. '.
    . ‘. ‘.-‘
    .-‘.-'. ‘-... .-‘
    ‘.
    ‘ ‘. . .-‘ .-‘ .
    ‘._ ‘-.
    .-‘ __.-‘ .-‘
    ‘. .-‘.-‘ .-‘ .-‘
    .-‘ .-‘
    .-‘ .-‘ .-‘
    | .-‘.-‘ .-‘ .-‘
    ‘..-‘
    .-‘ .-‘ .-`
    .’.-‘
    .-‘ .-‘.-‘
    .-‘.-‘ .-‘ .’
    .-‘-..-‘ .’
    .-‘ .-‘ .’
    .-‘.-‘ .’
    ‘-.
    .’
    ‘-._.-‘

    … (設定情報やログが出力される) …

    • Server initialized
    • Ready to accept connections
      “`
  3. 停止:
    サーバーを停止するには、ターミナルで Ctrl+C を押します。これにより、安全にシャットダウン処理が行われます。

    注意: この方法で起動した場合、ターミナルを閉じたり、SSHセッションを切断したりすると、サーバーも停止してしまいます。本番環境での利用には向きません。

5.2.2 バックグラウンド (デーモン) での起動

Redisサーバーをバックグラウンドプロセスとして実行し、ターミナルを閉じても動作を続けるようにします。主にサーバー環境での利用に適しています。

  1. 設定ファイルでdaemonize yesに設定:
    redis.confファイルを開き、daemonize noとなっている行を見つけて、コメントアウトを外し、yesに変更します。
    daemonize yes

  2. ログファイルとPIDファイルのパスを設定:
    バックグラウンドで実行する場合、標準出力にログが出力されないため、ログファイルパス(logfile)とPIDファイルパス(pidfile)を必ず設定してください。コメントアウトを外し、適切なパスを指定します。Redisユーザーが書き込み権限を持つディレクトリを指定する必要があります。
    pidfile /var/run/redis_6379.pid
    logfile /var/log/redis/redis-server.log
    これらのディレクトリが存在しない場合は作成し、Redis実行ユーザーに適切な権限を付与してください。
    sudo mkdir /var/log/redis /var/run/redis # 必要に応じて
    sudo chown redis:redis /var/log/redis /var/run/redis # Redisユーザーに合わせて

  3. redis-serverコマンドで設定ファイルを指定して起動:
    設定ファイルを保存したら、以下のコマンドでRedisサーバーを起動します。
    redis-server /path/to/redis.conf

    このコマンドを実行しても、フォアグラウンド起動のようにログはターミナルに表示されません。コマンドプロンプトがすぐに戻ってきます。

  4. 起動確認:
    サーバーが正しく起動したか確認するには、PIDファイルの中身を確認したり、プロセス一覧を表示したりします。

    • PIDファイルの確認: cat /var/run/redis_6379.pid (PIDが表示されるはずです)
    • プロセス一覧の確認: ps aux | grep redis-server (redis-serverプロセスが表示されるはずです)
    • ポートリスニングの確認: sudo netstat -tuln | grep 6379 (TCP 6379ポートがLISTEN状態になっていればOK)
    • クライアントからの接続確認: redis-cli ping (応答があればOK)
  5. 停止:
    バックグラウンドで起動したサーバーを停止するには、redis-cliコマンドを使用します。
    redis-cli shutdown
    または、PIDファイルを指定してプロセスを終了させるシグナルを送る方法もありますが、redis-cli shutdownが最も安全な停止方法です。

5.2.3 systemdを使った起動 (推奨)

多くのモダンなLinuxディストリビューションでは、サービス管理にsystemdが使われています。パッケージマネージャーでRedisをインストールした場合、通常はRedisサービスがsystemdに登録されます。ソースコードからインストールした場合でも、サービスファイルを自分で作成すればsystemdで管理できます。この方法は、サーバーの自動起動、起動・停止・再起動の管理、状態確認などが容易になるため、本番環境で最も推奨されます。

パッケージマネージャーでインストールした場合:
通常、インストール完了後にRedisサービスは自動的に有効化・起動されています。

  1. サービスの有効化 (自動起動設定):
    システムの起動時にRedisが自動的に起動するように設定します。
    sudo systemctl enable redis-server (または redis など、サービス名に合わせて)

  2. サービスの手動起動:
    有効化されているか、または停止しているサービスを手動で起動します。
    sudo systemctl start redis-server

  3. サービスの状態確認:
    サービスの現在の状態(起動中か、エラーが出ていないかなど)を確認します。
    sudo systemctl status redis-server
    このコマンドは、サービスの現在の状態、PID、メモリ使用量、直近のログ出力などを表示します。エラーが発生している場合は、ここで原因のヒントが得られます。

  4. サービスの停止:
    Redisサーバーを停止します。
    sudo systemctl stop redis-server

  5. サービスの再起動:
    設定ファイルを変更した場合などに、サービスを再起動して変更を適用します。
    sudo systemctl restart redis-server

  6. 設定ファイルの再読み込み (変更を適用せずに再起動):
    systemdサービスファイル自体を変更した場合などに、daemonプロセスに設定ファイルを再読み込みさせます。
    sudo systemctl daemon-reload
    その後、必要に応じて systemctl restart redis-server を実行します。

ソースコードからインストールし、systemdで管理する場合:
自分で /etc/systemd/system/redis.service のようなサービスファイルを作成する必要があります。サービスファイルの内容はディストリビューションやバージョンによって推奨される形式が異なりますが、基本的な構造は以下のようになります。

“`ini
[Unit]
Description=Redis In-Memory Data Store
After=network.target

[Service]
User=redis # Redisを実行するユーザー名 (任意、推奨)
Group=redis # Redisを実行するグループ名 (任意、推奨)
ExecStart=/usr/local/bin/redis-server /etc/redis/redis.conf # 実行ファイルのパスと設定ファイルパス
ExecStop=/usr/local/bin/redis-cli shutdown # 停止コマンド
PIDFile=/var/run/redis_6379.pid # PIDファイルパス (redis.confと一致させる)
TimeoutStopSec=0
Restart=always
RestartSec=1
StandardOutput=journal # ログをjournaldに出力 (任意)
StandardError=journal # エラーログをjournaldに出力 (任意)

[Install]
WantedBy=multi-user.target
``
サービスファイルを作成・編集したら、
sudo systemctl daemon-reloadを実行してsystemdに新しい設定ファイルを認識させ、その後上記の手順でサービスを有効化・起動します。サービスを実行するユーザー・グループ(例:redis`)は、必要に応じて作成し、Redisのデータディレクトリやログディレクトリに適切な権限を与える必要があります。

5.2.4 init.dを使った起動 (古いシステム)

systemdが登場する以前のLinuxシステムでは、init.dスクリプトを使ってサービスを管理していました。ソースコードからのインストールで提供される utils/redis_init_script は、init.d形式のスクリプトです。

  1. スクリプトのコピーと配置:
    ソースコードディレクトリの utils/redis_init_script/etc/init.d/redis-server (または任意のサービス名) としてコピーします。
    sudo cp /path/to/redis-X.Y.Z/utils/redis_init_script /etc/init.d/redis-server

  2. スクリプトの編集:
    コピーしたスクリプトを開き、設定ファイルのパス、実行ファイルのパス、PIDファイルパスなどを環境に合わせて編集します。スクリプトの冒頭付近に設定箇所があります。
    sudo nano /etc/init.d/redis-server

  3. 実行権限の付与:
    スクリプトに実行権限を付与します。
    sudo chmod +x /etc/init.d/redis-server

  4. サービスの起動/停止/再起動:
    以下のコマンドでサービスを管理できます。
    sudo /etc/init.d/redis-server start
    sudo /etc/init.d/redis-server stop
    sudo /etc/init.d/redis-server restart
    sudo /etc/init.d/redis-server status

  5. 自動起動設定:
    システムの起動時に自動的に起動するように設定します。コマンドはディストリビューションによって異なります。

    • Debian/Ubuntu: sudo update-rc.d redis-server defaults
    • CentOS/RHEL: sudo chkconfig redis-server on

systemdが利用可能な環境では、systemdを使う方が管理が容易で推奨されます。

5.3 起動確認

Redisサーバーが起動したら、正しく動作しているか最終的な確認を行います。

  1. プロセス確認:
    ps aux | grep redis-server
    redis-serverプロセスが実行中であることを確認します。

  2. ポート確認:
    sudo netstat -tuln | grep 6379 (デフォルトポートの場合)
    tcp プロトコルで 0.0.0.0:6379 または 127.0.0.1:6379 など、redis-server プロセスが指定ポートでLISTEN状態になっていることを確認します。sudo が必要かもしれません。

  3. redis-cliを使った接続確認:
    Redisクライアントコマンドラインインターフェイス redis-cli を使ってサーバーに接続し、簡単なコマンドを実行します。
    redis-cli
    または、サーバーがローカル以外にある場合やポートを変更している場合は、ホストとポートを指定します。
    redis-cli -h <hostname or ip> -p <port>
    パスワード認証(requirepass)を設定している場合は、-aオプションまたはAUTHコマンドでパスワードを指定します。
    redis-cli -a <password>

    接続が成功すると、プロンプトが 127.0.0.1:6379> のように表示されます。ここで PING コマンドを実行します。

    127.0.0.1:6379> PING
    PONG

    PONG が返ってくれば、サーバーは正常に動作しており、クライアントからの接続を受け付けています。

    接続できない場合の確認事項:
    * Redisサーバーは起動していますか? (systemctl statusps aux で確認)
    * Redisサーバーは正しいポートでリスンしていますか? (netstat -tuln で確認)
    * bind設定は正しいですか? (redis.confで確認)
    * ファイアウォール(iptables, firewalldなど)がポートをブロックしていませんか? 必要に応じてポートを開放します。
    * protected-mode yes となっていて、bindがローカルアドレス以外になっている、かつrequirepassが設定されていない場合、外部からの接続は拒否されます。設定を見直してください。
    * requirepassを設定しているのにパスワードを指定していませんか? AUTH <password> コマンドまたは -a オプションでパスワードを指定してください。

これらの確認を行い、PINGコマンドでPONGが返ってくれば、Redisサーバーは正常にインストールされ、起動しています。

第6章: Redisの基本的な使い方

Redisサーバーが起動したら、実際にデータ操作を行ってみましょう。redis-cliコマンドラインインターフェイスを使って、簡単なRedisコマンドを実行できます。

redis-cli

接続すると、プロンプトが表示され、コマンドを入力できるようになります。

6.1 PINGコマンド

サーバーとの接続を確認します。
127.0.0.1:6379> PING
PONG

PONGが返れば正常です。

6.2 文字列 (String) の操作

最も基本的なデータ構造です。キーと値が1対1で対応します。
* 設定: SET key value
127.0.0.1:6379> SET mykey "hello redis"
OK
* 取得: GET key
127.0.0.1:6379> GET mykey
"hello redis"
* 存在確認: EXISTS key
127.0.0.1:6379> EXISTS mykey
(integer) 1
127.0.0.1:6379> EXISTS nonexistkey
(integer) 0
* 削除: DEL key
127.0.0.1:6379> DEL mykey
(integer) 1
127.0.0.1:6379> GET mykey
(nil)

6.3 リスト (List) の操作

要素を順番に保持するデータ構造です。キューやスタックとして使えます。
* 左側に追加: LPUSH key value [value ...]
127.0.0.1:6379> LPUSH mylist "a"
(integer) 1
127.0.0.1:6379> LPUSH mylist "b" "c"
(integer) 3 # リストは c -> b -> a となります
* 右側に追加: RPUSH key value [value ...]
127.0.0.1:6379> RPUSH mylist "d"
(integer) 4 # リストは c -> b -> a -> d となります
* 左側から取得・削除: LPOP key
127.0.0.1:6379> LPOP mylist
"c" # リストは b -> a -> d となります
* 右側から取得・削除: RPOP key
127.0.0.1:6379> RPOP mylist
"d" # リストは b -> a となります
* 範囲指定で取得: LRANGE key start stop
127.0.0.1:6379> LRANGE mylist 0 -1 # 全てを取得 (0から末尾まで)
1) "b"
2) "a"

6.4 ハッシュ (Hash) の操作

フィールドと値のマッピングを保持するデータ構造です。オブジェクト表現に使えます。
* フィールドを設定: HSET key field value [field value ...]
127.0.0.1:6379> HSET user:1 name "Alice" age 30 city "Tokyo"
(integer) 3 # 設定されたフィールド数
* フィールドを取得: HGET key field
127.0.0.1:6379> HGET user:1 name
"Alice"
* 複数のフィールドを取得: HMGET key field [field ...]
127.0.0.1:6379> HMGET user:1 name city
1) "Alice"
2) "Tokyo"
* 全てのフィールドと値を取得: HGETALL key
127.0.0.1:6379> HGETALL user:1
1) "name"
2) "Alice"
3) "age"
4) "30"
5) "city"
6) "Tokyo"

6.5 セット (Set) の操作

重複しない文字列のコレクションです。メンバーシップテストや集合演算に使えます。
* メンバーを追加: SADD key member [member ...]
127.0.0.1:6379> SADD myset "apple" "banana" "cherry"
(integer) 3
127.0.0.1:6379> SADD myset "banana" # 重複は無視される
(integer) 0
* 全てのメンバーを取得: SMEMBERS key
127.0.0.1:6379> SMEMBERS myset
1) "cherry"
2) "apple"
3) "banana" # 取得順序は保証されない
* メンバーの存在を確認: SISMEMBER key member
127.0.0.1:6379> SISMEMBER myset "apple"
(integer) 1
127.0.0.1:6379> SISMEMBER myset "grape"
(integer) 0

6.6 ソート済みセット (Sorted Set) の操作

メンバーにスコアを持たせ、スコア順にソートされたセットです。ランキングなどに使えます。
* メンバーを追加: ZADD key score member [score member ...]
127.0.0.1:6379> ZADD myzset 100 "player1" 200 "player2" 150 "player3"
(integer) 3
* スコア順にメンバーを取得: ZRANGE key start stop [WITHSCORES]
127.0.0.1:6379> ZRANGE myzset 0 -1 WITHSCORES # スコア付きで全て取得
1) "player1"
2) "100"
3) "player3"
4) "150"
5) "player2"
6) "200"

6.7 その他の便利なコマンド

  • 全てのキーを取得 (開発/テスト環境のみで推奨): KEYS pattern
    127.0.0.1:6379> KEYS * # 全てのキー
    1) "myset"
    2) "user:1"
    3) "myzset"
    4) "mylist"
    注意: KEYS * は本番環境では使用しないでください。キーの数が多い場合、サーバーをブロックし、パフォーマンスに深刻な影響を与える可能性があります。代わりに SCAN コマンドを使用します。
  • キーの削除: DEL key [key ...] (上記参照)
  • キーに有効期限を設定: EXPIRE key seconds
    127.0.0.1:6379> SET tempkey "volatile data"
    OK
    127.0.0.1:6379> EXPIRE tempkey 60 # 60秒後に期限切れ
    (integer) 1
  • キーの残り有効期限を確認: TTL key
    127.0.0.1:6379> TTL tempkey
    (integer) 55 # 残り秒数
    127.0.0.1:6379> TTL nonexistkey
    (integer) -2 # キーが存在しない
    127.0.0.1:6379> TTL mykey
    (integer) -1 # キーは存在するが、有効期限がない

これらの基本的なコマンドを使って、Redisにデータを保存したり取得したりする練習をしてみてください。

第7章: アップグレードとメンテナンス

Redisを本番環境で利用する場合、新しいバージョンへのアップグレードや定期的なメンテナンスが必要になります。

7.1 アップグレード方法

アップグレードの手順は、インストール方法に依存します。

  • ソースコードからインストールした場合:

    1. 公式サイトから新しいバージョンのソースコードをダウンロードします。
    2. ダウンロードしたソースコードを展開します。
    3. 新しいソースコードディレクトリに移動し、make コマンドでビルドします。
    4. make test でテストを実行します。
    5. 重要な注意点: sudo make install を実行する前に、現在実行中のRedisサーバーを安全に停止してください (redis-cli shutdown または systemctl stop redis-server など)。これは、実行中のバイナリファイルを置き換えることができないためです。
    6. サーバーが停止していることを確認したら、sudo make install (または sudo make install PREFIX=/your/path) を実行し、新しい実行ファイルをインストールします。
    7. 必要に応じて、新しいバージョンに合わせて設定ファイル (redis.conf) を見直します。古い設定ファイルとの差分を確認し、新しい設定項目や廃止された設定項目がないか確認します。
    8. 新しいバージョンのRedisサーバーを起動します (redis-server /path/to/redis.conf または systemctl start redis-server)。
  • パッケージマネージャーからインストールした場合:
    パッケージマネージャーの更新コマンドを実行するだけです。

    • Debian/Ubuntu: sudo apt update && sudo apt upgrade redis-server
    • CentOS/RHEL/Fedora: sudo yum update redis または sudo dnf update redis
    • macOS (Homebrew): brew upgrade redis

    パッケージマネージャーは、通常、アップグレード時に自動的に古いプロセスを停止し、新しいバイナリで再起動しようとします。ただし、念のため事前に手動で停止・起動・ステータス確認を行うことを推奨します。設定ファイルは通常上書きされず、.dpkg-dist.rpmnew のような拡張子が付与された新しい設定ファイルが別途配置されるため、手動で差分を確認し、変更をマージする必要があります。

  • Dockerを使う場合:
    新しいバージョンのイメージをプルし、既存のコンテナを停止・削除してから、新しいイメージでコンテナを再作成して起動します。

    1. 既存のコンテナを停止します: docker stop my-redis
    2. 既存のコンテナを削除します: docker rm my-redis
    3. 新しいバージョンのイメージをプルします: docker pull redis:latest (または指定バージョン)
    4. 新しいイメージでコンテナを起動します(永続化ボリュームを忘れずにマウントします): docker run --name my-redis -d -p 6379:6379 -v redis_data:/data redis:latest

    この方法の利点は、古い環境を簡単に保持しておけることです。

7.2 データ移行とバックアップ

アップグレードやメンテナンスの際には、データのバックアップと移行計画が非常に重要です。

  • バックアップ: Redisの永続化機能(RDBまたはAOF)を有効にしておけば、それらのファイルをバックアップすることでデータを保護できます。BGSAVE コマンドを手動で実行してRDBスナップショットを作成することも可能です。バックアップファイルは、Redisのdir設定で指定されたディレクトリに保存されます。これらのファイルを定期的に別のストレージやリモートにコピーしておくことが推奨されます。
  • データ移行: バージョンアップによるデータ形式の互換性問題は稀ですが、メジャーバージョンアップの際は念のため確認が必要です。通常は、古いバージョンのRDB/AOFファイルを新しいバージョンのRedisが読み込むことでデータ移行が可能です。レプリケーションを利用している場合は、新しいバージョンのRedisをスレーブとして起動し、マスターからデータを複製させた後、新しいスレーブをマスターに昇格させる(フェイルオーバー)といった方法でダウンタイムを最小限に抑えたアップグレードを行うことも可能です。

第8章: トラブルシューティングのヒント

Redisのインストールや起動で問題が発生した場合、以下の点を確認してみてください。

  • ログファイルの確認:
    Redisサーバーは、起動時の情報、警告、エラーなどをログファイルに記録します(logfile設定で指定)。サーバーが起動しない、予期せぬ挙動を示すといった場合、まずこのログファイルを確認するのが最初のステップです。ログレベル(loglevel)を一時的にverbosedebugに上げて、より詳細な情報を得ることも有効です。

  • ポート競合:
    Redisが使用しようとしているポート(デフォルトは6379)が、他のプロセスによってすでに使用されている可能性があります。sudo netstat -tuln | grep 6379 (ポート番号は適宜変更) コマンドで、どのプロセスがそのポートを使っているか確認できます。競合している場合は、競合相手を停止するか、Redisの設定でポート番号を変更してください。

  • 設定エラー:
    redis.conf ファイルの設定が間違っていると、サーバーが起動しなかったり、すぐに終了してしまったりします。起動時のログメッセージで設定エラーが報告されることが多いです。特に、パスの指定(pidfile, logfile, dir)、権限(Redis実行ユーザーが指定されたディレクトリに書き込めるか)、bind設定、requirepass設定などを確認してください。設定ファイルを編集した後にエラーが出るようになった場合は、変更箇所が原因である可能性が高いです。

  • 権限不足:
    Redisサーバーは、指定されたdirディレクトリにRDB/AOFファイルを書き込んだり、logfilepidfileを作成したりする必要があります。Redisを実行するユーザー(通常はredisユーザーなど、パッケージマネージャーが作成)がこれらのファイルやディレクトリに対する書き込み権限を持っているか確認してください。systemdサービスとして実行している場合、UserおよびGroup設定を確認します。

  • メモリ不足:
    Redisはインメモリデータベースであるため、利用可能なメモリが不足するとパフォーマンスが低下したり、最悪の場合クラッシュしたりします。特にデータの永続化(RDBスナップショットなど)を行う際には、データのコピーをメモリ上に一時的に作成するため、通常時より多くのメモリが必要です。INFO memory コマンドやOSのメモリ監視ツール(free, top, htopなど)でメモリ使用量を確認し、必要に応じてmaxmemory設定を調整するか、サーバーのメモリ容量を増設してください。永続化設定のsaveの間隔を調整することも検討できます。

  • 接続に関する問題:

    • クライアントから接続できない: bind設定が適切か?ファイアウォールは開いているか?protected-modeが有効になっていて接続元IPが許可されていないか?パスワード認証が必要か?
    • redis-cli が接続しようとするデフォルトホスト/ポートは 127.0.0.1:6379 です。リモートホストや異なるポートで実行している場合は、-h-p オプションを指定してください。

これらのヒントを参考に、問題の原因を特定し、解決に向けて対処してみてください。

おわりに

この記事では、Redisのダウンロードからインストール、そして基本的な設定と起動までの詳細な手順を、様々な方法に分けて解説しました。

  • Redisが高速なインメモリデータストアであり、多様なデータ構造をサポートし、キャッシュやセッションストア、メッセージキューなど幅広いユースケースで活用できることを理解しました。
  • ソースコードからのビルド、パッケージマネージャーの利用、WSL、Dockerといった主要なインストール方法それぞれのメリット・デメリットを把握し、ご自身の環境に最適な方法を選択しました。
  • 選択した方法に従って、Redisの実行ファイルやソースコードをダウンロードしました。
  • 特にソースコードからのビルド手順を詳細に学び、依存関係のインストール、makeによるコンパイル、make testによるテスト、make installによるインストールといったステップを実行しました。
  • パッケージマネージャーやDockerを使った場合のインストール/実行手順も確認しました。
  • Redisサーバーの基本的な設定ファイルであるredis.confの主要な設定項目(bind, port, daemonize, logfile, dir, requirepass, maxmemoryなど)の意味と設定方法を理解しました。
  • Redisサーバーをフォアグラウンド、バックグラウンド(デーモン)、そしてsystemd/init.dサービスとして起動する方法を学び、インストール後の起動確認方法(プロセス、ポート、redis-cli ping)を実行しました。
  • redis-cliを使った文字列、リスト、ハッシュなどの基本的なデータ構造の操作コマンドを試しました。
  • アップグレードや簡単なトラブルシューティングのヒントについても触れました。

これで、あなたはRedisを自身の環境にセットアップし、基本的な操作を行う準備が整いました。Redisのインストールは、その強力な機能を活用するための第一歩です。

次のステップとして、以下のことを検討してみてください。

  • Redis公式ドキュメントの探索: Redisには豊富なドキュメントが用意されています。今回解説した設定項目以外にも多くのオプションがありますし、各コマンドの詳細な使い方、データ構造の詳しい説明、Pub/Sub、Luaスクリプティング、トランザクション、パイプラインといった高度な機能について学ぶことができます。
  • クライアントライブラリを使ったアプリケーション開発: 多くのプログラミング言語(Python, Java, Node.js, PHP, Ruby, C#, Goなど)向けにRedisクライアントライブラリが提供されています。これらのライブラリを使うことで、ご自身のアプリケーションからRedisに簡単に接続し、データを操作できるようになります。
  • Redis SentinelやClusterの学習: 高可用性やスケーラビリティが必要な本番環境では、単一のRedisサーバーだけでなく、SentinelによるHA構成やClusterによる分散構成の構築を検討する必要があります。これらの機能はRedisのレプリケーション機能の上に成り立っています。
  • セキュリティの強化: 本番環境では、requirepassによる認証だけでなく、TLS/SSLによる暗号化、ファイアウォールによるアクセス制限、専用ユーザーでの実行といったセキュリティ対策が不可欠です。

Redisは非常に奥深く、学ぶことがたくさんあります。しかし、今回のインストールと基本設定を終えたことで、その学習の基盤ができました。ぜひ、Redisの持つ可能性を探求し、ご自身のプロジェクトに活用してみてください。

この記事が、あなたのRedisジャーニーの助けとなれば幸いです。


参考文献:

  • Redis Documentation: https://redis.io/documentation
  • Redis Download Page: https://redis.io/download

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

上部へスクロール