はじめに
SAAの勉強をしていると避けては通れないElasticCache。
ハンズオン学習にはちょっと敷居が高い……!
それはまあいいんですけど、困ってしまうのは「 RedisとMemcachedのどちらを選択すればいいですか?」系の問題が出題されたときです。
結局RedisとMemcachedってなにが違うんだ!!!
なにが違うんだ!!!(2回目)
という自覚がAWS公式の方にあるのかは知りませんが、解説が提供されています。
公式の記事を読み込めば済む話ではあるのですが、勉強がてらRedisとMemcachedについて纏めてみます。
ElasticCacheとは
本題の前に、ElasticCacheのおさらいです。
ElasticCacheを一言で言えば、AWSの提供するインメモリデータストアです。
すべてのデータは**メインメモリ(主記憶装置)**にのみ保存および管理されます。
メインメモリに直接保存されるため、データの参照時にディスクにアクセスする必要がありません。補助記憶装置(HDD、SSD)に保存されるEBSやRDSと比べて、高速な書き込み、読み込みが可能です。
最小限の応答時間で済む一方で、インメモリであるがゆえの欠点も存在します。
・障害時にデータが失われてしまう恐れがある。
・トランザクション機能がないため、データに完全性がない。
従って用途も限られます。
公式によれば、ゲームリーダーボード、キャッシュなどに推奨されるようです。ElasticCacheという名称が示す通り、キャッシュに適したサービスということですね。
まとめておくと、
短長 | 内容 |
---|---|
メリット | 低レイテンシーかつマイクロ秒単位の読み書きが可能。 |
デメリット | 障害時にデータが失われてしまう恐れがある。トランザクション機能がないため、データに完全性がない。 |
Redis vs Memcached
ElastiCache は、Redis と Memcached どちらかを選択することができます。
ポイントですが、Redis と MemcachedというのはAWS独自に開発されたデータストアではありません。サードパーティーの人気のあるオープンソースを、ElasticCache向きに使用しています。
RDSでmysqlやPostgreSQLを利用するのと似たような感覚ですね。
念のため、本記事はあくまでAWSにおけるRedisとMemcachedについての解説です。
どちらもインメモリなので、RDBMSと比べて高速という点は同様なのですが、それぞれに特徴があります。
以下、それぞれざっくり纏めてみます。
Redis
"リモートディクショナリサーバー"の略です。
メモリ内key-value型のデータストア(NoSQL)であることが特徴です。
NoSQL × インメモリって、最早速さに関しては向かうところ敵なしでは……?
実際非常に高速なインメモリデータストアで、インターネット規模のリアルタイムアプリケーションを強化することができます。
他にもRedisにはできて、Memcachedにはできない機能が多数あります。
Redisにできること(Memcachedにはできないこと)
・データ構造の選択
・スナップショット
・レプリケーション
・クラスタリング構成
・ディスクストレージへのデータの書き出し(バックアップ)
・トランザクション
・Pub/Subメッセージング
・Lua スクリプト
・大規模なリアルタイムの地理空間データを処理するための専用コマンド。
・SSL通信機能による暗号化
MemcachedにもMemcachedにしかできないことがありますよ(震え声)。
高速性と多様性が特徴のRedisは、
ゲーム、eコマース、医療、金融サービス、IoT などのリアルタイム性の求められるアプリケーションに適しています。
Memcached
メモリ上で、キーバリュー型揮発性キャッシュとして動作しています(AWS内部でどうなっているのかは、正直分かりません)。
マルチスレッドであるため複数の処理コアを使用できるのが特徴です。コンピューティング性能のスケールアップにより、多くの操作を処理できることを意味します。
ちなみに、マルチスレッドはRedisには無い機能です。
複数のコアを利用できる分、大きなデータセットに対してはRedisよりも優れたパフォーマンスを発揮できます。
スケーラブルで安全性に優れているのが特徴のMemcachedは、
ウェブ、モバイルアプリケーション、ゲーム、などの、頻繁にアクセスされるデータをメモリ内に置く必要が場合に適しています。
まとめ
名称 | ユースケース |
---|---|
Redis | バックアップを始め、様々な機能が欲しい場合はこちら |
Memcached | マルチスレッドが必要な場合はこちら |
どっちがいいのかは、正直分からないです。
調べれば調べるほどRedisとMemcachedの違いに頭は悩まされるはめになりました。
ユースケースによって最適なものは変わるよね、としか。
とはいえ、試験で出た場合は予め用意された答えを当てにいかなければなりません。
試験対策としては、こちらを参考にしてみてください。
おわりに
悩ましいです。
奥が深いというか見えない話題なので、折りを見て更に調べてみようと思います。
参考
Redis作者自身によるRedisとMemcachedの比較
Redisとmemcachedを比較
ElastiCacheはMemcachedとRedisのどっちを選ぶ?