| Автор |
Сообщение |
Дмитрий Кóтеров
Администратор

Зарегистрирован: 10.03.2003
Сообщ.: 13553
Карма: 405 поощрить/наказать
|
|
| Вернуться к началу |
|
 |
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 использовать не нужно, потому что он глючный. Прочитайте, пожалуйста, статью внимательно от начала до конца.
|
|
| Вернуться к началу |
|
 |
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 раз
|
|
| Вернуться к началу |
|
 |
Дмитрий Кóтеров
Администратор

Зарегистрирован: 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
|
|
| Вернуться к началу |
|
 |
Дмитрий Кóтеров
Администратор

Зарегистрирован: 10.03.2003
Сообщ.: 13553
Карма: 405 поощрить/наказать
|
Добавлено: Ср Мая 21, 2008 10:40 am (спустя 10 минут; написано за 1 минуту 46 секунд)
Заголовок сообщения:
|
|
| Кстати говоря, про отдельный memcached для тэгов мысли были. В одной из следующих версий это, вероятно, появится (тем более что реализовать совсем просто, не выходя за рамки идеологии). Но мне думается, что это не даст существенного эффекта все же. По хорошему, надо пробовать так и так на реальном нагруженном проекте, а потом сравнивать число запросов за день, которое прошло мимо кэша.
|
|
| Вернуться к началу |
|
 |
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-а" |
Хм. Очень интересный патч. Но скажите, если я ставлю число секунд равным бесконечности (для тагов), имеет ли смысл данный патч вообще? Судя по коду, не должен бы...
Спасибо. Вот это очень ценная информация! В скором времени проапдейчу библиотеку.
|
|
| Вернуться к началу |
|
 |
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); } |
|
|
| Вернуться к началу |
|
 |
Дмитрий Кóтеров
Администратор

Зарегистрирован: 10.03.2003
Сообщ.: 13553
Карма: 405 поощрить/наказать
|
Добавлено: Вт Июн 24, 2008 1:51 am (спустя 5 дней 10 часов 47 минут; написано за 1 минуту 16 секунд)
Заголовок сообщения:
|
|
| Э-эээ... ну вы явно передаете id слота, насколько я понимаю, а это есть большое зло (как указано в статье). Потому что логика формирования этого ID оказывается размазанной по коду. Идеология слотов как раз призвана бороться с таким размазыванием, чтобы все возможные слоты были всегда под рукой.
|
|
| Вернуться к началу |
|
 |
Ivan1986
Участник форума
Предупреждений: 1
Зарегистрирован: 09.10.2007
Сообщ.: 717
Карма: 32 поощрить/наказать
|
Добавлено: Вт Июн 24, 2008 8:03 pm (спустя 18 часов 12 минут; написано за 2 минуты 59 секунд)
Заголовок сообщения:
|
|
Да, я явно передаю id и теги, мое мнение что нужно сделать возможность использования обоих вариантов. Так как php не компилируемый язык, то включение огромного числа мелких файлов - а такими у вас являются все файлы, описывающие теги и слоты сильно повлияет на производительность, особенно в случае отсутствия кеширования байткода (оно есть не везде), по крайне мере возможность ИМХО добавить нужно.
|
|
| Вернуться к началу |
|
 |
Дмитрий Кóтеров
Администратор

Зарегистрирован: 10.03.2003
Сообщ.: 13553
Карма: 405 поощрить/наказать
|
Добавлено: Сб Июл 05, 2008 11:54 am (спустя 10 дней 15 часов 50 минут; написано за 49 секунд)
Заголовок сообщения:
|
|
| Ivan1986 писал(а): |
|
ильно повлияет на производительность |
Замеры - в студию.
| Ivan1986 писал(а): |
|
особенно в случае отсутствия кеширования байткода |
Конечно! Особенно это актуально, если виртуальная машина PHP реализована на Прологе внутри БЭСМ-6.
|
|
| Вернуться к началу |
|
 |
Ivan1986
Участник форума
Предупреждений: 1
Зарегистрирован: 09.10.2007
Сообщ.: 717
Карма: 32 поощрить/наказать
|
Добавлено: Ср Июл 09, 2008 11:08 am (спустя 3 дня 23 часа 14 минут; написано за 1 минуту 17 секунд)
Заголовок сообщения:
|
|
| Дмитрий Кóтеров писал(а): |
|
Замеры - в студию. |
Ну фактически у вас в 49 набле - Подключение всех файлов по одному, eAccelerator выключен: 911 мс. Включение одного большого слитого файла, eAccelerator выключен: 458 мс. На виртуальном хостинге может и не быть акселератора, и никто не разрешит поставить...
|
|
| Вернуться к началу |
|
 |
Миша Спларов
Участник форума

Зарегистрирован: 17.11.2003
Сообщ.: 799
Карма: 63 поощрить/наказать
Откуда: Россия, Томск
|
Добавлено: Ср Июл 09, 2008 11:32 am (спустя 24 минуты; написано за 1 минуту 44 секунды)
Заголовок сообщения:
|
|
| Ivan1986 писал(а): |
|
На виртуальном хостинге может и не быть акселератора, и никто не разрешит поставить... |
Проекту на виртуальном хостинге и не критичен акселератор, и не для таких проектов делаются описанные в набле приёмы.
|
|
| Вернуться к началу |
|
 |
