Форум dkLab и Denwer
Здесь общаются Web-разработчики.
Генеральный спонсор:
Хостинг «Джино»

Dklab_Cache: правильное кэширование — тэги в memcached, namespaces, статистика (Дмитрий Кóтеров)
На страницу 1, 2  След.
Автор Сообщение
Дмитрий Кóтеров
Администратор



Зарегистрирован: 10.03.2003
Сообщ.: 13553
Карма: 405
   поощрить/наказать


СообщениеДобавлено: Ср Апр 23, 2008 12:44 am (написано с мобильной версии)
   Заголовок сообщения: Dklab_Cache: правильное кэширование — тэги в memcached, namespaces, статистика
Ответить с цитатой

http://dklab.ru/lib/Dklab_Cache/
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Devgru
Гость





Карма: 367
   поощрить/наказать


СообщениеДобавлено: Ср Мая 07, 2008 2:00 pm (спустя 14 дней 13 часов 16 минут; написано за 4 секунды)
   Заголовок сообщения: вопрос
Ответить с цитатой

Здравствуйте, Дмитрий.
Хочу спросить, в классе Dklab_Cache_Backend_MemcachedTag вы используете функцию «tag_delete», которая нигде не определена… Я правильно понял, что нужно использовать «модифицированный» memcached, (http://code.google.com/p/memcached-tag/) или же нет?
Вернуться к началу
Дмитрий Кóтеров
Администратор



Зарегистрирован: 10.03.2003
Сообщ.: 13553
Карма: 405
   поощрить/наказать


СообщениеДобавлено: Пн Мая 12, 2008 1:17 am (спустя 4 дня 11 часов 16 минут; написано за 58 секунд)
   Заголовок сообщения:
Ответить с цитатой

Точнее будет сказать, модифицированный memcached использовать не нужно, потому что он глючный.
Прочитайте, пожалуйста, статью внимательно от начала до конца.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
symbix
Гость





Карма: 367
   поощрить/наказать


СообщениеДобавлено: Ср Мая 21, 2008 3:10 am (спустя 9 дней 1 час 53 минуты; написано за 6 минут 1 секунду)
   Заголовок сообщения: хммммм
Ответить с цитатой

1) каким образом гарантируется, что тэги не протухнут раньше тэгируемых?

я навскидку вот вижу только два варианта

- гарантированно - отдельный memcached для тэгов
- на уровне "наверняка верных предположений" - не использовать "маленькие" слабы (тэги, видимо, пойдут в 2^4, возможно, даже в 2^3) больше ни для чего, задрать повыше лайфтайм

(если непонятно при чем тут степени двойки - http://kevinminnick.blogspot.com/2006/01/understanding-memcached-memory.html)

2) для тэгов был бы полезен prolongate patch (продление жизни при гете, управляемое флагом)

3) multi-get не используется? или я не заметил?
Вернуться к началу
Гость






Карма: 367
   поощрить/наказать


СообщениеДобавлено: Ср Мая 21, 2008 3:18 am (спустя 7 минут; написано за 11 секунд)
   Заголовок сообщения:
Ответить с цитатой

от дурак дал ссылку а сам не сверился ;) конечно минимальное 2^6
Вернуться к началу
Дмитрий Кóтеров
Администратор



Зарегистрирован: 10.03.2003
Сообщ.: 13553
Карма: 405
   поощрить/наказать


СообщениеДобавлено: Ср Мая 21, 2008 10:20 am (спустя 7 часов 2 минуты; написано за 2 минуты 24 секунды)
   Заголовок сообщения:
Ответить с цитатой

Гость писал(а):
каким образом гарантируется, что тэги не протухнут раньше тэгируемых?
Используется алгоритм, который от этого не зависит, рекомендую заглянуть в код.

Вкратце: если тэги протухнут раньше, чем тэгированные объекты, то объекты просто также протухнут вместе с этими тэгами, и целостность не нарушится.
Но вероятность этого весьма мала, т.к. к тэгам обращение на чтение идет не реже, чем к тэгированным объектам. Соответственно, с точки зрения LRU они имеют одинаковый приоритет вытеснения.
[Правда, статья, которую Вы процитировали, вносит некоторые коррективы в это утверждение, однако я не думаю, что очень значительные.]

Последний раз редактировалось: Дмитрий Кóтеров (Ср Мая 21, 2008 10:35 am), всего редактировалось 1 раз
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Дмитрий Кóтеров
Администратор



