0

php_couchbase我正在使用 Couchbase 在 IIS 7 下使用和对来自 PHP 5.4 NTS 的 RDBS 结果进行短期缓存libcouchbase。如果您将 RDBS 选择放在回调函数中,则代码非常好,但我希望更好地理解当事情崩溃时该怎么做。

所以建议我看看这个问题:Couchbase PHP SDK: How to detect couchbase connection failure?. Saad 的代码不会抛出异常,因为$cb它永远不会是假的。(我不确定如何看待马特关于计算错误的建议;我无法让它抛出任何错误。)

即使数据库处于脱机状态,我也可以使用对象实例化;由于连接可能随时断开,代码应检查每个操作的结果。但libcouchbase似乎不愿意让失败成为一种选择。

在下面的代码中(我在其中连接到一个虚假端口)它从不抛出异常,只是“警告”。( "Warning: Failed to establish libcouchbase connection to server: Connection failure in H:\www\root\no.php on line 4", "Warning: There is no active connection to couchbase in H:\www\root\no.php on line 9")。

Couchbase->add返回一个值,但是返回的值不能显示“这个键已经存在”和“服务器机房着火了”的区别。

测试操作是否成功的正确方法是什么?我需要捕获警告吗?

<?php

try {
  $cb = new Couchbase("localhost:8099", "", ""); // should be port 8091
} catch (CouchbaseException $e) {
    echo "Never fires, even when db down (this is OK...instantiation did work).";
};

if ($cb->add("hello","hello world")) {
  echo "Called if DB up and key does not exist";
} else {
  echo "Called if DB down or key exists";
}

try {
  $foo = $cb->add("hello","hello world");
} catch (Exception $e) {
    echo "Never fires, even when db down";
};

try {
  $foo = $cb->add("hello","hello world");
} catch (CouchbaseException $e) {
    echo "Never fires, even when db down";
};

print $cb->get("hello");

?>

我还尝试了文档中的这段代码;没有抛出异常。也许我没有打开 php 异常处理?(对不起,如果我在这里是个白痴,我不会写太多的 php 代码。)

由于 Couchbase 是分布式冗余 nosql blah blah blah 解决方案,我们不必过多考虑服务可用性,这让我有点沮丧。代码总是需要知道数据何时被扔到地板上。

感谢您的任何建议!

4

1 回答 1

1

我必须检查才能确定,但​​我认为问题与 Windows 构建有点落后的事实有关。如果我没记错的话,在早期的 1.1.x 系列中存在异常处理问题。从源头构建可能是有序的。我会看看我们是否可以为您提供更新的版本。

于 2013-08-19T14:13:56.093 回答