Ivan1986
Участник форума
Предупреждений: 1
Зарегистрирован: 09.10.2007
Сообщ.: 717
Карма: 32 поощрить/наказать
|
Добавлено: Ср Июл 09, 2008 2:26 pm (спустя 2 часа 53 минуты; написано за 38 секунд)
Заголовок сообщения:
|
|
ну в принципе да, не спорю... Однако насчет опционально почему бы не добавить...
|
|
| Вернуться к началу |
|
 |
Дмитрий Кóтеров
Администратор

Зарегистрирован: 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 раз
|
|
| Вернуться к началу |
|
 |
andry_
Гость
Карма: 367 поощрить/наказать
|
Добавлено: Чт Ноя 20, 2008 10:59 pm (спустя 3 месяца 1 день 20 часов 12 минут; написано за 3 минуты 12 секунд)
Заголовок сообщения:
|
|
Я что-то не поюму смысла либы по тегированию, она же не может работать. Не проверял, но судя по коду
так в текущей версии пхп нет такой и когда появиться не понятно. Насколько я знаю даже это патч для мемкеша еще стабильно не работает. Это теоритически размышления или я что-то не правильно понял?
|
|
| Вернуться к началу |
|
 |
Дмитрий Кóтеров
Администратор

Зарегистрирован: 10.03.2003
Сообщ.: 13553
Карма: 405 поощрить/наказать
|
Добавлено: Сб Ноя 22, 2008 7:32 pm (спустя 1 день 20 часов 33 минуты; написано за 1 минуту 17 секунд)
Заголовок сообщения:
|
|
Рекомендую прочитать статью от начала и до конца, она небольшая. Библиотека MemcachedTag.php вообще в статье не рассматривается, она в дистрибутиве только в качестве "довеска", на будущее, если вдруг патч про таги появится. Пользоваться надо TagEmuWrapper.php, она работает и даже покрыта тестами.
|
|
| Вернуться к началу |
|
 |
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 секунд)
Заголовок сообщения:
|
|
Я так понял что вы дальше не поддерживаете эту библиотеку? Где можно получить последнюю версию с оптимизацией количества запросов?
|
|
| Вернуться к началу |
|
 |
Дмитрий Кóтеров
Администратор

Зарегистрирован: 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...
|
|
| Вернуться к началу |
|
 |
Дмитрий Кóтеров
Администратор

Зарегистрирован: 10.03.2003
Сообщ.: 13553
Карма: 405 поощрить/наказать
|
|
| Вернуться к началу |
|
 |
Дмитрий Кóтеров
Администратор

Зарегистрирован: 10.03.2003
Сообщ.: 13553
Карма: 405 поощрить/наказать
|
Добавлено: Ср Фев 04, 2009 8:20 pm (спустя 2 часа 11 минут; написано за 21 секунду)
Заголовок сообщения:
|
|
Восстановил, сделал основной версией на сайте. Скачать можно, где обычно: http://dklab.ru/lib/Dklab_Cache/
|
|
| Вернуться к началу |
|
 |
Дмитрий Кóтеров
Администратор

Зарегистрирован: 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 - реальный выход из ситуации.
|
|
| Вернуться к началу |
|
 |
Иван Шумков
Участник форума

Зарегистрирован: 30.12.2004
Сообщ.: 229
Карма: 6 поощрить/наказать
Откуда: Россия, Санкт-Петербург
|
Добавлено: Пн Фев 09, 2009 12:02 pm (спустя 4 дня 15 часов 34 минуты; написано за 16 секунд)
Заголовок сообщения:
|
|
| Бесконечно благодарен!
|
|
| Вернуться к началу |
|
 |
Иван Шумков
Участник форума

Зарегистрирован: 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 |
|
|
| Вернуться к началу |
|
 |
Иван Шумков
Участник форума

Зарегистрирован: 30.12.2004
Сообщ.: 229
Карма: 6 поощрить/наказать
Откуда: Россия, Санкт-Петербург
|
Добавлено: Чт Фев 19, 2009 8:24 pm (спустя 7 дней 3 часа 44 минуты; написано за 36 секунд)
Заголовок сообщения:
|
|
| Еще вопрос, как почистить записи по тегу понятно, но возможно ли выбрать все записи по тегу?
|
|
| Вернуться к началу |
|
 |
Иван Шумков
Участник форума

Зарегистрирован: 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; //} } } |
|
|
| Вернуться к началу |
|
 |
Иван Шумков
Участник форума

Зарегистрирован: 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"); } |
|
|
| Вернуться к началу |
|
 |
Иван Шумков
Участник форума

Зарегистрирован: 30.12.2004
Сообщ.: 229
Карма: 6 поощрить/наказать
Откуда: Россия, Санкт-Петербург
|
Добавлено: Чт Фев 19, 2009 10:48 pm (спустя 39 минут; написано за 1 минуту 20 секунд)
Заголовок сообщения:
|
|
| Разобрал по косточкам вашу библиотеку и понял почему получить список всех тегированных ключей получить пока не возможно.
|
|
| Вернуться к началу |
|
 |
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->__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 ! |
|
|
| Вернуться к началу |
|
 |
Дмитрий Кóтеров
Администратор

Зарегистрирован: 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, для меня загадка. Нужно писать им в багтрак, на самом деле.
| Иван Шумков писал(а): |
|
как почистить записи по тегу понятно, но возможно ли выбрать все записи по тегу? |
Нет, такой функционал не поддерживается, т.к. эта задача выходит за рамки паттерна "кэширование".
|
|
| Вернуться к началу |
|
 |
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.
|
|
| Вернуться к началу |
|
 |
Валенок
Участник форума

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