Зарегистрирован: 10.03.2003
Сообщ.: 13553
Карма: 405
   поощрить/наказать


СообщениеДобавлено: Ср Мая 21, 2008 10:29 am (спустя 9 минут; написано за 1 минуту 16 секунд)
   Заголовок сообщения:
Ответить с цитатой

symbix писал(а):
для тэгов был бы полезен prolongate patch (продление жизни при гете, управляемое флагом)
А вот насчет этого можно чуть подробнее? Разве в LRU и так не подразумевается, что при каждом чтении вероятность вытеснения снижается?
symbix писал(а):
multi-get не используется? или я не заметил?
Не используется, хотя очень бы хотелось: это здорово ускорило бы работу. К сожалению, в расширении PHP memcache он не поддерживается пока: http://ru2.php.net/manual/en/book.memcache.php
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Дмитрий Кóтеров
Администратор



Зарегистрирован: 10.03.2003
Сообщ.: 13553
Карма: 405
   поощрить/наказать


СообщениеДобавлено: Ср Мая 21, 2008 10:40 am (спустя 10 минут; написано за 1 минуту 46 секунд)
   Заголовок сообщения:
Ответить с цитатой

Кстати говоря, про отдельный memcached для тэгов мысли были. В одной из следующих версий это, вероятно, появится (тем более что реализовать совсем просто, не выходя за рамки идеологии). Но мне думается, что это не даст существенного эффекта все же. По хорошему, надо пробовать так и так на реальном нагруженном проекте, а потом сравнивать число запросов за день, которое прошло мимо кэша.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
symbix
Гость





Карма: 367
   поощрить/наказать


СообщениеДобавлено: Вс Мая 25, 2008 5:24 am (спустя 3 дня 18 часов 44 минуты; написано за 7 минут 55 секунд)
   Заголовок сообщения:
Ответить с цитатой

Цитата:
Вкратце: если тэги протухнут раньше, чем тэгированные объекты, то объекты просто также протухнут вместе с этими тэгами, и целостность не нарушится.
Но вероятность этого весьма мала, т.к. к тэгам обращение на чтение идет не реже, чем к тэгированным объектам. Соответственно, с точки зрения LRU они имеют одинаковый приоритет вытеснения.
[Правда, статья, которую Вы процитировали, вносит некоторые коррективы в это утверждение, однако я не думаю, что очень значительные.]
вообще, вносит. я использую схожий подход для разбиения длинных списков на связанные "чанки" и сталкивался с вытеснением при тестировании, решил тем, что "задрал" лайфтайм для "маркеров" и поставил на них прологнейт вне зависимости от пролонгейта самих данных.

собственно, prolongate. Патч увеличивает лайфтайм при get-е, если взведен 3-й бит флага. Таким образом логика меняется с "протухнуть через N секунд после set-а" на "протухнуть через N секунд после последнего set-а или get-а", что позволяет эффективно кэшировать "горячие" данные. Изменения примитивные: http://symbi.org/misc/memcached-1.2.2-autoprolongate.patch - конечно, нарушается изначальный принцип "флаги ни на что не влияют", но это последнее что меня тут волнует ;)
Цитата:
Не используется, хотя очень бы хотелось: это здорово ускорило бы работу. К сожалению, в расширении PHP memcache он не поддерживается пока:
Поддерживается.
http://php.net/memcache_get
Цитата:
You can pass array of keys to Memcache::get() to get array of values. The result array will contain only found key-value pairs
Вернуться к началу
Гость






Карма: 367
   поощрить/наказать


СообщениеДобавлено: Вс Мая 25, 2008 5:46 am (спустя 21 минуту; написано за 2 минуты 23 секунды)
   Заголовок сообщения:
Ответить с цитатой

Цитата:
По хорошему, надо пробовать так и так на реальном нагруженном проекте, а потом сравнивать число запросов за день, которое прошло мимо кэша.
Вот, кстати, тоже интересный вопрос, как это считать. Если общее число запросто вытягивается из stats, то детализацию по группам ключей - хм... я не придумал ничего лучше чем грубо впихнуть error_log в свой memcache-враппер и потом все это дело с вебов агрегировать-парсить. Вариант запустить memcached в debug-режиме на продакшене и грепать логи отмел сразу как полный @эпитет@...
Вернуться к началу
Дмитрий Кóтеров
Администратор



