目次
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クラスターの改良