実践Redis入門 技術の仕組みから現場の活用まで

書籍の概要

この本の概要

インメモリデータベース,Redisの解説書です。

Redisは高速な応答性などからRDBMSでは対応しきれないデータの格納などに用いられます。高速さと柔軟さを併せ持ち,数多くのプログラミング言語から利用できます。

RDBMSの前段に配置してキャッシュとして用いるときの圧倒的な応答性能,Redisの多様なモデルによるアプリケーションからの扱いやすさなどで人気を集めています。リアルタイムの処理や高速なサービスが求められるWebサービスで特に支持を得ています。

本書では,このRedisを基礎から実践まで解説します。体系的な知識が身につき,アプリケーション開発や運用,トラブルシューティングがこなせるようになります。

こんな方におすすめ

  • Redisを利用/運用しているエンジニア
  • Redisに興味のあるエンジニア
  • Redisをより深く利用したい,すでにある程度の実装・運用経験のあるエンジニア

本書のサンプル

本書の紙面イメージは次のとおりです。画像をクリックすることで拡大して確認することができます。

サンプル画像1

サンプル画像2

サンプル画像3

サンプル画像4

目次

1 はじめてのRedis

  • 1.1 Redisが使われるまで
  • 1.2 Redisの特徴
    • 1.2.1 Redisの動作イメージ
    • 1.2.2 Redisはほかのデータベースとどう違うのか
    • 1.2.3 依存が少ないRedis
    • 1.2.4 Redisはどう使われているのか
    • 1.2.5 高速・多機能なインメモリーデータストアRedis
    • column Redisの誕生から現在
    • 1.2.6 RDBMSとの比較
    • column ACID特性
    • 1.2.7 Memcachedとの比較
  • 1.3 Redisサーバーのセットアップ
    • 1.3.1 UbuntuでのRedisのインストール
    • 1.3.2 ソースコードからインストールする
  • 1.4 Redisの操作を試す
    • 1.4.1 redis-serverの起動とredis-cliによる接続
    • column GUIクライアント
    • column 接続できない際のトラブルシューティング
    • 1.4.2 redis-cliの動作
    • 1.4.3 リモート接続で操作する
  • 1.5 Redisのドキュメント・リソース
    • 1.5.1 Redis data types(Redisのドキュメント)
    • 1.5.2 Redisのトレーニング
    • 1.5.3 Redisを活用する

2 データ型と機能

  • 2.1 データ型および機能の概要
    • 2.1.1 5つのデータ型(特徴・ユースケース・コマンド例)
    • 2.1.2 補助的なデータ型および機能
    • 2.1.3 Redisによる幅広いデータモデルの表現性
    • 2.1.4 Redisのデータ型とコマンド
    • 2.1.5 Redisのユーティリティコマンド
  • 2.2 String型
    • column RedisのString型は今でも512MBが上限か?
    • 2.2.1 String型の活用―高速なセッションキャッシュ
    • 2.2.2 String型と対応するコマンド
    • column Redisのキー名の付け方
    • 2.2.3 String型の数値
    • 2.2.4 String型の各種コマンド
    • column そのほかのString型で利用可能なコマンド
    • column String型で廃止予定/廃止可能性のあるコマンド
    • 2.2.5 String型の実行例
    • 2.2.6 SETコマンドとオプション
  • 2.3 List型
    • 2.3.1 List型の活用―人気コンテンツの表示
    • 2.3.2 List型の各種コマンド
    • column そのほかのList型で利用可能なコマンド
    • column List型で廃止予定/廃止可能性のあるコマンド
    • 2.3.3 List型の実行例
  • 2.4 Hash型
    • 2.4.1 Hash型の活用―オブジェクトストレージ
    • 2.4.2 Hash型の主なコマンド
    • column そのほかのHash型で利用可能なコマンド
    • column Hash型で廃止予定のコマンド
    • 2.4.3 Hash型の実行例
    • 2.4.4 性能を発揮するための注意点
  • 2.5 Set型
    • 2.5.1 Set型の活用―ユニークな利用者を調べる
    • 2.5.2 Set型のコマンド
    • column そのほかのSet型で利用可能なコマンド
    • 2.5.3 Set型の実行例
  • 2.6 Sorted Set型
    • 2.6.1 Sorted Set型の活用―リアルタイムランキング
    • 2.6.2 Sorted Set型のコマンド
    • column そのほかのSorted Set型で利用可能なコマンド
    • column Sorted Set型で廃止予定/廃止可能性のあるコマンド
    • 2.6.3 Sorted Set型の実行例
  • 2.7 代表的な機能と関連するコマンド
    • 2.7.1 Bitmap(Bit Array)
    • 2.7.2 地理空間インデックス
    • column Geohash
    • column 地理空間インデックスで廃止予定のコマンド
    • 2.7.3 Pub/Sub機能
    • 2.7.4 HyperLogLog
    • column 内部エンコーディング
    • 2.7.5 Redisストリーム(Redis Streams)
    • column Redisストリームと類似した型および機能の比較
    • 2.7.6 データ型を問わず利用できるコマンド
    • column 計算量
    • column そのほかのコマンド

