Как проверить, существует ли ключ в Couchbase?

Я уже думал о двух методах, которые мне не нравятся:

  1. Позвоните по телефону (ключ, null) внутри try..catch .. и верните false из раздела catch. Но потом я меняю ttl, что плохо для меня.
  2. Позвоните, чтобы добавить (ключ, значение) внутри try..catch .. и вернуть false из секции catch – Эта эффективность дефектов, потому что я должен удалить их ключ, который я просто излишне добавил.

Кстати, моя среда – это PHP.

Какие-либо предложения?

Благодаря!

    Couchbase в данный момент не предоставил exists метод, но вы можете использовать add и delete для этого, это также полезно для 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

    Легким способом будет сделать get (ключ); если ключ существует, значение возвращается, если операция не возвращает значение null.

    Все в порядке с вашим приложением?

    Обратите внимание: поскольку все ключи находятся в памяти, так же быстро, как и когда ключ существует или нет.

    проверьте этот пример, взятый из couchbase

      #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"; } 

    Ссылка статьи

    Мне тоже не хватает простого члена Exists .

    В клиенте .Net у вас есть client.TryGet который, однако, потянет элемент и когда он вернет false , это на самом деле не означает, что он не существует, просто он не может его вытащить (просто попытался выполнить его с отключить мои узлы).

    Опять для клиента. Net, но ExecuteGet предоставит вам IGetOperationResult который будет выставлять, например, HasValue , но снова вытягивает фактическое значение.

    Использование представления ? Возможно, немного грязно, но у вас может быть представление, возвращающее только идентификаторы, это избавит вас от необходимости извлекать документ. Не уверен, что это действительно будет лучше.