Redis vs Memcached: どちらのインメモリストアを選ぶ?
Redisは永続化とレプリケーションを備えた多用途なインメモリのデータ構造ストアであり、Memcachedはシンプルな文字列キャッシュのための無駄のないマルチスレッドのkey-valueキャッシュです。
Redisは豊富な型(リスト、セット、ソート済みセット、ハッシュ、ストリーム)、オプションの永続化、pub/sub、レプリケーションをサポートし、キャッシュ、キュー、軽量なデータベースとして機能します。Memcachedは1つのことをうまくこなします。小さなblobや文字列のための高速でマルチスレッドの分散キャッシュで、よりシンプルなメモリ管理を備えています。Redisは機能と耐久性で勝り、Memcachedは純粋なキャッシュにおける生のマルチスレッドthroughputでわずかに上回ることがあります。
| Redis | Memcached | |
|---|---|---|
| データ型 | 多数(リスト、セットなど) | 文字列のみ |
| 永続化 | RDB / AOF | なし(揮発性) |
| スレッディング | 主にシングルスレッド | マルチスレッド |
| 追加機能 | Pub/sub、ストリーム、Lua | 純粋なキャッシュ |
| 最適な用途 | キャッシュ + データ構造 | シンプルで大量のキャッシュ |
ユースケースとパフォーマンス
大きく高速で水平スケールする文字列キャッシュだけが必要で、node当たりのマルチスレッドthroughputが欲しい場合はMemcachedを選びます。データ構造、アトミック操作、永続化、pub/subが必要な場合はRedisを選びます。Redisはキャッシュ、キュー、rate limiterを兼ねることができ、可動部品の数を減らせます。
CIとdeployにおいて
どちらもservice containerとして簡単に起動でき、統合テストに使えます。テストはデータ構造を扱うことが多いためRedisがより一般的ですが、Memcachedのセットアップはさらにシンプルです。どちらもマネージドrunner上でCIサービスとして問題なく動作し、より高速なrunnerはcontainerの起動とテスト実行を短縮します。
結論
単純で高throughputな文字列キャッシュだけが必要なら、Memcachedは無駄がなくシンプルです。データ構造、永続化、pub/sub、あるいはキャッシュとキューを兼ねる単一の仕組みが必要なら、Redisです。ほとんどの新しいシステムはその多用途性からRedisをデフォルトにし、大規模な純粋キャッシュの場合にのみMemcachedを選びます。