4

私はすでに私が本当に好きではない2つの方法を考えました:

  1. try..catch ..内のtouch(key、null)を呼び出し、catchセクションからfalseを返します。しかし、それから私は私にとって良くないttlを変更しています。
  2. try..catch ..内でadd(key、value)を呼び出し、catchセクションからfalseを返します-これは、不必要に追加したキーを削除する必要があるため、効率に問題があります。

ところで、私の環境はPHPです。

助言がありますか?

ありがとう!

4

4 に答える 4

1

Couchbase はexists現時点でメソッドを提供していませんが、これを使用adddeleteて実行できます。これは Memcache/Memcached にも役立ちます。

public function exists($key)
{
    if ($this->object->add($key, true)) {
        $this->object->delete($key);
        return false;
    }
    return true;
}

https://github.com/twinh/widget/blob/master/lib/Widget/Couchbase.php#L118

于 2013-05-03T06:31:24.077 に答える
0

シンプルなExistsメンバーもいません。

あなたが持っている.Netクライアントclient.TryGetでは、それでもアイテムをプルし、それが戻ったときにfalse、それが存在しないことを意味するのではなく、プルできなかっただけです(ノードをシャットダウンして実行しようとしました) 。

再び.Netクライアントの場合、ExecuteGetたとえばIGetOperationResultを公開するHasValueが、実際の値を取得します。

ビューを使用しますか?少し汚いかもしれませんが、IDのみを返すビューを持つことができます。これにより、ドキュメントを取得する必要もなくなります。しかし、それが本当にパフォーマンスが向上するかどうかはわかりません。

于 2013-03-14T20:37:54.453 に答える
0

簡単な方法は、get(key); を実行することです。キーが存在する場合は値が返され、存在しない場合は null が返されます。

あなたのアプリケーションは大丈夫ですか?

すべてのキーがメモリ内にあるため、キーが存在するかどうかに関係なく get を実行する方が高速であることに注意してください。

于 2013-02-07T15:46:01.240 に答える
0

カウチベースから取得したこの例を確認してください

  #retrieve the last access date/time of the script.
  #the key name is is the script name prefixed with DATE::
  $last_access_date=$cb_obj->get("DATE::" . $script_name);

  #handle the case where this is the first access to the script
  #and that key doesn't yet exist
  if($last_access_date == NULL){
  $last_access_date = "never";
   }

記事リンク

于 2013-02-13T20:40:00.117 に答える