Зарегистрирован: 10.03.2003
Сообщ.: 13553
Карма: 405
   поощрить/наказать


СообщениеДобавлено: Вс Июн 15, 2008 10:28 pm (спустя 21 день 16 часов 42 минуты; написано за 1 минуту 33 секунды)
   Заголовок сообщения:
Ответить с цитатой

Гость писал(а):
Таким образом логика меняется с "протухнуть через N секунд после set-а" на "протухнуть через N секунд после последнего set-а или get-а"
Хм. Очень интересный патч. Но скажите, если я ставлю число секунд равным бесконечности (для тагов), имеет ли смысл данный патч вообще? Судя по коду, не должен бы...
symbix писал(а):
Поддерживается.
http://php.net/memcache_get
Спасибо. Вот это очень ценная информация! В скором времени проапдейчу библиотеку.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Ivan1986
Участник форума
Предупреждений: 1


Зарегистрирован: 09.10.2007
Сообщ.: 717
Карма: 32
   поощрить/наказать


СообщениеДобавлено: Ср Июн 18, 2008 3:03 pm (спустя 2 дня 16 часов 35 минут; написано за 2 минуты)
   Заголовок сообщения:
Ответить с цитатой

Еще бы хорошо добавить такую функцию добавить в библиотеку - слоты это конечно хорошо, но черезчур ООП это иногда не есть хорошо
Код (php): скопировать код в буфер обмена
class Cache_Thru
{
    private $_cacher, $_obj, $_id, $_tags, $_lt;
   
    public function __construct($Cacher, $obj, $id, $tags, $lifeTime)
    {
        $this->_cacher = $Cacher;
        $this->_obj = $obj;
        $this->_id = $id;
        $this->_tags = $tags;
        $this->_lt = $lifeTime;
    }
   
    public function __call($method, $args)
    {
        if (false === ($result = $this->_cacher->load($this->_id))) {
                $result = call_user_func_array($this->_obj?array($this->_obj, $method):$method, $args);
                $this->_cacher->save($result, $this->_id, $this->_tags, $this->_lt);
        }
        return $result;
    }
}

function thru($Cacher, $obj, $id, $tags=array(), $lifeTime=null)
{
        return new Cache_Thru($Cacher, $obj, $id, $tags, $lifeTime);
}
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail ICQ Number
Дмитрий Кóтеров
Администратор



Зарегистрирован: 10.03.2003
Сообщ.: 13553
Карма: 405
   поощрить/наказать


СообщениеДобавлено: Вт Июн 24, 2008 1:51 am (спустя 5 дней 10 часов 47 минут; написано за 1 минуту 16 секунд)
   Заголовок сообщения:
Ответить с цитатой

Э-эээ... ну вы явно передаете id слота, насколько я понимаю, а это есть большое зло (как указано в статье). Потому что логика формирования этого ID оказывается размазанной по коду. Идеология слотов как раз призвана бороться с таким размазыванием, чтобы все возможные слоты были всегда под рукой.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Ivan1986
Участник форума
Предупреждений: 1


Зарегистрирован: 09.10.2007
Сообщ.: 717
Карма: 32
   поощрить/наказать


СообщениеДобавлено: Вт Июн 24, 2008 8:03 pm (спустя 18 часов 12 минут; написано за 2 минуты 59 секунд)
   Заголовок сообщения:
Ответить с цитатой

Да, я явно передаю id и теги, мое мнение что нужно сделать возможность использования обоих вариантов.
Так как php не компилируемый язык, то включение огромного числа мелких файлов - а такими у вас являются все файлы, описывающие теги и слоты сильно повлияет на производительность, особенно в случае отсутствия кеширования байткода (оно есть не везде), по крайне мере возможность ИМХО добавить нужно.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail ICQ Number
Дмитрий Кóтеров
Администратор



Зарегистрирован: 10.03.2003
Сообщ.: 13553
Карма: 405
   поощрить/наказать


СообщениеДобавлено: Сб Июл 05, 2008 11:54 am (спустя 10 дней 15 часов 50 минут; написано за 49 секунд)
   Заголовок сообщения:
Ответить с цитатой

Ivan1986 писал(а):
ильно повлияет на производительность
Замеры - в студию.
Ivan1986 писал(а):
особенно в случае отсутствия кеширования байткода
Конечно! Особенно это актуально, если виртуальная машина PHP реализована на Прологе внутри БЭСМ-6.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Ivan1986
Участник форума
Предупреждений: 1


