🐈

Redisの基本概念についてまとめてみる

2023/01/05に公開

概要

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のおかげで、データのシャーディング(データを分散し、保持する事)が可能です。

redis.drawio

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