Php 如何检查Couchbase中是否存在密钥?

Php 如何检查Couchbase中是否存在密钥?,php,couchbase,Php,Couchbase,我已经想到了两种我并不喜欢的方法: 在try..catch。。并从中返回false 接球区。但是我改变了ttl,这不好 对我来说 调用在try..catch.中添加(键、值)。。返回 在catch部分中为false-这会降低效率,因为 必须删除我刚才不必要添加的密钥 顺便说一句,我的环境是PHP 有什么建议吗 谢谢 一个简单的方法是做一个get(key);如果键存在,则返回值,否则操作返回null 你的申请可以吗 请注意,由于所有的密钥都在内存中,因此在密钥存在或不存在时,执行get的速度与执行

我已经想到了两种我并不喜欢的方法:

  • 在try..catch。。并从中返回false 接球区。但是我改变了ttl,这不好 对我来说
  • 调用在try..catch.中添加(键、值)。。返回 在catch部分中为false-这会降低效率,因为 必须删除我刚才不必要添加的密钥
  • 顺便说一句,我的环境是PHP

    有什么建议吗


    谢谢

    一个简单的方法是做一个get(key);如果键存在,则返回值,否则操作返回null

    你的申请可以吗


    请注意,由于所有的密钥都在内存中,因此在密钥存在或不存在时,执行get的速度与执行get的速度一样快。

    请查看此示例,该示例取自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";
       }
    

    我也缺少一个简单的
    成员

    在.Net客户端中,您有
    client.TryGet
    ,但是它仍然会拉取项目,当它返回
    false
    时,这并不意味着它不存在,只是它无法拉取它(只是在关闭节点的情况下尝试执行它)

    同样对于.Net客户端,但是
    ExecuteGet
    会给您一个
    IGetOperationResult
    ,它将公开例如
    HasValue
    ,但会再次提取实际值


    使用视图?也许有点脏,但是您可以有一个只返回ID的视图,这样也就不需要检索文档了。不确定它是否真的会表现得更好。

    Couchbase目前还没有提供一个
    exists
    方法,但是你可以使用
    add
    delete
    来做这件事,这对Memcache/Memcached也很有用

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

    但是如果键的值为空怎么办?密钥存在,但其值为空。或者,该值的大小可以是MB;可能您不想不必要地拉它。提供的链接已断开