Redis
Introduction
Redis はデータベースやキャッシュ、メッセージブローカーとして使用することのできるインメモリデータベース。NoSQL DB の一つとしてよく知られている。主に Unix 系の OS を対象としており Windows での実行は難しい。
特徴
Redis のデータはメモリに保存されためデータアクセスは非常に高速である。揮発性であることからプライマリデータベースを補助するキャッシュやセカンダリデータベースとして使用されているが、一定間隔でディスクに永続化するといったサーバ障害に対処するいくつかの方法も用意されている。データストア以外では Pub/Sub が行えることからメッセージキューとして使用できる。
Redis は RDB のような関連データベースではなく key-value ストアである。Java の HashMap
のサーバ版と考えれば良い。
Redis はキーごとに有効期限を設定できる。有効期限を過ぎたキーは DEL
コマンドで削除したのと同じ状態となる。この動作によってセカンダリなキャッシュサーバとして利用することができる。
データタイプ
Redis はいくつかのデータ型を定義している。string, list, set, sorted set, hash, bitmap, HyperLogLog の 7 種類の型を使用することができる。
string 型
string は値として格納できる最も基本的なデータ型。またキーとして指定する型も文字列である。Redis 内部はバイナリで保持するように実装されているため (各言語のバインディングが対応していれば) JPEG などのバイナリデータを格納することもできる。非 ascii 文字を格納する場合はエンコーディングを意識する必要がある。最大 512MB の制限がある。
redis:6379> set email koiroha@gmail.com
OK
redis:6379> get email
"koiroha@gmail.com"
数字として保存された文字列値は INCR
, INCRBY
, DECR
等の操作で単純な増減操作をアトミックに行うことができる。
redis:6379> set counter 100
OK
redis:6379> incr counter
(integer) 101
list 型
Redis の list は複数の string 値を順序づけした double-linked list 構造で保存する。リスト先頭/末尾への追加/削除操は \(O(1)\) で完了するが、インデックスによる任意の位置指定による操作は探索のコスト \(O(n)\) が発生する。従って、大きな list は Queue もしくは Stack として利用する。
redis:6379> lpush colors blue red
(integer) 2
redis:6379> lpush colors yellow
(integer) 3
redis:6379> rpush colors green
(integer) 4
redis:6379> lrange colors 0 -1
1) "yellow"
2) "red"
3) "blue"
4) "green"
set 型
set は重複した値を含まない集合である。
参考リンク
- Pengcheng Huang, Zuofei Wang, "Redis 4.X Cookbook", Packt Publishing 2018