Зарегистрирован: 09.10.2007
Сообщ.: 717
Карма: 32
   поощрить/наказать


СообщениеДобавлено: Ср Июл 09, 2008 11:08 am (спустя 3 дня 23 часа 14 минут; написано за 1 минуту 17 секунд)
   Заголовок сообщения:
Ответить с цитатой

Дмитрий Кóтеров писал(а):
Замеры - в студию.
Ну фактически у вас в 49 набле -
Подключение всех файлов по одному, eAccelerator выключен: 911 мс.
Включение одного большого слитого файла, eAccelerator выключен: 458 мс.

На виртуальном хостинге может и не быть акселератора, и никто не разрешит поставить...
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail ICQ Number
Миша Спларов
Участник форума



Зарегистрирован: 17.11.2003
Сообщ.: 799
Карма: 63
   поощрить/наказать

Откуда: Россия, Томск

СообщениеДобавлено: Ср Июл 09, 2008 11:32 am (спустя 24 минуты; написано за 1 минуту 44 секунды)
   Заголовок сообщения:
Ответить с цитатой

Ivan1986 писал(а):
На виртуальном хостинге может и не быть акселератора, и никто не разрешит поставить...
Проекту на виртуальном хостинге и не критичен акселератор, и не для таких проектов делаются описанные в набле приёмы.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение ICQ Number
Ivan1986
Участник форума
Предупреждений: 1


Зарегистрирован: 09.10.2007
Сообщ.: 717
Карма: 32
   поощрить/наказать


СообщениеДобавлено: Ср Июл 09, 2008 2:26 pm (спустя 2 часа 53 минуты; написано за 38 секунд)
   Заголовок сообщения:
Ответить с цитатой

ну в принципе да, не спорю...
Однако насчет опционально почему бы не добавить...
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail ICQ Number
Дмитрий Кóтеров
Администратор



Зарегистрирован: 10.03.2003
Сообщ.: 13553
Карма: 405
   поощрить/наказать


СообщениеДобавлено: Вт Авг 19, 2008 2:46 am (спустя 1 месяц 9 дней 12 часов 20 минут; написано за 6 минут 24 секунды)
   Заголовок сообщения:
Ответить с цитатой

Доступна бета-версия с multi-get оптимизацией:
http://dklab.ru/wsvn/lib/Dklab_Cache/trunk/
Хотя все тесты проходят (и написаны дополнительные), в официальный релиз пока не выкладываю. Протестируйте, пожалуйста, кому актуально, и напишите сюда результаты.

Как работать

Используйте везде вместо Zend_Cache_Backend_Memcached расширенный класс Dklab_Cache_Backend_MemcachedMultiload, тогда поддержка multi-get включется и будет автоматически доступна для TagEmuWrapper:
Код (php): скопировать код в буфер обмена
$memcached = new Dklab_Cache_Backend_MemcachedMultiload($memcachedOptions);
$backend = new Dklab_Cache_Backend_TagEmuWrapper($memcached);
... работаем с тагами в $backend, оптимизация включена ...
(Конечно, можно продолжать использовать и Zend_Cache_Backend_Memcached, но тогда multi-get выключится, все остальное же работает, как раньше.)

Результаты

Запросы без оптимизации (1 ключ, 4 тага):

Incrementor: Dklab_Cache_Backend_Profiler::load
Incrementor: Dklab_Cache_Backend_Profiler::load
Incrementor: Dklab_Cache_Backend_Profiler::load
Incrementor: Dklab_Cache_Backend_Profiler::load
Incrementor: Dklab_Cache_Backend_Profiler::load

Запросы с включенной оптимизацией (1 ключ, 4 тага):

Incrementor: Dklab_Cache_Backend_Profiler::load
Incrementor: Dklab_Cache_Backend_Profiler::multiLoad

Видно, что 4 разных запроса к 4 тагом превратились в 1 запрос вида multiLoad.
К сожалению, меньше 2 запросов при использовании тагов сделать не получится, это теоретический предел.

Последний раз редактировалось: Дмитрий Кóтеров (Ср Фев 04, 2009 8:19 pm), всего редактировалось 1 раз
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
andry_
Гость





Карма: 367
   поощрить/наказать


СообщениеДобавлено: Чт Ноя 20, 2008 10:59 pm (спустя 3 месяца 1 день 20 часов 12 минут; написано за 3 минуты 12 секунд)
   Заголовок сообщения:
