Laravel8ではLaravel Sail
を利用してインストールしていればデフォルトでDockerコンテナに入っています。
職場の先輩方が「Redisで保存するのかDBに保存するのか」みたいな会話をしており、何が違うのかイマイチわかっていなかったので調べてみました。
はっきりと理解できていないので間違いなどありましたらご指摘頂けると幸いです。
Redis
Laravel8の日本語翻訳ページ(非公式)には以下のように記載がありました。
https://readouble.com/laravel/8.x/ja/redis.html
Redisは、オープンソースの高度なキー/値保存域です。
文字列, ハッシュ, リスト, セット, and ソート済みセット.を含めることができるため、データ構造サーバと呼ばれることがあります。
キーバリューストア型なんですねー。
Redisの公式ページには以下のように記載がありました。(Google翻訳ですみません)
https://redis.io/
Redisは、オープンソース(BSDライセンス)のメモリ内データ構造ストアであり、データベース、キャッシュ、およびメッセージブローカーとして使用されます。Redisは、文字列、ハッシュ、リスト、セット、範囲クエリを含む並べ替えられたセット、ビットマップ、ハイパーログログ、地理空間インデックス、ストリームなどのデータ構造を提供します。Redisには、組み込みのレプリケーション、Luaスクリプト、LRUエビクション、トランザクション、およびさまざまなレベルのオンディスク永続性があり、RedisSentinelおよびRedisクラスターによる自動パーティショニングを介して高可用性を提供します。
うん。全然分からん。
メモリの中に保存されるってことは分かりました。
では、そんなにたくさんは保存できないのかな?と。
特徴
色々な記事を参考にさせて頂き、分かった特徴は以下です。
①データ型
- string
- hash
- list
- set
- sorted set
②非リレーショナルデータベース(NoSQL)なので、ビックデータに強く高速な処理が期待できる。
何故非リレーショナルデータベースだと処理が高速なのかというと、リレーショナルデータベースって同時に書き換えとかできなかったり、処理が最後までうまくいって初めて完了するようになっているからなのかなと。
例えば以前Qiitaでも書いたのですが、ATMで振り込みしてる途中にサーバーが落ちて振り込み処理はしたけど相手には振り込みされていないみたいなことになったら大変なので、処理はひとかたまりで完了するようになっている。
と、いうことは例えわずかでも処理待ちみたいな感じになるので、扱うデータによってはパフォーマンスが落ちるということになるのかなと。
と、いうことはつまりデータの消失が絶対許されない場面では使えないのですね。
なるほど。
利用用途
具体的にどういう場面で使うのがいいのだろうと色々な記事を見てみました。
①キャッシュ用途
RDBMSのキャッシュ用途として使われることが多いみたいです。
RDBMSの代わりに使うというよりも追加で使うっていう感じなんですね。
②ページの訪問回数
確かにたくさんの人が訪問するページでRDBMSで回数を取得しようとしていたら、ロックかかりすぎてパフォーマンスやばそうですね。ここはRedisの良さを十分発揮できそうです。
③いいねの数
確かにインフルエンサーなんてすごい数のいいねを押されるからそこの処理が遅延していたら大変な気がします。
なるほど。
利用用途はなんとなく分かりました。