キャッシュするデータに関しては、MemcachedやRedisを使う場合が多いかと思います。そこで今回は、MemcachedとRedisの違いについて調べたので、その内容を記事にまとめました。
Memcachedとは?
Memcachedとは、分散型メモリキャッシュシステムを構築することができるキャッシュサーバで、データやオブジェクトをメモリ内にキャッシュさせることで、DBから読み出しをする回数を減少させることができます。
Memcachedの歴史としては、LiveJournalというサービスを運営していた、Danga Interactiveによって開発されました。
プログラミング言語としては、C言語で書かれています。
Redisとは?
Redisとは、インメモリベースのNoSQLで、高速にデータの保存や読み出しなどを行うことができます。
Redisの歴史としては、2009年にSalvatore Sanfilippoという、イタリアのエンジニアによって開発されました。
プログラミング言語としてはC言語で書かれています。
MemcachedとRedisの共通点
MemcachedとRedisの共通点としては以下が挙げられます。
- OSS
- Key-Value型のNoSQL
- 複数のノードにデータを分散することが可能
- 多くのプログラミング言語やプロトコルをサポートしている
- データをメモリ内に読み込むので、高速なデータアクセスを実現している
MemcachedとRedisは、共にOSSで、以下がそれぞれのリポジトリです。
MemcachedとRedisの違い
ここからは、本題である「MemcachedとRedisの違い」について紹介していきます。
- Memcachedはマルチスレッドで、Redisはシングルスレッド
- Memcachedはシンプルなデータ構造、Redisは複雑なデータ構造
- Memcachedはデータ永続化不可能、Redisはデータ永続化可能
- Memcachedはレプリケーションを行えないが、Redisはレプリケーションを行える
Memcachedはマルチスレッドで、Redisはシングルスレッド
Memcachedは、マルチスレッドで複数の処理を並列で行うことが可能ですが、Redisは、シングルスレッドのため、複数の処理を並列で行うことができません。
※ 「Redis 6.0」からはマルチスレッド処理が導入されています
Memcachedはシンプルなデータ構造、Redisは複雑なデータ構造
Memcachedは、シンプルなデータ(String型)しか格納することができませんが、Redisは、String型だけでなく、Hash型やList型、Set型、Sorted Set型など豊富なデータ型を扱うことができます。
なので、複雑なデータ構造の保持を行う場合はRedisが良いかと思います。
Memcachedはデータ永続化不可能、Redisはデータ永続化可能
Memcachedは、データを永続化する手段を持っていないですが、Redisは、データを永続化することができます。
データを永続化する方法としては、RDBもしくはAOFを利用する方法が挙げられます。
Memcachedはレプリケーションを行えないが、Redisはレプリケーションを行える
Memcachedでは、データのレプリケーションを行うことができませんが、Redisではデータのレプリケーションを行うことができます。
そのため、Memcachedでは、特定のノードに対して一時的にネットワーク障害が起こった場合などにデータの不整合が発生する可能性があります。
MemcachedとRedisの使い分け
MemcachedやRedisに関しては、一般的にデータベースのクエリ結果のキャッシュであったり、認証情報やセッション状態などのセッション情報を管理するために使用されることが多いかと思います。
そこで、MemcachedとRedisをどう使い分ければ良いかに関してですが、個人的な考えとしては、シンプルなデータ構造でメモリの使用効率から考えると、Memcachedが優れているかなと思いますが、Redisの方が、レプリケーションやデータ永続化などの機能も豊富なので、Redisを選択するケースが多いのかなと思っています。
コメント