Ответить с цитатой

Я что-то не поюму смысла либы по тегированию, она же не может работать. Не проверял, но судя по коду
Код (php): скопировать код в буфер обмена
if (!method_exists($this->_handle, 'tag_add')) {
                Zend_Cache::throwException('Method tag_add() is not supported by the PHP memcached extension!');
}
так в текущей версии пхп нет такой и когда появиться не понятно. Насколько я знаю даже это патч для мемкеша еще стабильно не работает.
Это теоритически размышления или я что-то не правильно понял?
Вернуться к началу
Дмитрий Кóтеров
Администратор



Зарегистрирован: 10.03.2003
Сообщ.: 13553
Карма: 405
   поощрить/наказать


СообщениеДобавлено: Сб Ноя 22, 2008 7:32 pm (спустя 1 день 20 часов 33 минуты; написано за 1 минуту 17 секунд)
   Заголовок сообщения:
Ответить с цитатой

Рекомендую прочитать статью от начала и до конца, она небольшая.
Библиотека MemcachedTag.php вообще в статье не рассматривается, она в дистрибутиве только в качестве "довеска", на будущее, если вдруг патч про таги появится.

Пользоваться надо TagEmuWrapper.php, она работает и даже покрыта тестами.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
jurm
Гость





Карма: 367
   поощрить/наказать


СообщениеДобавлено: Пт Янв 23, 2009 12:19 pm (спустя 2 месяца 16 часов 47 минут; написано за 2 минуты 29 секунд)
   Заголовок сообщения:
Ответить с цитатой

Есть следующий вопрос. У вас в листинге 2 происходит такое назначение:
Код (php): скопировать код в буфер обмена
$backend = new Dklab_Cache_Backend_TagEmuWrapper($memcached);
$frontend = new Zend_Cache_Frontend_Output();
$frontend->setBackend($backend);
Но в результате попыток сделать подобное выходит ошибка,
Catchable fatal error: Argument 1 passed to Zend_Cache_Core::setBackend() must be an instance of Zend_Cache_Backend, instance of Dklab_Cache_Backend_TagEmuWrapper given...

В чем подвох?
Версия ZF: ZendFramework-1.7.0PR
Вернуться к началу
Иван Шумков
Участник форума



Зарегистрирован: 30.12.2004
Сообщ.: 229
Карма: 6
   поощрить/наказать

Откуда: Россия, Санкт-Петербург

СообщениеДобавлено: Вт Фев 03, 2009 8:58 pm (спустя 11 дней 8 часов 39 минут; написано за 50 секунд)
   Заголовок сообщения:
Ответить с цитатой

Я так понял что вы дальше не поддерживаете эту библиотеку?
Где можно получить последнюю версию с оптимизацией количества запросов?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора ICQ Number
Дмитрий Кóтеров
Администратор



Зарегистрирован: 10.03.2003
Сообщ.: 13553
Карма: 405
   поощрить/наказать


СообщениеДобавлено: Ср Фев 04, 2009 5:58 pm (спустя 20 часов 59 минут; написано за 1 минуту 50 секунд)
   Заголовок сообщения:
Ответить с цитатой

jurm
Это несовместимость с новой версией Zend Framework, похоже. Потому что в ней объявление этого метода такое:

    public function setBackend(Zend_Cache_Backend $backendObject)

А было -

    public function setBackend($backendObject)

На самом деле, это полный беспредел, потому что в классе Zend_Cache_Backend завязки за файловую систему и вообще всякий мусор, который в мемкэш-бакенде совершенно не нужен. Куда только катится ZF...
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Дмитрий Кóтеров
Администратор



Зарегистрирован: 10.03.2003
Сообщ.: 13553
Карма: 405
   поощрить/наказать


СообщениеДобавлено: Ср Фев 04, 2009 6:09 pm (спустя 10 минут; написано за 29 секунд)
   Заголовок сообщения:
Ответить с цитатой

Иван Шумков писал(а):
Dklab_Cache_Backend_MemcachedMultiload
Черт. Потерял я ее, пока в trunc код библиотеки выделял... причем в кэше Гугла она осталась:
http://209.85.129.132/search?q=cache:f0WHzQLtQXgJ:dklab.ru/wsvn/lib/%3Fop%3Dcomp%26compare%255B%255D%3D%252FDklab_Cache%252Flib%252FDklab%40242%26compare%255B%255D%3D%252FDklab_Cache%252Flib%252FDklab%40249+Dklab_Cache_Backend_MemcachedMultiload&hl=ru&ct=clnk&cd=47&gl=ru&client=firefox-a

