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

Dklab_Cache: правильное кэширование — тэги в memcached, namespaces, статистика (Дмитрий Котеров)
Goto page 1, 2  Next
Author Message
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 411
   поощрить/наказать


PostPosted: Wed Apr 23, 2008 12:44 am (написано за 2 секунды)
   Post subject: Dklab_Cache: правильное кэширование — тэги в memcached, namespaces, статистика
Reply with quote

dklab.ru/lib/Dklab_Cache/
Back to top
View user's profile Send private message Send e-mail
Devgru
Guest





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


PostPosted: Wed May 07, 2008 2:00 pm (спустя 14 дней 13 часов 16 минут; написано за 4 секунды)
   Post subject: вопрос
Reply with quote

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



Joined: 10 Mar 2003
Posts: 13665
Карма: 411
   поощрить/наказать


PostPosted: Mon May 12, 2008 1:17 am (спустя 4 дня 11 часов 16 минут; написано за 58 секунд)
   Post subject:
Reply with quote

Точнее будет сказать, модифицированный memcached использовать не нужно, потому что он глючный.
Прочитайте, пожалуйста, статью внимательно от начала до конца.
Back to top
View user's profile Send private message Send e-mail
symbix
Guest





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


PostPosted: Wed May 21, 2008 3:10 am (спустя 9 дней 1 час 53 минуты; написано за 6 минут 1 секунду)
   Post subject: хммммм
Reply with quote

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

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

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

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

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

3) multi-get не используется? или я не заметил?
Back to top
Guest






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


PostPosted: Wed May 21, 2008 3:18 am (спустя 7 минут; написано за 11 секунд)
   Post subject:
Reply with quote

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



Joined: 10 Mar 2003
Posts: 13665
Карма: 411
   поощрить/наказать


PostPosted: Wed May 21, 2008 10:20 am (спустя 7 часов 2 минуты; написано за 2 минуты 24 секунды)
   Post subject:
Reply with quote

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

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

Last edited by Дмитрий Котеров on Wed May 21, 2008 10:35 am; edited 1 time in total
Back to top
View user's profile Send private message Send e-mail
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 411
   поощрить/наказать


PostPosted: Wed May 21, 2008 10:29 am (спустя 9 минут; написано за 1 минуту 16 секунд)
   Post subject:
Reply with quote

symbix wrote:
для тэгов был бы полезен prolongate patch (продление жизни при гете, управляемое флагом)
А вот насчет этого можно чуть подробнее? Разве в LRU и так не подразумевается, что при каждом чтении вероятность вытеснения снижается?
symbix wrote:
multi-get не используется? или я не заметил?
Не используется, хотя очень бы хотелось: это здорово ускорило бы работу. К сожалению, в расширении PHP memcache он не поддерживается пока: ru2.php.net/manual/en/book.memcache.php
Back to top
View user's profile Send private message Send e-mail
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 411
   поощрить/наказать


PostPosted: Wed May 21, 2008 10:40 am (спустя 10 минут; написано за 1 минуту 46 секунд)
   Post subject:
Reply with quote

Кстати говоря, про отдельный memcached для тэгов мысли были. В одной из следующих версий это, вероятно, появится (тем более что реализовать совсем просто, не выходя за рамки идеологии). Но мне думается, что это не даст существенного эффекта все же. По хорошему, надо пробовать так и так на реальном нагруженном проекте, а потом сравнивать число запросов за день, которое прошло мимо кэша.
Back to top
View user's profile Send private message Send e-mail
symbix
Guest





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


PostPosted: Sun May 25, 2008 5:24 am (спустя 3 дня 18 часов 44 минуты; написано за 7 минут 55 секунд)
   Post subject:
Reply with quote

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

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






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


PostPosted: Sun May 25, 2008 5:46 am (спустя 21 минуту; написано за 2 минуты 23 секунды)
   Post subject:
Reply with quote

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



Joined: 10 Mar 2003
Posts: 13665
Карма: 411
   поощрить/наказать


