1. クイック概要
項目 | Redis | Memcached |
---|---|---|
種類 | インメモリデータストア(豊富なデータ型) | シンプルなインメモリキー・バリュー |
スレッドモデル | シングルスレッド | マルチスレッド |
データ型 | 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
長所
- 豊富なデータ型:リスト、セット、ハッシュ、ソートセット、ストリームなど、キャッシュ、リーダーボード、キューなど多様な用途に適応。
- 永続化:RDBスナップショットとAOFログによりデータの耐久性を確保。
- 高可用性:レプリカ、Sentinelによる自動フェイルオーバー、クラスタによるシャーディングをサポート。
- Pub/Sub & Streams:ネイティブなメッセージングおよびストリーミング機能。
- Luaスクリプト&トランザクション:複数コマンドのアトミック処理、ネットワーク往復の削減。
短所
- シングルスレッド:1インスタンスあたり1コアしか使わないため、並列処理が制限される。
- メモリオーバーヘッド:豊富なデータ型はMemcachedより多くのRAMを消費。
- 運用の複雑さ:多機能ゆえに設定と監視が必要。
Memcached
長所
- シンプル&軽量:キー・バリューのみ、フットプリントが小さく展開が簡単。
- マルチスレッド:利用可能な全コアを利用して高スループットを実現。
- メモリ効率:アイテムあたりのオーバーヘッドが非常に低く、純粋なキャッシュ用途に最適。
- 成熟したエコシステム:多数のクライアントライブラリ、プラグイン、モジュールが存在。
短所
- 永続化なし:再起動時にキャッシュが消失。
- データモデルが単純:キー・バリューのみ。
- 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
redis-cli info
で統計情報やレプリケーション状況を確認。- スケーリング
- レプリカ:読み取りスケールアウト用にレプリカを追加。
- Sentinel:自動フェイルオーバーとHAを設定。
- クラスタ:複数ノード間で自動シャーディング。
5. 選択の目安
ユースケース | Redis を選ぶ | Memcached を選ぶ |
---|---|---|
単純なキー・バリューキャッシュのみ | ❌ | ✔ |
多コアを使った極限スループット | ❌ | ✔ |
複雑なデータ型(キュー、ソートセット等)が必要 | ✔ | ❌ |
再起動後の永続化が必要 | ✔ | ❌ |
ネイティブなPub/Subやメッセージングが必要 | ✔ | ❌ |
自動フェイルオーバー&高可用性が必要 | ✔ (Sentinel/Cluster) | ❌ (外部管理が必要) |
設定や運用を最小限にしたい | ❌ | ✔ |
結論
- アプリケーションがシンプルなインメモリキャッシュを高速に利用したいだけで、永続化や高度なデータ型が不要であれば Memcached を選択してください。
- 豊富なデータ型、耐久性、レプリケーション/HA、Pub/Sub、スクリプト機能が必要な場合や、クラスタを用いた拡張を検討している場合は Redis が最適です。
Bài Viết Liên Quan
W3 Total Cacheの完全紹介
WP Super Cacheの紹介
LiteSpeed Cacheの紹介 – メリットとデメリット
WordPressに適したキャッシュ「WP Rocket」の紹介
Memcached と Redis キャッシュのどちらを使用すればよいですか?
Memcached キャッシュ ウェブサイトで Memcached を使用するタイミング
Bài Viết Cùng thể loại
W3 Total Cacheの完全紹介
WP Super Cacheの紹介
LiteSpeed Cacheの紹介 – メリットとデメリット
WordPressに適したキャッシュ「WP Rocket」の紹介
Memcached と Redis キャッシュのどちらを使用すればよいですか?
Memcached キャッシュ ウェブサイトで Memcached を使用するタイミング