Попробую из бэкапа достать.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Дмитрий Кóтеров
Администратор



Зарегистрирован: 10.03.2003
Сообщ.: 13553
Карма: 405
   поощрить/наказать


СообщениеДобавлено: Ср Фев 04, 2009 8:20 pm (спустя 2 часа 11 минут; написано за 21 секунду)
   Заголовок сообщения:
Ответить с цитатой

Восстановил, сделал основной версией на сайте.
Скачать можно, где обычно: http://dklab.ru/lib/Dklab_Cache/
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Дмитрий Кóтеров
Администратор



Зарегистрирован: 10.03.2003
Сообщ.: 13553
Карма: 405
   поощрить/наказать


СообщениеДобавлено: Ср Фев 04, 2009 8:28 pm (спустя 7 минут; написано за 3 минуты 38 секунд)
   Заголовок сообщения:
Ответить с цитатой

Кстати, еще там добавился класс ReplicationWrapper, который позволяет отправлять запросы на запись одновременно в несколько memcached-серверов, а снаружи имеет интерфейс обычного backend-а. Удобно, если проект в нескольких датацентрах и использует тэги, но читать данные хочется только из текущего датацентра, не ходя в другой (кстати, в такой ситуации удобно настраивать репликацию только для функции очистки кэша, а простую запись оставлять нереплицируемой).

В последней версии PHP-шного memcache-модуля 3.0.3 (http://pecl.php.net/package/memcache), кстати, репликация поддерживается на встроенном уровне, однако она уже больше года как бета, и наши тесты показывают, что она рушит-таки PHP иногда (чего не происходит со стабильной 2.2.4). Так что Dklab_Cache_Backend_ReplicationWrapper - реальный выход из ситуации.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Иван Шумков
Участник форума



Зарегистрирован: 30.12.2004
Сообщ.: 229
Карма: 6
   поощрить/наказать

Откуда: Россия, Санкт-Петербург

СообщениеДобавлено: Пн Фев 09, 2009 12:02 pm (спустя 4 дня 15 часов 34 минуты; написано за 16 секунд)
   Заголовок сообщения:
Ответить с цитатой

Бесконечно благодарен!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора ICQ Number
Иван Шумков
Участник форума



Зарегистрирован: 30.12.2004
Сообщ.: 229
Карма: 6
   поощрить/наказать

Откуда: Россия, Санкт-Петербург

СообщениеДобавлено: Чт Фев 12, 2009 4:39 pm (спустя 3 дня 4 часа 37 минут; написано за 23 секунды)
   Заголовок сообщения:
Ответить с цитатой

Я так понял вы не поправили эту ошибку в новом релизе?
Код (php): скопировать код в буфер обмена
Catchable fatal error: Argument 1 passed to Zend_Cache_Core::setBackend() must be an instance of Zend_Cache_Backend, instance of Dklab_Cache_Backend_TagEmuWrapper given, called in /Users/ivanshumkov/Projects/geometria_old/geometria/library/Zend/Cache.php on line 110 and defined in /Users/ivanshumkov/Projects/geometria_old/geometria/library/Zend/Cache/Core.php on line 145
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора ICQ Number
Иван Шумков
Участник форума



Зарегистрирован: 30.12.2004
Сообщ.: 229
Карма: 6
   поощрить/наказать

Откуда: Россия, Санкт-Петербург

СообщениеДобавлено: Чт Фев 19, 2009 8:24 pm (спустя 7 дней 3 часа 44 минуты; написано за 36 секунд)
   Заголовок сообщения:
Ответить с цитатой

Еще вопрос, как почистить записи по тегу понятно, но возможно ли выбрать все записи по тегу?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора ICQ Number
Иван Шумков
Участник форума



Зарегистрирован: 30.12.2004
Сообщ.: 229
Карма: 6
   поощрить/наказать

Откуда: Россия, Санкт-Петербург

СообщениеДобавлено: Чт Фев 19, 2009 9:18 pm (спустя 54 минуты; написано за 1 минуту 35 секунд)
   Заголовок сообщения:
Ответить с цитатой

Вот код:
Код (php): скопировать код в буфер обмена
        $memcached = new Dklab_Cache_Backend_MemcachedMultiload($backendConfig);
        $backend = new Dklab_Cache_Backend_TagEmuWrapper($memcached);
        $cache = Zend_Cache::factory('Core', $backend, $config);
        Zend_Registry::set('cache', $cache);

        $cache = Zend_Registry::get('cache');
        $users = new Users;
        foreach ($users->fetchAll(null,null,10) as $user) {
                $cache->save($user, "user_$user->id", array('online_users'));
        }
       
        $userSessions = $cache->load('online_users');
        $this->view->users = array();
        if ($userSessions) {     // <--- FALSE Why????
            foreach ($userSessions as $session) {
                    //if ($session->sex == $this->_getParam('sex')) {
                        $this->view->users[] = $session;
                    //}
            }
        }
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора ICQ Number
Иван Шумков
Участник форума



Зарегистрирован: 30.12.2004
Сообщ.: 229
Карма: 6
   поощрить/наказать

Откуда: Россия, Санкт-Петербург

СообщениеДобавлено: Чт Фев 19, 2009 10:09 pm (спустя 51 минуту; написано за 1 минуту 25 секунд)
   Заголовок сообщения:
Ответить с цитатой

Очистка по тегу работает:
Код (php): скопировать код в буфер обмена
        $cache->clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG, array("online_users"));

        $this->view->users = array();
        foreach($ids as $id) {
            if ($id)
                 $this->view->users[] = $cache->load("user_$id");
        }
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора ICQ Number
Иван Шумков
Участник форума