3 高度な機能

  • 3.1 パイプライン
    • 3.1.1 パイプラインの実行例
  • 3.2 Lua
    • 3.2.1 エフェメラルスクリプト(Ephemeral scripts)
    • 3.2.2 Redisファンクション(Redis Functions)
    • 3.2.3 RedisにおけるLuaプログラミング
  • 3.3 トランザクション
  • 3.4 モジュール
    • 3.4.1 モジュールで実現できること
    • 3.4.2 モジュールを実際に利用するとき
    • column パイプライン/エフェメラルスクリプト/Redisファンクション/トランザクション/モジュールの機能比較
  • 3.5 キー空間通知
  • 3.6 クライアントサイドキャッシュ

4 Redisを活用したアプリケーション作成

  • 4.1 多様な言語に対応するRedis
    • 4.1.1 プログラミング言語とRedisを組み合わせる
    • column Redis OM
    • column RedisとTLS
  • 4.2 PHPでRedisを操作する
    • 4.2.1 PhpRedisで操作する
    • 4.2.2 セッション情報のキャッシュ管理
    • column サンプルアプリケーションの注意点
    • 4.2.3 ニュースの投稿機能
  • 4.3 RubyでRedisを操作する
    • 4.3.1 redis-rbで操作する
    • 4.3.2 投票管理
  • 4.4 PythonでRedisを操作する
    • 4.4.1 aioredisで操作する
    • 4.4.2 リアルタイムチャット
    • 4.4.3 データ型を適切に選ぶ

5 Redisの運用管理

  • 5.1 データの永続化
    • 5.1.1 スナップショット
    • column CRC
    • 5.1.2 AOF
    • 5.1.3 スナップショット・AOFの比較
    • 5.1.4 データの削除パターン
    • column RDBファイルのフォーマット
  • 5.2 キャッシュサーバーとしてのRedisのアーキテクチャ
    • 5.2.1 読み込み視点のアーキテクチャ
    • 5.2.2 書き込み視点のアーキテクチャ
    • 5.2.3 アーキテクチャのアンチパターン
    • 5.2.4 データストアとしてのRedisのアーキテクチャ
  • 5.3 ベストプラクティス
    • 5.3.1 TTLの設定
    • 5.3.2 退避ポリシーの設定
    • 5.3.3 バックアップ
    • 5.3.4 コネクションプーリング
    • 5.3.5 リトライ処理
    • 5.3.6 そのほかのベストプラクティス
  • 5.4 キャッシュノードのサイジング
    • 5.4.1 サイジングの目安
  • 5.5 設定ファイルredis.conf
  • 5.6 セキュリティ
    • 5.6.1 セキュリティ設定
    • 5.6.2 ACL機能
  • 5.7 ベンチマーク
    • 5.7.1 RedisとMemcachedのベンチマーク
  • 5.8 マルチスレッド処理
  • 5.9 DEBUGコマンド
    • column データベース

6 トラブルシューティング

  • 6.1 INFOコマンドによるサーバー情報取得
    • column RSS
  • 6.2 レイテンシーの調査
    • 6.2.1 スローログ
    • 6.2.2 redis-cliのオプション
    • 6.2.3 レイテンシーモニタリング
    • column ソフトウェアウォッチドッグ
  • 6.3 メモリー問題

7 レプリケーション

  • 7.1 レプリケーションの機能
    • 7.1.1 非同期処理による実現
    • 7.1.2 レプリケーション利用時のRedisへの接続方法
    • 7.1.3 レプリカは基本的に読み込み専用
    • 7.1.4 マイグレーションへの活用
    • 7.1.5 レプリケーションの注意事項
    • column マスター/スレーブからマスター/レプリカへ
  • 7.2 レプリケーション開始時のしくみ
    • 7.2.1 完全同期
    • 7.2.2 部分同期
    • column レプリケーション切断時の挙動の改良
  • 7.3 レプリケーション動作中のしくみ
    • 7.3.1 マスターとレプリカ間のリンクの状態の死活監視
  • 7.4 フェイルオーバー
    • column レプリケーション時のエフェメラルスクリプト
    • column アプリケーションからのレプリケーションの活用
  • 7.5 レプリケーションの導入方法
    • column Systemdで実行する場合
    • column フェイルオーバーの挙動
    • column Redis Sentinel

