#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. Также, что я могу сделать после того, как я нашел КЛЮЧ?