Зарегистрирован: 30.12.2004
Сообщ.: 229
Карма: 6
   поощрить/наказать

Откуда: Россия, Санкт-Петербург

СообщениеДобавлено: Чт Фев 19, 2009 10:48 pm (спустя 39 минут; написано за 1 минуту 20 секунд)
   Заголовок сообщения:
Ответить с цитатой

Разобрал по косточкам вашу библиотеку и понял почему получить список всех тегированных ключей получить пока не возможно.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора ICQ Number
bæv
Модератор «Дзена»



Зарегистрирован: 27.08.2003
Сообщ.: 5747
Карма: ∞
   поощрить/наказать


СообщениеДобавлено: Пт Фев 20, 2009 12:24 am (спустя 1 час 35 минут; написано за 29 секунд)
   Заголовок сообщения:
Ответить с цитатой

Иван Шумков, Вы в курсе, что собственное сообщение можно редактировать?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Ruscon
Заглянувший



Зарегистрирован: 20.02.2009
Сообщ.: 1
Карма: -1
   поощрить/наказать


СообщениеДобавлено: Пт Фев 20, 2009 3:27 pm (спустя 15 часов 3 минуты; написано за 2 минуты 35 секунд)
   Заголовок сообщения:
Ответить с цитатой

Добрый...

Скачал либку, попытался посмотреть примеры. Почти во всех одни и те же ошибки

www.home.my/Dklab_Cache/t/Dklab_Cache/Frontend/010_include.phpt

--TEST--
Dklab_Cache_Frontend: syntax correctness

--FILE--
<!--error--><br />
<b>Fatal error</b>: Uncaught exception 'Zend_Cache_Exception' with message 'The memcache extension must be loaded for using this backend !' in Z:\home\home.my\www\Dklab_Cache\ZendFramework\lib\Zend\Cache.php:141
Stack trace:
#0 Z:\home\home.my\www\Dklab_Cache\ZendFramework\lib\Zend\Cache\Backend\Memcached.php(97): Zend_Cache::throwException('The memcache ex...')
#1 Z:\home\home.my\www\Dklab_Cache\t\Dklab_Cache\init.php(16): Zend_Cache_Backend_Memcached-&gt;__construct(Array)
#2 Z:\home\home.my\www\Dklab_Cache\t\Dklab_Cache\Frontend\init.php(2): require_once('Z:\home\home.ca...')
#3 Z:\home\home.my\www\Dklab_Cache\t\Dklab_Cache\Frontend\010_include.phpt(6): require('Z:\home\home.ca...')
#4 {main}
  thrown in <b>Z:\home\home.my\www\Dklab_Cache\ZendFramework\lib\Zend\Cache.php</b> on line <b>141</b><br />
<script language=JavaScript src='/denwer/errors/phperror_js.php'></script>

Это мои корявые руки или что-то другое ? =)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Иван Шумков
Участник форума



