conf писал(а):Вообще мемкеш с тегами все еще глючит
С наскока решить не получилось, попробую позже. По хорошему надо бы этот тест гонять на всех драйверах.
Модератор: phpBB2 - administrators
conf писал(а):Вообще мемкеш с тегами все еще глючит
function testInvalidKeyOnMultipleGet() {
$id1 = 'white space';
$id2 = 'nowhitespace';
$id3 = 'with_under_score';
$this->cache->set($id1, 'value1');
$this->cache->set($id2, 'value2');
$this->cache->set($id3, 'value3');
$result = $this->cache->get(array($id1, $id2, $id3));
$this->assertEqual('value1', $result[$id1]); // error!
$this->assertEqual('value2', $result[$id2]);
$this->assertEqual('value3', $result[$id3]);
}
------------------------------------------------------------------------
r7965 | conf | 2009-06-24 16:21:28 +0500 (Срд, 24 Июн 2009) | 5 lines
Измененные пути:
M /3.x/trunk/limb/cache2/src/lmbTaggableCache.class.php
M /3.x/trunk/limb/cache2/tests/cases/lmbTaggableCacheTest.class.php
-- changed strict bool check to non-strict in lmbTaggableCache::_isTagsValid due to memcache returns values as strings
-- added check to non-existent tags on creating tag container
-- default tag_key changed from false (boolean) to 'default' (string)
-- increment in deleteByTag changed to safeIncrement
-- fixed tests
------------------------------------------------------------------------
hidrarg писал(а):я тут попользовал пакет cache2. Есть два замечания.
1. lmbTaggableCache "не умеет" работать с соединением, которое выставляет собственный префикс к ключу. Точнее проблема в самом соединении - при мульте гетте оно возвращает массив, в котором у ключей не обрезан префикс.
2. Насколько я понял, одновременное использование lmbMintCache и lmbTaggableCache не возможно, а жаль. Две отличные технологии. Как их безболезненно объединить (без влезания в сами классы и дублирования кода) - пока не знаю, а вопрос собственно в другом - может стоит запретить это оборачивание в lmbCacheTools::createCache?
hidrarg писал(а):И еще - я не оставляю надежды написать нормальный сервис для упрощения работы с кешом. Все настройки должны быть в одном месте. Меня просто убивает задание ttl и ключей в макро коде (вот совпадут разок ключи...). Завтра выложу один вариант.
hidrarg писал(а):И еще - я не оставляю надежды написать нормальный сервис для упрощения работы с кешом. Все настройки должны быть в одном месте. Меня просто убивает задание ttl и ключей в макро коде (вот совпадут разок ключи...). Завтра выложу один вариант.
Настройки в одном месте тебя ни спасут, т.к. какой-то идентификатор тебе в макро придется писать. Задавать ttl там же, где задается содержимое ключа, вроде бы тоже логично. Есть вариант - считать ключем MD5 от текста внутри cache-тэга. Возьмешься?
CacheService :: create()->callCache('blog_message', array('id' => $id), array('lmbActiveRecord', 'findById'), array('BlogMessage', $id, false))hidrarg писал(а):Спасли. В макро передаем имя кеша, а вся остальная информация хранится в конфиге. На основании имени и передаваемых переменных генерится ключ, ttl и теги.
Вот код класса, который я использую в проекте: http://dumpz.org/16980/. Может call_user_func_array это и не совсем хорошо, но зато невероятно удобно и просто. Используется примерно так:
- Код: Выделить всё
CacheService :: create()->callCache('blog_message', array('id' => $id), array('lmbActiveRecord', 'findById'), array('BlogMessage', $id, false))
Класс умеет строить зависимости от таблиц (создается тег по имени таблицы) и от отдельных объектов (тег от имени таблицы и id объекта).
Если принципиальных возражений нет, то могу заняться чистовой реализацией.
conf писал(а):Кто-нибудь может рассказать практическое применение lmbDbCacheConnection? Зачем хранить кэш в базе? Тормозить же будет.
korchasa писал(а):conf писал(а):Кто-нибудь может рассказать практическое применение lmbDbCacheConnection? Зачем хранить кэш в базе? Тормозить же будет.
На shared-хостингах, где нет нормальных кэшей, а соединение с базой уже открыто, это будет даже быстрее чем файлы.
conf писал(а):korchasa писал(а):conf писал(а):Кто-нибудь может рассказать практическое применение lmbDbCacheConnection? Зачем хранить кэш в базе? Тормозить же будет.
На shared-хостингах, где нет нормальных кэшей, а соединение с базой уже открыто, это будет даже быстрее чем файлы.
Тогда его надо допиливать. Там используется lmbInsertOnDuplicateUpdateQuery, который реализован только для MySQL, для всех остальных кидается Exception.
Index: src/drivers/lmbCacheMemcacheConnection.class.php
===================================================================
--- src/drivers/lmbCacheMemcacheConnection.class.php (revision 8187)
+++ src/drivers/lmbCacheMemcacheConnection.class.php (working copy)
@@ -32,9 +32,17 @@
$this->dsn->setHost($this->default_host);
if(!$this->dsn->getPort())
- $this->dsn->setPort($this->default_port);
+ {
+ if('/' == $this->dsn->getPath())
+ $this->dsn->setPort($this->default_port);
+ else
+ {
+ $this->dsn->setHost('unix://'.$this->dsn->getPath());
+ $this->dsn->setPort(0);
+ }
+ }
- $this->_server_id = $dsn->toString(array('host', 'port'));
+ $this->_server_id = $dsn->toString(array('host', 'port', 'path'));
}
function getType()
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1