ADDとSETの違いがわからない ADDにSETが含まれているか、何かが存在し、SETが単に上書きする場合にADDがfalseを返すようです。ありがとう!
編集:私の特定の質問は、「いつ設定するのではなく追加するのか、追加するのではなく設定するのですか?」です。
ADDとSETの違いがわからない ADDにSETが含まれているか、何かが存在し、SETが単に上書きする場合にADDがfalseを返すようです。ありがとう!
編集:私の特定の質問は、「いつ設定するのではなく追加するのか、追加するのではなく設定するのですか?」です。
回答:
最初の質問に対する答えはすでにほとんど得られています。その目的はADD
、キーがまだ存在しない場合にのみ機能しSET
、値が既に存在するかどうかに関係なく値を更新することです。SQLに精通している場合、(大体)INSERT
クエリ(ADD
)とUPDATE
(SET
)の違いに似ています。
補遺の質問に関しては、目的に合ったものを使用してください。私は言うでしょうSET
、それはあなたがちょうど「私は鍵が欲しい言いたいことがより一般的ですので、より一般的な操作になるfoo
値を持っているbar
、と私はそれが既に存在していたかどうかを気にしません」。ただし、キーがまだキャッシュにないことを知る必要がある場合があります(あまり頻繁ではありません)。
ADD
適切な場合に思い浮かぶ例は、memcacheにセッションを保存することです(ちなみに、これはお勧めしません)-セッションIDをランダムに(またはハッシュ経由で)生成している場合は、既存のセッションと同じキーで新しいセッションを作成します。これにより、あるユーザーが別のユーザーのデータにアクセスできるようになります。この場合、セッションを作成したときにを使用しADD
、失敗ステータスが返された場合は、新しいセッションIDを生成して再試行する必要があります。もちろん、セッションを更新するSET
と、ユーザーがアプリケーションを操作したときに使用されます。
REPLACE
でもSQLではありません...それは(にやにや笑い)「緩くMySQLが理解できるSQLに触発された言語」だ
ユーザーID「womble」による上記の回答に加えて、次の点も考慮してください。
「追加」ではなく「設定」の競合状態の可能性。ニック・ジョンソンによる回答への以下のリンクを参照してください: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))を参照してください。上記のポイント#2について詳しくは、http://www.youtube.com/watchをご覧ください?v = bvp7CuBWVgA by Guido Van Rossum(@Google)