PostPosted: Sun Jun 15, 2008 10:28 pm (спустя 21 день 16 часов 42 минуты; написано за 1 минуту 33 секунды)
   Post subject:
Reply with quote

Гость wrote:
Таким образом логика меняется с "протухнуть через N секунд после set-а" на "протухнуть через N секунд после последнего set-а или get-а"
Хм. Очень интересный патч. Но скажите, если я ставлю число секунд равным бесконечности (для тагов), имеет ли смысл данный патч вообще? Судя по коду, не должен бы...
symbix wrote:
Поддерживается.
php.net/memcache_get
Спасибо. Вот это очень ценная информация! В скором времени проапдейчу библиотеку.
Back to top
View user's profile Send private message Send e-mail
Ivan1986
Участник форума
Warnings: 2


Joined: 09 Oct 2007
Posts: 807
Карма: 39
   поощрить/наказать


PostPosted: Wed Jun 18, 2008 3:03 pm (спустя 2 дня 16 часов 35 минут; написано за 2 минуты)
   Post subject:
Reply with quote

Еще бы хорошо добавить такую функцию добавить в библиотеку - слоты это конечно хорошо, но черезчур ООП это иногда не есть хорошо
Code (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 (www.php.net/call_user_func_array)($this->_obj?array (www.php.net/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 (www.php.net/array)(), $lifeTime=null)
{
        return new Cache_Thru($Cacher, $obj, $id, $tags, $lifeTime);
}
Back to top
View user's profile Send private message Send e-mail
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 411
   поощрить/наказать


PostPosted: Tue Jun 24, 2008 1:51 am (спустя 5 дней 10 часов 47 минут; написано за 1 минуту 16 секунд)
   Post subject:
Reply with quote

Э-эээ... ну вы явно передаете id слота, насколько я понимаю, а это есть большое зло (как указано в статье). Потому что логика формирования этого ID оказывается размазанной по коду. Идеология слотов как раз призвана бороться с таким размазыванием, чтобы все возможные слоты были всегда под рукой.
Back to top
View user's profile Send private message Send e-mail
Ivan1986
Участник форума
Warnings: 2


Joined: 09 Oct 2007
Posts: 807
Карма: 39
   поощрить/наказать


PostPosted: Tue Jun 24, 2008 8:03 pm (спустя 18 часов 12 минут; написано за 2 минуты 59 секунд)
   Post subject:
Reply with quote

Да, я явно передаю id и теги, мое мнение что нужно сделать возможность использования обоих вариантов.
Так как php не компилируемый язык, то включение огромного числа мелких файлов - а такими у вас являются все файлы, описывающие теги и слоты сильно повлияет на производительность, особенно в случае отсутствия кеширования байткода (оно есть не везде), по крайне мере возможность ИМХО добавить нужно.
Back to top
View user's profile Send private message Send e-mail
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 411
   поощрить/наказать


PostPosted: Sat Jul 05, 2008 11:54 am (спустя 10 дней 15 часов 50 минут; написано за 49 секунд)
   Post subject:
Reply with quote

Ivan1986 wrote:
ильно повлияет на производительность
Замеры - в студию.
Ivan1986 wrote:
особенно в случае отсутствия кеширования байткода
Конечно! Особенно это актуально, если виртуальная машина PHP реализована на Прологе внутри БЭСМ-6.
Back to top
View user's profile Send private message Send e-mail
Ivan1986
Участник форума
Warnings: 2


Joined: 09 Oct 2007
Posts: 807
Карма: 39
   поощрить/наказать


PostPosted: Wed Jul 09, 2008 11:08 am (спустя 3 дня 23 часа 14 минут; написано за 1 минуту 17 секунд)
   Post subject:
Reply with quote

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

На виртуальном хостинге может и не быть акселератора, и никто не разрешит поставить...
Back to top
View user's profile Send private message Send e-mail
Миша Спларов
Участник форума



Joined: 17 Nov 2003
Posts: 821
Карма: 65
   поощрить/наказать

Location: Россия, Москва

PostPosted: Wed Jul 09, 2008 11:32 am (спустя 24 минуты; написано за 1 минуту 44 секунды)
   Post subject:
Reply with quote

Ivan1986 wrote:
На виртуальном хостинге может и не быть акселератора, и никто не разрешит поставить...
Проекту на виртуальном хостинге и не критичен акселератор, и не для таких проектов делаются описанные в набле приёмы.
Back to top
View user's profile Send private message
Ivan1986
Участник форума
Warnings: 2


Joined: 09 Oct 2007
Posts: 807
Карма: 39
   поощрить/наказать


PostPosted: Wed Jul 09, 2008 2:26 pm (спустя 2 часа 53 минуты; написано за 38 секунд)
   Post subject:
Reply with quote

ну в принципе да, не спорю...
Однако насчет опционально почему бы не добавить...
Back to top
View user's profile Send private message Send e-mail
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 411
   поощрить/наказать


PostPosted: Tue Aug 19, 2008 2:46 am (спустя 1 месяц 9 дней 12 часов 20 минут; написано за 6 минут 24 секунды)
   Post subject:
Reply with quote

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

Как работать

Используйте везде вместо Zend_Cache_Backend_Memcached расширенный класс Dklab_Cache_Backend_MemcachedMultiload, тогда поддержка multi-get включется и будет автоматически доступна для TagEmuWrapper:
Code (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 запросов при использовании тагов сделать не получится, это теоретический предел.

Last edited by Дмитрий Котеров on Wed Feb 04, 2009 8:19 pm; edited 1 time in total
Back to top
View user's profile Send private message Send e-mail
andry_
Guest





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


PostPosted: Thu Nov 20, 2008 10:59 pm (спустя 3 месяца 1 день 20 часов 12 минут; написано за 3 минуты 12 секунд)
   Post subject:
Reply with quote

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



Joined: 10 Mar 2003
Posts: 13665
Карма: 411
   поощрить/наказать


PostPosted: Sat Nov 22, 2008 7:32 pm (спустя 1 день 20 часов 33 минуты; написано за 1 минуту 17 секунд)
   Post subject:
Reply with quote

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

Пользоваться надо TagEmuWrapper.php, она работает и даже покрыта тестами.
Back to top
View user's profile Send private message Send e-mail
jurm
Guest





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


PostPosted: Fri Jan 23, 2009 12:19 pm (спустя 2 месяца 16 часов 47 минут; написано за 2 минуты 29 секунд)
   Post subject:
Reply with quote

Есть следующий вопрос. У вас в листинге 2 происходит такое назначение:
Code (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
Back to top
Иван Шумков
Участник форума



Joined: 30 Dec 2004
Posts: 229
Карма: 6
   поощрить/наказать

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

PostPosted: Tue Feb 03, 2009 8:58 pm (спустя 11 дней 8 часов 39 минут; написано за 50 секунд)
   Post subject:
Reply with quote

Я так понял что вы дальше не поддерживаете эту библиотеку?
Где можно получить последнюю версию с оптимизацией количества запросов?
Back to top
View user's profile Send private message
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 411
   поощрить/наказать


PostPosted: Wed Feb 04, 2009 5:58 pm (спустя 20 часов 59 минут; написано за 1 минуту 50 секунд)
   Post subject:
Reply with quote

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

    public function setBackend(Zend_Cache_Backend $backendObject)

А было -

    public function setBackend($backendObject)

На самом деле, это полный беспредел, потому что в классе Zend_Cache_Backend завязки за файловую систему и вообще всякий мусор, который в мемкэш-бакенде совершенно не нужен. Куда только катится ZF...
Back to top
View user's profile Send private message Send e-mail
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 411
   поощрить/наказать


PostPosted: Wed Feb 04, 2009 6:09 pm (спустя 10 минут; написано за 29 секунд)
   Post subject:
Reply with quote

Иван Шумков wrote:
Dklab_Cache_Backend_MemcachedMultiload
Черт. Потерял я ее, пока в trunc код библиотеки выделял... причем в кэше Гугла она осталась:
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

Попробую из бэкапа достать.
Back to top
View user's profile Send private message Send e-mail
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 411
   поощрить/наказать


PostPosted: Wed Feb 04, 2009 8:20 pm (спустя 2 часа 11 минут; написано за 21 секунду)
   Post subject:
Reply with quote

Восстановил, сделал основной версией на сайте.
Скачать можно, где обычно: dklab.ru/lib/Dklab_Cache/
Back to top
View user's profile Send private message Send e-mail
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 411
   поощрить/наказать


PostPosted: Wed Feb 04, 2009 8:28 pm (спустя 7 минут; написано за 3 минуты 38 секунд)
   Post subject:
Reply with quote

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

В последней версии PHP-шного memcache-модуля 3.0.3 (pecl.php.net/package/memcache), кстати, репликация поддерживается на встроенном уровне, однако она уже больше года как бета, и наши тесты показывают, что она рушит-таки PHP иногда (чего не происходит со стабильной 2.2.4). Так что Dklab_Cache_Backend_ReplicationWrapper - реальный выход из ситуации.
Back to top
View user's profile Send private message Send e-mail
Иван Шумков
Участник форума



Joined: 30 Dec 2004
Posts: 229
Карма: 6
   поощрить/наказать

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

PostPosted: Mon Feb 09, 2009 12:02 pm (спустя 4 дня 15 часов 34 минуты; написано за 16 секунд)
   Post subject:
Reply with quote

Бесконечно благодарен!
Back to top
View user's profile Send private message
Иван Шумков
Участник форума



Joined: 30 Dec 2004
Posts: 229
Карма: 6
   поощрить/наказать

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

PostPosted: Thu Feb 12, 2009 4:39 pm (спустя 3 дня 4 часа 37 минут; написано за 23 секунды)
   Post subject:
Reply with quote

Я так понял вы не поправили эту ошибку в новом релизе?
Code (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 (www.php.net/defined) in /Users/ivanshumkov/Projects/geometria_old/geometria/library/Zend/Cache/Core.php on line 145
Back to top
View user's profile Send private message
Иван Шумков
Участник форума



Joined: 30 Dec 2004
Posts: 229
Карма: 6
   поощрить/наказать

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

PostPosted: Thu Feb 19, 2009 8:24 pm (спустя 7 дней 3 часа 44 минуты; написано за 36 секунд)
   Post subject:
Reply with quote

Еще вопрос, как почистить записи по тегу понятно, но возможно ли выбрать все записи по тегу?
Back to top
View user's profile Send private message
Иван Шумков
Участник форума



Joined: 30 Dec 2004
Posts: 229
Карма: 6
   поощрить/наказать

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

PostPosted: Thu Feb 19, 2009 9:18 pm (спустя 54 минуты; написано за 1 минуту 35 секунд)
   Post subject:
Reply with quote

Вот код:
Code (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 (www.php.net/array)('online_users'));
        }
       
        $userSessions = $cache->load('online_users');
        $this->view->users = array (www.php.net/array)();
        if ($userSessions) {     // <--- FALSE Why????
            foreach ($userSessions as $session) {
                    //if ($session->sex == $this->_getParam('sex')) {
                        $this->view->users[] = $session;
                    //}
            }
        }
Back to top
View user's profile Send private message
Иван Шумков
Участник форума



Joined: 30 Dec 2004
Posts: 229
Карма: 6
   поощрить/наказать

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

PostPosted: Thu Feb 19, 2009 10:09 pm (спустя 51 минуту; написано за 1 минуту 25 секунд)
   Post subject:
Reply with quote

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

        $this->view->users = array (www.php.net/array)();
        foreach($ids as $id) {
            if ($id)
                 $this->view->users[] = $cache->load("user_$id");
        }
Back to top
View user's profile Send private message
Иван Шумков
Участник форума



Joined: 30 Dec 2004
Posts: 229
Карма: 6
   поощрить/наказать

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

PostPosted: Thu Feb 19, 2009 10:48 pm (спустя 39 минут; написано за 1 минуту 20 секунд)
   Post subject:
Reply with quote

Разобрал по косточкам вашу библиотеку и понял почему получить список всех тегированных ключей получить пока не возможно.
Back to top
View user's profile Send private message
bæv
Модератор «Дзена»



Joined: 27 Aug 2003
Posts: 7275
Карма: 9994
   поощрить/наказать


PostPosted: Fri Feb 20, 2009 12:24 am (спустя 1 час 35 минут; написано за 29 секунд)
   Post subject:
Reply with quote

Иван Шумков, Вы в курсе, что собственное сообщение можно редактировать?
Back to top
View user's profile Send private message
Ruscon
Заглянувший



Joined: 20 Feb 2009
Posts: 2
Карма: 0
   поощрить/наказать


PostPosted: Fri Feb 20, 2009 3:27 pm (спустя 15 часов 3 минуты; написано за 2 минуты 35 секунд)
   Post subject:
Reply with quote

Добрый...

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

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>

Это мои корявые руки или что-то другое ? =)
Back to top
View user's profile Send private message
Иван Шумков
Участник форума



Joined: 30 Dec 2004
Posts: 229
Карма: 6
   поощрить/наказать

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

PostPosted: Fri Feb 20, 2009 5:43 pm (спустя 2 часа 16 минут; написано за 34 секунды)
   Post subject:
Reply with quote

Да ваши. Вам необходимо подключить экстеншен memcache к php:
Quote:
The memcache extension must be loaded for using this backend !
Back to top
View user's profile Send private message
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 411
   поощрить/наказать


PostPosted: Sun Feb 22, 2009 1:14 am (спустя 1 день 7 часов 30 минут; написано за 2 минуты 51 секунду)
   Post subject:
Reply with quote

Иван Шумков wrote:
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, для меня загадка. Нужно писать им в багтрак, на самом деле.
Иван Шумков wrote:
как почистить записи по тегу понятно, но возможно ли выбрать все записи по тегу?
Нет, такой функционал не поддерживается, т.к. эта задача выходит за рамки паттерна "кэширование".
Back to top
View user's profile Send private message Send e-mail
ort
Заглянувший



Joined: 20 May 2009
Posts: 1
Карма: 0
   поощрить/наказать


PostPosted: Wed May 20, 2009 5:50 pm (спустя 2 месяца 26 дней 16 часов 36 минут; написано за 1 минуту 58 секунд)
   Post subject:
Reply with quote

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

UPD или я что то путаю? )
Back to top
View user's profile Send private message
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 411
   поощрить/наказать


PostPosted: Wed Jul 01, 2009 5:24 pm (спустя 1 месяц 10 дней 23 часа 33 минуты; написано за 33 секунды)
   Post subject:
Reply with quote

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

Milti-get реализован только в backend-классе Dklab_Cache_Backend_MemcachedMultiload.
Back to top
View user's profile Send private message Send e-mail
Валенок
Участник форума



Joined: 06 Apr 2006
Posts: 520
Карма: -3
   поощрить/наказать


PostPosted: Sat Oct 24, 2009 6:20 pm (спустя 3 месяца 23 дня 56 минут; написано за 30 секунд)
   Post subject:
Reply with quote

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

Спасибо за библиотеку!
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic All times are GMT + 3 Hours
Goto page 1, 2  Next
Page 1 of 2    Email to a Friend.
Post a reply
Username
Subject
Господа спамеры и оптимизаторы!

Вы можете даже и не пытаться вставлять в текст поста ссылки - они все равно автоматически удаляются (вернее, тэги <a> заменяются на тэги <u>).

Но если не поверите и все же попытаетесь - как только увидите, что все безрезультатно, удалите свой пост, пожалуйста. Модераторы тоже люди, нехорошо, если они погрязнут в тоннах спама.
     

Disable BBCode in this post
Disable Smilies in this post
    HTML is OFF
BBCode is ON
Smilies are ON
You cannot post new topics in this forum. You can reply to topics in this forum. You cannot edit your posts in this forum. You cannot delete your posts in this forum. You cannot vote in polls in this forum. You cannot attach files in this forum. You can download files in this forum.
XML