8 Redisクラスター

  • 8.1 Redisクラスター機能概要
    • 8.1.1 Redisクラスターの利点
    • 8.1.2 Redisクラスターが利用する2つのTCPポート
    • 8.1.3 動作のしくみ
    • column アクセス先のノードに偏りが出る場合
  • 8.2 Redisクラスターの障害検出
    • 8.2.1 障害検出のしくみ
    • 8.2.2 レプリカ選出
  • 8.3 Redisクラスターのキーワード
    • 8.3.1 スロット
    • 8.3.2 ハッシュタグ
    • 8.3.3 クラスターバス
    • 8.3.4 パーティショニング
  • 8.4 Redisクラスター対応クライアント
    • 8.4.1 MOVEDリダイレクトとASKリダイレクト
    • 8.4.2 Redisクラスター対応クライアントの動作
    • 8.4.3 Redisクラスター対応クライアントの利用方法
  • 8.5 Redisクラスター関連のコマンド
  • 8.6 Redisクラスターの導入方法
    • 8.6.1 全マスターもしくは全レプリカのみに特定処理を実行
    • column Redisクラスターのフェイルオーバーの挙動
    • column ログフォーマットについて

9 メモリー管理

  • 9.1 メモリー管理のアーキテクチャ
    • 9.1.1 INFO Memoryの出力結果を読み解く
    • 9.1.2 クライアント出力バッファー
  • 9.2 キーの失効
    • 9.2.1 失効方法
    • 9.2.2 退避ポリシー
  • 9.3 メモリーを効率的に使用するためのそのほかの工夫
    • 9.3.1 アクティブリハッシュ
    • 9.3.2 アクティブデフラグメンテーション
    • column zmalloc

10 クラウドで利用するRedis

  • 10.1 OSSのRedisとの違い
    • 10.1.1 独自機能
    • column クラウドにおけるメンテナンスとの付き合い方
    • 10.1.2 制限
    • column Amazon MemoryDB for Redis
  • 10.2 クラウドにおける利用方法
    • 10.2.1 エンドポイント
  • 10.3 クラウドを活用したトラブルシューティング
    • 10.3.1 最低限監視をするべきメトリクス
    • 10.3.2 注意を払うべきメトリクス
    • 10.3.3 メンテナンスウィンドウに注意を払う
    • 10.3.4 イベント確認

11 Redisの構造を知る

  • 11.1 Redisの関連技術
    • 11.1.1 RESP(REdis Serialization Protocol)
    • column RESP形式ではないクエリーのリクエスト処理
    • 11.1.2 SDS(Simple Dynamic Strings)
    • 11.1.3 ae
    • 11.1.4 RAX
    • 11.1.5 Copy on Write(CoW)
    • 11.1.6 Raft
    • 11.1.7 HyperLogLog
  • 11.2 ソースコードから見るRedis
    • 11.2.1 各種ファイルの概要
    • 11.2.2 ハッシュテーブル(hashtable)
    • 11.2.3 各種コマンド定義
    • 11.2.4 クライアント定義
    • 11.2.5 サーバー定義
    • 11.2.6 内部エンコーディング
    • column zipmap

Appendix Redisを活用し続けるために

  • A.1 Memcachedとの機能・動作比較の詳細
    • A.1.1 シンプルな形でデータを格納
    • A.1.2 シンプルで余分な機能がなく安定した動作
    • A.1.3 スラブクラス単位でのLRUによるデータ管理
    • A.1.4 マルチスレッドによるイベント駆動処理
    • A.1.5 互いに独立したノード
    • A.1.6 コマンドの特徴
    • A.1.7 ネットワーク・通信関連
    • A.1.8 インメモリーKVSとしての高い性能
    • A.1.9 そのほかにおさえておくと良い特徴
  • A.2 Redisの今後
    • A.2.1 Hash型のTTLの強化
    • A.2.2 より信頼できるキー空間通知
    • A.2.3 キーアノテーション
    • A.2.4 Redisクラスターの改良

著者プロフィール

林昌吾(はやししょうご)

Amazon EMR開発チーム,システム開発エンジニア。2017年にAWSにジョイン。5年間AWSサポートにて技術支援を担当。 Redis/Memcachedやロードバランサーの複数の分野で社内エキスパートとして従事。社内のグローバルからのエスカレーションを受けながら開発チームとの間に立ってトラブルシューティング対応などの業務に取り組む。2022年より現職にて,Amazon EMRのリリース周りのコンポーネント開発などの業務に取り組む。