実践Redis入門 技術の仕組みから現場の活用まで
書籍情報
発売日 : 2022年12月10日
著者/編集 : 林 昌吾
出版社 : 技術評論社
発行形態 : 単行本
書籍説明
内容紹介
高速で表現力豊かなインメモリーデータベースRedisを実践的に活用する。Redisの基礎知識から開発・運用管理など実践活用まで解説。
目次
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クラスターの改良
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のリリース周りのコンポーネント開発などの業務に取り組む。
林, 昌吾