Предупреждение: Memcache :: get () [memcache.get]: узел больше не существует - PullRequest
0 голосов
/ 03 июня 2011

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

Я не знаю, куда врезаться?

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

Какие файлы журнала я могу просмотреть?

1 Ответ

0 голосов
/ 04 октября 2011

Это происходит, когда вы сохраняете объект, который имеет ссылки на источники, такие как дескрипторы файлов или соединения с базой данных.Это также может произойти, если получаемый вами объект принадлежит к классу, который не загружается при получении его из 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');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...