Redis

Takami Torao Redis 4 #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 は重複した値を含まない集合である。

参考リンク

  1. Pengcheng Huang, Zuofei Wang, "Redis 4.X Cookbook", Packt Publishing 2018