警告:Memcache :: get()[memcache.get]:节点不再存在

时间:2011-06-03 07:26:22

标签: memcached

我是memcached的新手,但我确实需要在网站上快速修复此错误

我不知道在哪里切入?

我可以做些什么来找出哪个节点或密钥memcached无法获取?

我可以查看任何日志文件吗?

1 个答案:

答案 0 :(得分:0)

当您存储对文件描述符或数据库连接等资源的引用的对象时,会发生这种情况。如果你从getcached那里得到的对象是一个没有加载的类,也会发生这种情况。

要找出哪个memcached键失败,您可以设置一个自定义错误处理程序,它可以在调用Memcached :: get之前访问memcached键,然后恢复它。然后,您可以将警告与密钥一起记录。

[编辑]以下是一个例子:

<?
class MyMemcachedWrapper {

    private $key;

    public function get($key) {

        // Save the key in an instance variable so it will be available in
        // the error handler
        $this->key = $key;

        set_error_handler(array($this, 'handleError'));
        $value = Memcached::get($key);
        restore_error_handler();

        return $value;
    }

    public function handleError($errno, $errstr) {

        // Here we have both the key and the error message from memcached
        $message = "Memcached error '$errstr' while fetching key '{this->key}'";

        // ... and we can log it to a file or db or something
        file_put_contents("memcached-errors.log", $message, FILE_APPEND);
    }
}

// Then use it like this
$memcached_wrapper = new MyMemcachedWrapper();
$value = $memcached_wrapper->get('xyz');