2011-11-10 1 views
1

GAEのmemcahe APIのput(...)メソッドは、引数として(オーバーロードされた実装の1つで)SetPolicy引数を受け取ります。 Javadocs hereでは、ポリシーとして「ADD_ONLY_IF_NOT_PRESENT」を選択した場合、私は引用します。GAEのmemcacheの動作+ ADD_ONLY_IF_NOT_PRESENT

「競合状態を避けるために役立ちます。

私の質問は以下のとおりです。

  1. 同じキーで設定された有効期限の切れた値でhappends何? memcacheに(key = 1、value = whatever)のようなものを追加すると、このエントリの有効期限が切れ、ADD_ONLY_IF_NOT_PRESENTを使って(キャッシュ= 1、値= whatever2)キャッシュに追加されたwhatever2が追加されます。

  2. 「競合状態には便利です」とはどういう意味ですか?具体的には、put(...)ADD_ONLY_IF_NOT_PRESENT SetPolicyを使用した場合、stuffを同時にmemcacheに追加する際の競合状態を避けるため、getIdentifiableputIfUntouchedを使用する必要はありませんか?

答えて

1
  1. 値の有効期限が切れた場合は、それはもうmemcacheのではありませんので、RPCは、それを設定します。

  2. getを実行しても何もなかった場合にのみputを実行します。競合状態が導入され、チェック中に他の人がデータを入れた可能性があります。 1回の操作でこれを回避できます。

+0

Thanx、これは非常に明確な答えです。しかし、putIfUntouchedとgetIdentifiableを使うのはちょっと面倒です。これは、putIfUntouchedメソッドで使用するために、特定のキーで取得した最後のオブジェクトをすべてローカルに(現在のアプリケーションインスタンスに)格納する必要があることを意味します。 。 –

関連する問題