【入門】Redisをざっくりと理解する
Redisとは?
- メモリ上でデータを管理するインメモリデータベース
- NoSQL型データベースでキーバリュー型でデータを管理
- 主にキャッシュや一時データ、リアルタイム処理に使われるシンプルな仕組み
RDBMSとRedisとの違い
RDBMSの仕組みのイメージ
机、司書、本棚をまとめてデータベースとする。
- 司書に頼めば、見たい本を机まで持ってきてくれ、その場で中身を確認できる
- 複数の本や、「2000年のベストセラー」などの複雑な依頼にも対応
- 司書は正確さ重視のため作業はややゆっくりで、読み終えた本は安全に棚へ戻して管理
RDBMSの長所と短所
長所
- データを安全・正確に扱える
- 複雑な条件での検索や集計に強い
短所
- 超高速が必要な処理は苦手
- 大量アクセスに合わせた拡張が難しいことがある
Redisの仕組みのイメージ
机の上によく使うページのコピーや要点メモをおいておき、すぐに手に取って読めるのがRedisのイメージ。
あなたは取り出しや更新を高速に行えるが、著者を跨ぐような横断検索は苦手。おける量には限りがあり、古いメモは期限や自動整理で消えることがある。
Redisの長所と短所
長所
- 読み書きが超高速
- 期限付きの一時保存が得意
短所
- 容量に制約があり、大量・長期保管には不向き
- 複雑な検索は苦手
Redisが速い理由
上記のイメージをコンピュータの世界で考える。
コンピュータの世界では、一時的な保存・参照を行う机のようなものをメモリと言う。また、本棚のように大容量・長期に保存できる場所はストレージと言う。
メモリ上にあるものは電源が切れると消えるため、Redisは停止時にデータを失う可能性がある。必要であれば、データをストレージに書き出し、再起動時に復元する。
インメモリデータベース
Redisのようにメモリの上でデータを管理するデータベースをインメモリデータベースという。メモリはストレージより桁違いに早く、超速で読み書きできる。
結論
速さ = (メモリ上で処理) × (単純・用途特化の操作)
Redisの仕組み
Redisのデータベース構造
IDを指定して複数のDBを持つことが可能。各DBは独立してキーと値を保持できる。
Redis Clusterとは
上記のように複数台でデータを分散させ、データを保持することをシャーディングと呼び、シャーディングを管理するのがRedis Cluster。
同じデータは複数台では持たない。
slotとは
Redis clusterの実際の処理は、データそれぞれにslotと呼ばれるidのようなものを設定し、それぞれ管理するデータベースを分ける。
各slotは特定のノードが担当
例
- slot0 ~ 5460 → node1
- slot5461 ~ 10922 → node2
- slot10923 ~ 16383 → node3
クライアントはノードにコマンドを送る。担当外ならノードが「正しいノード」を教え、苦8ライアントはそこへ転送(以後は直接そのノードに送る)
リシャーディング
データが増えてくるとサーバーを増やすことで対応することができる。データの分割(シャード)の担当を別ノードへ移し替えて、容量や負荷の偏りを修正することをリーシャーディングという。
Redisの型
Redisには5つのデータの型が存在する。
文字列型
もっとも基本の型。キー1つに対してバイト列1つを保存できる。テキスト・数値・バイナリを扱える。
※バイナリ:0と1で表す「2進数」のこと。
登録例
> SET key "hello"
リスト型
文字列型の配列。先頭または末尾に値の追加が可能。リスト長をキャッシュして、高速に取得可能。
登録例
> RPUSH mylist "a" "b" "c"
セット型
文字列型の順不同の集合。同じ値を重複して登録することはできない。2つのセットに集合演算が使用できる。
登録例
> SADD myset "a" "b" "c"
ソート済みセット型
文字列型の集合。「スコア」の値でソートされた順いを持っている。同じメンバを重複して登録することはできない。スコアの値、順位で範囲検索が可能。
登録例
> ZADD myzset "a" "b" "c"
ハッシュ型
順番がない文字列型のフィールドと値のマップ。フィールド値での検索が可能。値を指定しての検索は不可能。
使用例
> HSET myhash "field1" "value1" "field2" "value2"
その他のRedis機能
TTL(Time To Live)
データを自動的に削除する機能。
メモリの容量を削減するためのもので、有効期限を何秒後かに設定する方法と有効期限を日付で指定する方法の2種類がある。
バックアップ機能
基本的にはメモリの上でデータを管理するが、バックアップを作成し、メモリ外に保存することも可能。
保存の方法は2種類存在する。
秒数指定・回数指定で保存
保存のタイミングを「秒数ごとに、または何回変更された時に、.rdbファイルとして保存」と指定する方法。
.rdbファイルはRedis起動時に自動的に立ち上がるようになっている。
更新ごとに保存(AOF方式)
データベースの更新ごとにバックアップを作成するもの。
# AOF方式の保存を有効化
appendonly yes
# 常に更新されたら保存
appendfsync always
まとめ
- Redisはメモリへ保存するデータベースで高速な処理が可能
- RDBMSとの違いは、速度
- 複数台のサーバーでデータを分散管理することをシャーディングと呼ぶ
- シャーディングはClusterを管理する
- 5種類のデータ型が存在
Discussion