Redisの基本概念についてまとめてみる
概要
Railsアプリケーションで、Websocket通信を実装しようと考えた場合、組み込みのActionCableを使う選択肢が挙げられると思います。私も個人で作成してるRailsアプリケーションにチャット機能を追加した際に、ActionCableを使用する機会がありました。RailsのAction Cableを本番環境で使用する際には、Redis使用が推奨されています。Redisの概要についてこの記事で扱おうと思います。
目次
- 要点
- ユースケース
- redisの特徴
- まとめ
- 参考
要点
1.RedisとはRemote dlectionary serverの略である。
2.Key-Value型のNoSQLデータベースである。
- NoSQLデータベースとは?
NoSQL データベースは、柔軟でスケーラブル、高性能かつ高機能なデータベースを必要とするモバイル、ウェブ、ゲームなどの最新のアプリケーションに最適で、優れたユーザーエクスペリエンスを実現します。
①柔軟性: NoSQL データベースは、一般的に、より迅速で反復的な開発を可能にする柔軟なスキーマを提供します。NoSQL データベースの柔軟なデータモデルは、半構造化データおよび非構造化データに最適です。
②スケーラビリティ: NoSQL データベースは通常、高価で堅牢なサーバーを追加することによってスケールアップするのではなく、分散したハードウェアクラスターを使用してスケールアウトするように設計されています。一部のクラウドプロバイダーは、これらの操作を完全マネージド型サービスとしてバックグラウンドで処理します。
③高性能: NoSQL データベースは、特定のデータモデルと、リレーショナルデータベースと同様の機能を実現しようとするよりも高いパフォーマンスを実現できるアクセスパターンに最適化されています。
④高機能: NoSQL データベースは、それぞれのデータモデルごとに専用に設計された機能性に優れた API とデータ型を提供します。
柔軟なスキーマ定義を持つため、データの構造を事前に定義しなくともJSONドキュメントなどの形式でデータを直接保存などが出来る点が、一番リレーショナルデータベースとの違いでわかりやすいポイントかと思います。リレーショナルデータベースは、表形式で正規化されたデータベースですが、NoSQLデータベースでは、テーブル構造を定義しないでデータを格納する事が出来ます。
- NoSQLデータベースのデータモデル4種類
① キーバリュー(Key-Value)型
キーとバリューのみのシンプルな組み合わせのモデル
② カラム指向型
キーバリュー型にカラムの概念をもたせたモデル
③ ドキュメント指向型
JSONやXML形式で記述されたドキュメントの形で管理するモデル
④ グラフ指向型
データとデータ間のつながりを管理するモデル
この記事で扱うRedisは、① キーバリュー(Key-Value)型でデータを格納するNoSQLデータベースになります。
3.C言語で書かれている。Open sourcesである。
4.インメモリデータベースである。
Redisは、すべてのデータをコンピュータのメインメモリ上に展開しながら動作するので、インメモリデータベースに分類されます。MySQLなどは、ディスク型データベースと呼ばれます。
ユースケース
Redisは、インメモリでデータのやりとりが行われるので、処理速度が速さが特に要求されるサービスに向いています。例えば、チャット機能におけるセッションストア,リアルタイム分析、ゲームスコアデータの処理などが挙げられます。
Redisの特徴
1.シングルスレッド処理
並列処理は出来ません。同期処理は常に排他的になります。
2.複数のDBをIDで指定し、接続する事が出来る
Redisでは、最大16のDBを起動できます。
デフォルトでは、Redisは0番のデータベースを利用します。
databases 10 使用DB数の指定。
3.保存出来るデータの種類
1.string型
2.hash型
3.list
4.set 型
5.sorted set型
4.バックアップの方法
A.スナップショット
データベースの内容をディスク(dump.rdbというバイナリファイル)に保存します。ログ出力の事です。
/etc/redis/redis.conf
m(秒数) f(データ更新の頻度)
save 900 1
save 300 10
save 60 10000
B.AOF(Append Only File)
ディスクへの保存設定
/etc/redis/redis.conf
appendonly yes
# appendfsync always # AOFへ常に同期的に書き込む
appendfsync everysec # AOFへ1秒毎に同期的に書き込む
# appendfsync no
5.Redis cluster
複数のredisインスタンス(ノード)間をクラスタリングし、任意のデータが、どのノードにあるか管理してくれる機能です。
このRedis clusterのおかげで、データのシャーディング(データを分散し、保持する事)が可能です。
1.Master node
読み書きが出来るノード
2.Slave node
読み込み専用ノード
3.Shard
2つのノードは、Shard単位でレプリケーション(データの複製)が行われます。
MasterとSlaveは1対多の関係を持つ事が出来ます。この機能により、Masterに問題が生じた時、SlaveにあるデータがMasterに昇格しデータは保持されます。この機能は、自動フェイルオーバーと言います。
まとめ
まとめるとRedisは
・インメモリなので処理が早い。
・豊富なデータ型が保存出来るので、柔軟でデータ設計が可能。
・clusterで冗長処理が出来る。
・設定が簡単。
参考
Redis Official
Amazon ElastiCache
NoSQLについて勉強する。
[入門] Redis
[実演]Redis Clusterの仕組みを完全に理解する
Discussion