memcached
複雑な計算の整数結果を格納するために使用します。キャッシュできる数百の整数オブジェクトがあります! より複雑なオブジェクトの単一のキーの下にそれらをキャッシュする必要がありますか?それとも、オブジェクトに何百もの異なるキーを使用する必要がありますか? (私がキャッシュしているオブジェクトは、1 日に複数回無効にする必要はありません)
6 に答える
小さな鍵がたくさんあると思います。このようにして、最小限のシリアル化作業で 1 回の呼び出しで必要な正確な結果を得ることができます。
別のオブジェクト (配列など) に格納する場合は、キャッシュから配列をフェッチしてから、実際に必要なアイテムをその配列から再度フェッチする必要があります。また、複雑なオブジェクト全体を再度シリアル化/逆シリアル化するオーバーヘッドがあります。選択した言語によっては、シリアライゼーション/デシリアライゼーション関数をゼロから手動で作成することを意味する場合があります。
私はhttp://dammit.lt/2008/12/25/memcached-for-small-objects/でやや大規模な分析を書きました- それは小さなオブジェクトストレージのためにmemcachedを最適化する方法を概説しています - それは問題にかなりの光を当てるかもしれません.
アプリケーションによって異なります。memcached は非常に高速ですが、リクエストの送信とリクエストごとのメモリ ルックアップにある程度の時間が必要です。これらの数は、サーバーがローカル マシン (localhost) 上にあるか、ローカル ネットワーク上にあるか、または広域にあるかに応じて増加します。通常、キャッシュのサイズは検索速度に影響しません。
したがって、アプリケーションが処理単位 (リクエスト、メソッド、または何を持っているか) ごとに多数のオブジェクトを使用している場合は、一般に、キャッシュへのヒットの総数を減らす方法でキャッシュを定義することをお勧めします。キャッシュデータを複製しないように努めています。他のすべてと同様に、それはバランスです。
つまり、ブログ投稿のリストを取得する Web リクエストがある場合、オブジェクト リスト全体を 1 つの memcached キーとしてキャッシュする方が有益です (これは明らかに悪い例ですが) キャッシュ キーの配列をキャッシュするよりもそのリストは、個別に memcached オブジェクトに関連しています。
値を個別に格納し、ある種のヘルパークラスを使用して、multigetで値を取得し、複雑なデータオブジェクトを生成する必要があると思います。
キャッシュされた値の処理が少ないほど、より良い結果が得られます。それでは、それらを個別にキャッシュにダンプしてみませんか?
それはそれらの数字が何であるかによって異なります。たとえば、それらを範囲でグループ化できれば、ストレージを最適化できます。それらをマップまたはハッシュテーブルにハッシュして、そのマップを memcached でシリアル化して保存できる場合は、良いでしょう。
とにかく、多くの小さなキーを保存できます。スラブが小さなサイズのチャンクを持つように構成して、メモリ スペースを無駄にしないようにしてください。