Redis はキャッシュまたは永続ストアとして使用できますが、両方を混在させようとすると、「興味深い問題」が発生する可能性があります。
memcached を使用すると、プロセス用のメモリが最大量になるため、memcached がいっぱいになると、最近使用されていないエントリが自動的に削除され、新しいエントリ用のスペースが確保されます。
Redis がその動作をするように構成することもできますが、Redis を永続的なストレージに使用している場合は、永続的なキーを失う可能性があるため、そうしたくないでしょう。
したがって、Redis に永続ストレージを使用している場合は、2 つの異なる Redis プロセスが必要になります。1 つは永続キー用、もう 1 つはキャッシュ用です。もちろん、プロセスを常に 1 つだけにして、すべてのキャッシュ項目に有効期限を設定することもできますが、有効期限が切れてデータが失われる前にメモリ制限に達しないことを保証する人は誰もいないため、実際には 2 つのプロセスが必要になります。さらに、永続データのマスター/スレーブ構成を設定していて、キャッシュを同じサーバーに保存する場合、基本的に RAM を浪費しているため、別のプロセスを使用することをお勧めします。
パフォーマンスについては、redis と memcached の両方が非常にパフォーマンスが高く、異なるテストでは、データの取得/抽出に関しては同じ範囲にありますが、キャッシュのみが必要な場合は memcached の方が優れています。
これはなぜですか?まず第一に、memcached にはキーと値の保存という 1 つのミッションしかないため、メタデータの保存に関してオーバーヘッドはありません。一方、Redis はさまざまなデータ構造を提供するため、各キーにより多くのメタデータを格納します。この一例: 個々のキーを使用する代わりに、Redis のハッシュにデータを格納する方がはるかに「安価」です。データの種類は 1 つしかないため、memcached ではこれを取得できません。これは、サーバーに同じ量のメモリを使用して、redis よりも memcached に多くのデータを保存できることを意味します。インストールが比較的小規模な場合は特に気にする必要はありませんが、成長が見られるようになった瞬間に、これらのデータを管理したいと考えるようになると思います。
したがって、私は Redis が好きですが、キャッシングのニーズには memcached を、永続ストレージ/一時ストレージ/キューのニーズには redis を使用することを好みます。私は今でも redis を「キャッシュ」として使用していますが、有効期限のある一時的なものではなく、より高価なストレージからの読み取りを保存するためのルックアップ キャッシュとして使用しています。たとえば、Redis ではユーザー ID とニックネームの間のマッピングを維持しています。これらのマッピングを期限切れにすることはないので、Redis は最適な場所です。
少量のデータを扱っている場合、すべてに単一のテクノロジーを使用するという考えは理にかなっているかもしれませんが、数百 MB を超えて成長し始めた瞬間に、両方を使用することをお勧めします。