2011-08-28 10 views
5

ここにシナリオがあります:memcachedキャッシュを照会するシンプルなWebサイト。同じキャッシュは、10〜15分ごとにバッチ・ジョブによって更新されます。このパターンでは、間違っている可能性のあるもの(キャッシュミスなど)がありますか?Memcached - GET操作とSET操作はアトミックですか?

私は起こりうるすべてのレースの状態に懸念しています。たとえば、ウェブサイトがmemcachedにキャッシュされたオブジェクトに対してGET操作を実行し、同じオブジェクトがバッチジョブによって上書きされた場合、どうなりますか?

答えて

6

私の最初の本能は、副作用(競合状態による古いデータの可能性を除く)なしでmemcachedキャッシュから読み書きすることができるということでした。 memcachedののよくある質問に

は、原子memcachedをされていますか?はい、すべての コマンドは内部的に原子的です。同時に複数のセットを発行する は、 が残っている最後のものを除いて、悪影響はありません。

キャッシュミスが可能かどうかをアドバイスすることはできませんが、データを検索するための第1層であることを一般化しています唯一の層。私はまだあなたのキャッシュミスのすべてを処理するために、キャッシュの後ろにデータベースや他のソースを持っています。

2

ここにシナリオがあります:memcachedキャッシュを照会するシンプルなWebサイト。同じキャッシュは、10〜15分ごとにバッチ・ジョブによって更新されます。このパターンでは、間違っている可能性のあるもの(キャッシュミスなど)がありますか?

はそれに格納されたデータは常にキャッシュに保持されることを保証するものではありませんmemcachedを覚えておいてください( 例えば、それはキャッシュではなくデータベースです)。他のデータにmemcachedを使用している場合、バッチジョブを再挿入する前に、このクエリの結果がキャッシュから削除される可能性があります。

2

データを受け取った場合は、保存した最新の正しいデータになります。

更新の半分を受け取ることはありません。したがって、その観点から見ると、アトミックです。指定されたキーに対する各リクエストは、そのキーに対してすべてを返すか、何も返すことはありません。

関連する問題