Open5
実践 Redis 入門
はじめてのRedis
- Redisの特徴
- 高速
- 表現力
RedisはSQLのような表現力やトランザクションの一部を犠牲にしているため、
RDBMS等と組み合わせて利用される
例) マスターデータはMySQL、テーブル内の処理結果をキャッシュデータとしてRedisに保管する
- Redisは特定の用途に特化しているためRDBMSのような汎用性はない
- RedisがRDBMSの代替になることはなく、補完し合う関係
Redisの動作イメージ
- String型
- List型
- Set型
- Hash型
- Sort Set型
多様な型を利用でき、一般的なKVSより複雑な値が持てる
Memcachedとの比較
- MemcachedとRedisは比較的用途が近い
- MemcachedはRDBMSのクエリー処理結果を格納するなどのキャッシュが主な用途
- Redisはキャッシュの用途でも利用できるが、様々なデータモデルの表現をインメモリ上で行える
- Redisは単体でも主なDBとして機能するように設計されている
データ型および機能の概要
5つのデータ型
型名 | 型の説明 | 利用例 |
---|---|---|
String型 | 文字列。シンプルなキーと値の組み合わせ | セッション情報の管理 |
List型 | 文字列のリスト | タイムライン |
Hash型 | 連想配列やディクショナリーに類似 | タグ管理 |
Set型 | 集合。複数の値を順序なしで重複なく保持 | タグ管理 |
Sorted Set型 | ソート済みの集合。順序のある集合 | ランキング |
- 前提としてKVSであるため、基本はグローバル領域でキーと値のペアを管理する
- RDBMSでのテーブルのような概念はない
- 原則、各キーはそれぞれ独立したものとして管理する
Redisのデータ型とコマンド
- Redisはデータ構造ストア。キーに対して値を保持する
- 基本的には保存時にキーと値を指定し、取得時にはキーとその他のオプションを組み合わせている
- データの保存、取得に際しては基本的にはデータごとに独立したコマンドを用いる
EC2からredis-cliを使用してElastiCache Redisに接続
高度な機能
パイプライン
前のリクエストへのレスポンスを待たずに、新しいリクエストを送ることを可能にする機能
- 複数のコマンドをまとめて処理できる
- ただし、条件分岐などの複雑なロジックは扱えない
- パイプライン内での順番は保証されている
- 複数のコマンドを素早く送りつつレスポンスは後でまとめてで問題ないケースに有効
Lua
- Redisは組み込みスクリプトとしてLuaを採用している
- 条件分岐などの複雑なロジックを記載できる
- 書き込みと読み込みのレイテンシーが最小になるように作られている
トランザクション
- Redisでは個々のコマンドレベルではアトミックな処理が保証される
- しかし複数のコマンドを実行するときそれぞれのコマンドの処理は独立する
- 何も意識しなければアトミックな処理は保証されない