ADDとSET Anyの違いがわかりません。 ADDにSETが含まれているか、何かが存在し、SETが上書きするだけでADDがfalseを返すようです。ありがとう!
編集:私の特定の質問は、「セットではなく追加を使用するのか、追加ではなくセットを使用するのか」です。
すでに最初の質問に対する答えはほぼわかっています。ADD
の目的は、キーがまだ存在しない場合にのみ機能することですが、SET
は値を更新するためのものです。それがすでに存在するかどうかに関係なく。 SQLに精通している場合、それは(おおよそ)INSERT
クエリ(ADD
)とUPDATE
(SET
)の違いに似ています。
補遺の質問に関しては、目的に合った方を使用します。 SET
の方がより一般的な操作だと思います。「キーfoo
に値bar
を指定して、すでにそこにあったかどうかは気にしない」と語った。ただし、キーがまだキャッシュにないことを知る必要がある場合があります(それほど頻繁ではありません)。
ADD
が適切な場合に頭に浮かぶ例は、セッションをmemcacheに保存することです(ところで、これはお勧めしません)-セッションIDをランダムに(またはハッシュを介して)生成している場合、あるユーザーに別のユーザーのデータへのアクセスを許可するため、既存のセッションと同じキーで新しいセッションを作成することは望ましくありません。この場合、セッションを作成したときにADD
を使用し、失敗のステータスを返した場合は、新しいセッションIDを生成して再試行する必要があります。もちろん、セッションを更新すると、ユーザーがアプリケーションを操作するときにSET
が使用されます。
上記のuser-id 'womble'による回答に加えて、次の点も考慮してください。
レース条件の可能性は、 'add'ではなく 'set'です。ニックジョンソンによる回答への以下のリンクを参照してください。 https://stackoverflow.com/questions/13234556/using-memcache-add-instead-of-set
「追加」が機能することがわかっている場合は、「セット」を使用しないでください。これはRPC呼び出しであるため、ネットワーク経由でデータを送信しないようにするためです。また、memcacheでキーと値のペアを探すのではなく、ほぼすべての時間がネットワークトラフィックで消費されます。したがって、そのような場合に最適なネットワークトラフィックを回避できれば、応答時間が速くなります。
Appstats( https://developers.google.com/appengine/docs/python/tools/appstats (by Google))を参照し、上記のpoint#2についてさらに理解するには、以下をご覧ください http://www.youtube.com/watch?v=bvp7CuBWVgA by Guido Van Rossum(@Google)