Предупреждение: Memcache ::get() [memcache.get]: Узел больше не существует

#memcached

#memcached

Вопрос:

Я новичок в memcached, но мне нужно быстро исправить эту ошибку на веб-сайте

Я не знаю, где вмешаться?

Что-нибудь, что я могу сделать, чтобы выяснить, какой узел или ключ memcached не удалось получить?

Я могу просмотреть какие-либо файлы журналов?

Ответ №1:

Это происходит, когда вы сохраняете объект, который имеет ссылки на ресурсы, такие как файловые дескрипторы или подключения к базе данных. Это также может произойти, если полученный вами объект относится к классу, который не загружается, когда вы получаете его из memcached.

Чтобы узнать, какой ключ memcached завершается ошибкой, вы могли бы установить пользовательский обработчик ошибок, который может получить доступ к ключу memcached, непосредственно перед вызовом Memcached::get и восстановить его впоследствии. Затем вы можете записать предупреждение вместе с ключом.

[Редактировать] Вот пример:

 <?
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');
  

Комментарии:

1. Я думаю, что ваш ответ — это то, что мне нужно. Но я действительно не знаю, как продвигаться вперед, чтобы реализовать пользовательский обработчик ошибок, чтобы получить доступ к ключу до ПОЛУЧЕНИЯ. Можете ли вы дать мне какой-нибудь код для этого.

2. Также, что я могу сделать после того, как я нашел КЛЮЧ?