Redis CacheとMemcached Cacheの詳細な比較

memcached vs redis

1. クイック概要

項目RedisMemcached
種類インメモリデータストア(豊富なデータ型)シンプルなインメモリキー・バリュー
スレッドモデルシングルスレッドマルチスレッド
データ型Strings, Lists, Sets, Hashes, Sorted Sets…キー・バリューのみ(バイナリセーフ)
永続化あり(RDB/AOF)なし(RAMのみ)
レプリケーション/クラスタレプリカ・クラスタ・シャーディング対応手動シャーディングのみ
Pub/Sub, Luaありなし

2. パフォーマンス

  • Memcached
    • マルチスレッドで複数コアを活用し、GET/SETのスループットが非常に高い。
    • レイテンシ: 標準ワークロードで約0.1–0.5 ms。
  • Redis
    • シングルスレッドだが高度に最適化され、パイプラインやI/Oマルチプレクシングでコンシューマ向けハードウェア上で100 000 ops/sec以上を達成可能。
    • パイプラインによるラウンドトリップ削減、Luaスクリプトによるバッチ処理をサポート。

直接比較すると、シンプルなGET/SETのみの場合はMemcachedが数%ほど高いスループットを示す場合がありますが、パイプラインやバッチ処理、高度なデータ型を利用する際にはRedisが優位になります。


3. 長所と短所

Redis

長所

  1. 豊富なデータ型:リスト、セット、ハッシュ、ソートセット、ストリームなど、キャッシュ、リーダーボード、キューなど多様な用途に適応。
  2. 永続化:RDBスナップショットとAOFログによりデータの耐久性を確保。
  3. 高可用性:レプリカ、Sentinelによる自動フェイルオーバー、クラスタによるシャーディングをサポート。
  4. Pub/Sub & Streams:ネイティブなメッセージングおよびストリーミング機能。
  5. Luaスクリプト&トランザクション:複数コマンドのアトミック処理、ネットワーク往復の削減。

短所

  1. シングルスレッド:1インスタンスあたり1コアしか使わないため、並列処理が制限される。
  2. メモリオーバーヘッド:豊富なデータ型はMemcachedより多くのRAMを消費。
  3. 運用の複雑さ:多機能ゆえに設定と監視が必要。

Memcached

長所

  1. シンプル&軽量:キー・バリューのみ、フットプリントが小さく展開が簡単。
  2. マルチスレッド:利用可能な全コアを利用して高スループットを実現。
  3. メモリ効率:アイテムあたりのオーバーヘッドが非常に低く、純粋なキャッシュ用途に最適。
  4. 成熟したエコシステム:多数のクライアントライブラリ、プラグイン、モジュールが存在。

短所

  1. 永続化なし:再起動時にキャッシュが消失。
  2. データモデルが単純:キー・バリューのみ。
  3. HA機能なし:シャーディングやフェイルオーバーを外部で管理する必要あり。

4. 基本的な導入手順

Memcached の導入

インストール

sudo apt-get update
sudo apt-get install memcached

設定 (/etc/memcached.conf)

  • -m: メモリ(MB)
  • -p: ポート(デフォルト11211)
  • -u: 実行ユーザー
  • -t: スレッド数

起動&監視

systemctl enable memcached
systemctl start memcached

memcached-toolやtelnetでstatsコマンドを使い監視。

シャーディング:クライアントサイドシャーディングまたはTwemproxyなどプロキシを使用。

Redis の導入

インストール

sudo apt-get update
sudo apt-get install redis-server

設定 (/etc/redis/redis.conf)

  • maxmemory & maxmemory-policy
  • 永続化設定:save(RDB)、appendonly yes(AOF)
  • レプリケーション:replicaof host port
  • クラスタ設定(必要に応じて)

起動&監視

systemctl enable redis-server 

systemctl start redis-server
  1. redis-cli infoで統計情報やレプリケーション状況を確認。
  2. スケーリング
    • レプリカ:読み取りスケールアウト用にレプリカを追加。
    • Sentinel:自動フェイルオーバーとHAを設定。
    • クラスタ:複数ノード間で自動シャーディング。

5. 選択の目安

ユースケースRedis を選ぶMemcached を選ぶ
単純なキー・バリューキャッシュのみ
多コアを使った極限スループット
複雑なデータ型(キュー、ソートセット等)が必要
再起動後の永続化が必要
ネイティブなPub/Subやメッセージングが必要
自動フェイルオーバー&高可用性が必要✔ (Sentinel/Cluster)❌ (外部管理が必要)
設定や運用を最小限にしたい

結論

  • アプリケーションがシンプルなインメモリキャッシュを高速に利用したいだけで、永続化や高度なデータ型が不要であれば Memcached を選択してください。
  • 豊富なデータ型、耐久性、レプリケーション/HA、Pub/Sub、スクリプト機能が必要な場合や、クラスタを用いた拡張を検討している場合は Redis が最適です。