22

私はこれまでキャッシングに Dali を使用してきましたが、今日Redis -Store出会いました。

redisstore に切り替えるべきか迷っています。私のアプリはすでに特定のものに redis を使用しているため、(リソースに関して) 非常に大きな redis サーバーがあり、別の memcached サーバーもあります。したがって、どこで redis-store に切り替えるかは、memcached サーバーを削除できることを意味します (維持するサーバーが少なくなり、コストが少なくなります)。

これら2つのソリューションを比較した人はいますか。

  1. パフォーマンス
  2. ドロップイン交換ですか (コードを変更せずにこれら 2 つをいつでも切り替えることができますか)
  3. 私が知っておくべきその他のこと。
4

1 に答える 1

23

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 を超えて成長し始めた瞬間に、両方を使用することをお勧めします。

于 2013-11-26T11:38:17.730 に答える