Memcachedでの追加と設定


17

ADDとSETの違いがわからない ADDにSETが含まれているか、何かが存在し、SETが単に上書きする場合にADDがfalseを返すようです。ありがとう!

編集:私の特定の質問は、「いつ設定するのではなく追加するのか、追加するのではなく設定するのですか?」です。

回答:


22

最初の質問に対する答えはすでにほとんど得られています。その目的はADD、キーがまだ存在しない場合にのみ機能しSET、値が既に存在するかどうかに関係なく値を更新することです。SQLに精通している場合、(大体)INSERTクエリ(ADD)とUPDATESET)の違いに似ています。

補遺の質問に関しては、目的に合ったものを使用してください。私は言うでしょうSET、それはあなたがちょうど「私は鍵が欲しい言いたいことがより一般的ですので、より一般的な操作になるfoo値を持っているbar、と私はそれが既に存在していたかどうかを気にしません」。ただし、キーがまだキャッシュにないことを知る必要がある場合があります(あまり頻繁ではありません)。

ADD適切な場合に思い浮かぶ例は、memcacheにセッションを保存することです(ちなみに、これはお勧めしません)-セッションIDをランダムに(またはハッシュ経由で)生成している場合は、既存のセッションと同じキーで新しいセッションを作成します。これにより、あるユーザーが別のユーザーのデータにアクセスできるようになります。この場合、セッションを作成したときにを使用しADD、失敗ステータスが返された場合は、新しいセッションIDを生成して再試行する必要があります。もちろん、セッションを更新するSETと、ユーザーがアプリケーションを操作したときに使用されます。


1
私はここで少し注意を払うかもしれませんが、SQLとの比較では、「add」がINSERTと比較される場合、「set」はUPDATEではなくREPLACEと比較されます。
マッテオ

2
したがって、「大体」という言葉の使用。あなたが取得したい場合は、本当に nitpicky、REPLACEでもSQLではありません...それは(にやにや笑い)「緩くMySQLが理解できるSQLに触発された言語」だ
womble

3

ユーザーID「womble」による上記の回答に加えて、次の点も考慮してください。

  1. 「追加」ではなく「設定」の競合状態の可能性。ニック・ジョンソンによる回答への以下のリンクを参照してください:https : //stackoverflow.com/questions/13234556/using-memcache-add-instead-of-set

  2. 「追加」を行うことがわかっている場合は、「設定」を使用しないでください。これらは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)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.