Зарегистрирован: 30.12.2004
Сообщ.: 229
Карма: 6
   поощрить/наказать

Откуда: Россия, Санкт-Петербург

СообщениеДобавлено: Пт Фев 20, 2009 5:43 pm (спустя 2 часа 16 минут; написано за 34 секунды)
   Заголовок сообщения:
Ответить с цитатой

Да ваши. Вам необходимо подключить экстеншен memcache к php:
Цитата:
The memcache extension must be loaded for using this backend !
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора ICQ Number
Дмитрий Кóтеров
Администратор



Зарегистрирован: 10.03.2003
Сообщ.: 13553
Карма: 405
   поощрить/наказать


СообщениеДобавлено: Вс Фев 22, 2009 1:14 am (спустя 1 день 7 часов 30 минут; написано за 2 минуты 51 секунду)
   Заголовок сообщения:
Ответить с цитатой

Иван Шумков писал(а):
Catchable fatal error: Argument 1 passed to Zend_Cache_Core::setBackend() must be an instance of Zend_Cache_Backend, instance of Dklab_Cache_Backend_TagEmuWrapper given
Нет, потому что не совсем понятно (по описанным выше причинам), как это вообще можно исправить. Ошибка скорее в архитектуре Zend_Cache_Core. Вы посмотрите, какой там мусор в Zend_Cache_Backend: метод getTmpDir(), _loggerSanity() и т.д. Ну при чем здесь абстракция кэша и "временная директория"? Совсем не хочется эту помойку наследовать в своих классах. И это при том, что есть четкий Zend_Cache_Backend_Interface. Почему они его не используют в этом type hint, для меня загадка. Нужно писать им в багтрак, на самом деле.
Иван Шумков писал(а):
как почистить записи по тегу понятно, но возможно ли выбрать все записи по тегу?
Нет, такой функционал не поддерживается, т.к. эта задача выходит за рамки паттерна "кэширование".
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
ort
Заглянувший



Зарегистрирован: 20.05.2009
Сообщ.: 1
Карма: 0
   поощрить/наказать


СообщениеДобавлено: Ср Мая 20, 2009 5:50 pm (спустя 2 месяца 26 дней 16 часов 36 минут; написано за 1 минуту 58 секунд)
   Заголовок сообщения:
Ответить с цитатой

Такой вопрос, для тегов введена поддержка multi-get, а просто для запросов get через бэкенд TagEmuWrapper работают мульти запросы?
т.е. (Dklab_Cache_Backend_TagEmuWrapper).load(array('key1','key2'));

UPD или я что то путаю? )
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Дмитрий Кóтеров
Администратор



Зарегистрирован: 10.03.2003
Сообщ.: 13553
Карма: 405
   поощрить/наказать


СообщениеДобавлено: Ср Июл 01, 2009 5:24 pm (спустя 1 месяц 10 дней 23 часа 33 минуты; написано за 33 секунды)
   Заголовок сообщения:
Ответить с цитатой

В TagEmuWrapper поддержка multi-get отсутствует.

Milti-get реализован только в backend-классе Dklab_Cache_Backend_MemcachedMultiload.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Валенок
Участник форума



Зарегистрирован: 06.04.2006
Сообщ.: 521
Карма: -1
   поощрить/наказать


СообщениеДобавлено: Сб Окт 24, 2009 6:20 pm (спустя 3 месяца 23 дня 56 минут; написано за 30 секунд)
   Заголовок сообщения:
Ответить с цитатой

Попробовал засубмитить им баг
http://framework.zend.com/issues/browse/ZF-8139
Не знаю уж, как они отреагируют :)

Спасибо за библиотеку!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение MSN Messenger ICQ Number
Показать сообщения:   
Начaть нoвую тeму   Ответить на тему Часовой пояс: GMT + 3 (Москва)
На страницу 1, 2  След.
Страница 1 из 2   
Ответить
Имя
Тема
     

Отключить в этом сообщении BBCode
Отключить в этом сообщении смайлики
    HTML ВЫКЛЮЧЕН
BBCode ВКЛЮЧЕН
Смайлики ВКЛЮЧЕНЫ
Вы не можете начинать темы. Вы можете отвечать на сообщения. Вы не можете редактировать свои сообщения. Вы не можете удалять свои сообщения. Вы не можете голосовать в опросах. Вы не можете прилагать файлы к сообщениям. Вы можете скачивать файлы.
  XML