Альтернативный пакет cache

Вопросы, связанные с разработкой пакетов Limb3

Модератор: phpBB2 - administrators

Сообщение korchasa » Чт мар 12, 2009 7:53 pm

conf писал(а):Вообще мемкеш с тегами все еще глючит :(

С наскока решить не получилось, попробую позже. По хорошему надо бы этот тест гонять на всех драйверах.
Аватара пользователя
korchasa
LIMB Developer
 
Сообщения: 935
Зарегистрирован: Чт май 10, 2007 3:47 am

Сообщение conf » Ср июн 24, 2009 2:39 pm

Нашел еще глюк в нашей реализации драйвера мемкеша.
По требованиям протокола мемкеша ключ не должен содержать пробелов и контрольных символов, они заменяются на "_" (видимо в расширении php_memcache), ошибка проявляется при запросе массива ключей (при запросе 1 элемента все ок). Тест для воспроизведения ошибки:
Код: Выделить всё
  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]);
  }
Опыт - это то, что мы получаем, когда не получаем того, что хотим.
http://www.shelfari.com/shein_alexey/shelf - лучшие книги для программистов.
Аватара пользователя
conf
LIMB Addicted
 
Сообщения: 570
Зарегистрирован: Вт мар 25, 2008 6:41 pm
Откуда: Tashkent, Uzbekistan

Сообщение conf » Ср июн 24, 2009 2:54 pm

Можно поставить проверку в add/set, которая будет кидать Exception при неправильном ключе.
Опыт - это то, что мы получаем, когда не получаем того, что хотим.
http://www.shelfari.com/shein_alexey/shelf - лучшие книги для программистов.
Аватара пользователя
conf
LIMB Addicted
 
Сообщения: 570
Зарегистрирован: Вт мар 25, 2008 6:41 pm
Откуда: Tashkent, Uzbekistan

Сообщение conf » Ср июн 24, 2009 3:23 pm

Закоммитил также некоторые исправления в lmbTaggableCache
Код: Выделить всё
------------------------------------------------------------------------
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
------------------------------------------------------------------------
Опыт - это то, что мы получаем, когда не получаем того, что хотим.
http://www.shelfari.com/shein_alexey/shelf - лучшие книги для программистов.
Аватара пользователя
conf
LIMB Addicted
 
Сообщения: 570
Зарегистрирован: Вт мар 25, 2008 6:41 pm
Откуда: Tashkent, Uzbekistan

Re: Альтернативный пакет cache

Сообщение hidrarg » Сб фев 06, 2010 12:08 am

я тут попользовал пакет cache2. Есть два замечания.
1. lmbTaggableCache "не умеет" работать с соединением, которое выставляет собственный префикс к ключу. Точнее проблема в самом соединении - при мульте гетте оно возвращает массив, в котором у ключей не обрезан префикс.
2. Насколько я понял, одновременное использование lmbMintCache и lmbTaggableCache не возможно, а жаль. Две отличные технологии. Как их безболезненно объединить (без влезания в сами классы и дублирования кода) - пока не знаю, а вопрос собственно в другом - может стоит запретить это оборачивание в lmbCacheTools::createCache?

И еще - я не оставляю надежды написать нормальный сервис для упрощения работы с кешом. Все настройки должны быть в одном месте. Меня просто убивает задание ttl и ключей в макро коде (вот совпадут разок ключи...). Завтра выложу один вариант.
hidrarg
LIMB Addicted
 
Сообщения: 54
Зарегистрирован: Чт май 08, 2008 1:17 pm

Re: Альтернативный пакет cache

Сообщение korchasa » Вт фев 09, 2010 1:10 am

hidrarg писал(а):я тут попользовал пакет cache2. Есть два замечания.
1. lmbTaggableCache "не умеет" работать с соединением, которое выставляет собственный префикс к ключу. Точнее проблема в самом соединении - при мульте гетте оно возвращает массив, в котором у ключей не обрезан префикс.
2. Насколько я понял, одновременное использование lmbMintCache и lmbTaggableCache не возможно, а жаль. Две отличные технологии. Как их безболезненно объединить (без влезания в сами классы и дублирования кода) - пока не знаю, а вопрос собственно в другом - может стоит запретить это оборачивание в lmbCacheTools::createCache?

Посмотрю.

hidrarg писал(а):И еще - я не оставляю надежды написать нормальный сервис для упрощения работы с кешом. Все настройки должны быть в одном месте. Меня просто убивает задание ttl и ключей в макро коде (вот совпадут разок ключи...). Завтра выложу один вариант.

Настройки в одном месте тебя ни спасут, т.к. какой-то идентификатор тебе в макро придется писать. Задавать ttl там же, где задается содержимое ключа, вроде бы тоже логично. Есть вариант - считать ключем MD5 от текста внутри cache-тэга. Возьмешься?
Аватара пользователя
korchasa
LIMB Developer
 
Сообщения: 935
Зарегистрирован: Чт май 10, 2007 3:47 am

Re: Альтернативный пакет cache

Сообщение hidrarg » Вс фев 14, 2010 1:31 am

hidrarg писал(а):И еще - я не оставляю надежды написать нормальный сервис для упрощения работы с кешом. Все настройки должны быть в одном месте. Меня просто убивает задание ttl и ключей в макро коде (вот совпадут разок ключи...). Завтра выложу один вариант.

Настройки в одном месте тебя ни спасут, т.к. какой-то идентификатор тебе в макро придется писать. Задавать ttl там же, где задается содержимое ключа, вроде бы тоже логично. Есть вариант - считать ключем MD5 от текста внутри cache-тэга. Возьмешься?


Спасли. В макро передаем имя кеша, а вся остальная информация хранится в конфиге. На основании имени и передаваемых переменных генерится ключ, 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 объекта).
Если принципиальных возражений нет, то могу заняться чистовой реализацией.
hidrarg
LIMB Addicted
 
Сообщения: 54
Зарегистрирован: Чт май 08, 2008 1:17 pm

Re: Альтернативный пакет cache

Сообщение korchasa » Вс фев 14, 2010 12:55 pm

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 объекта).
Если принципиальных возражений нет, то могу заняться чистовой реализацией.

Давай попробуем.
Аватара пользователя
korchasa
LIMB Developer
 
Сообщения: 935
Зарегистрирован: Чт май 10, 2007 3:47 am

Re: Альтернативный пакет cache

Сообщение hidrarg » Сб фев 20, 2010 2:37 pm

Класс получился небольшой:
http://pastebin.com/m27c05937
Тесты:
http://pastebin.com/m681bfe98
hidrarg
LIMB Addicted
 
Сообщения: 54
Зарегистрирован: Чт май 08, 2008 1:17 pm

Re: Альтернативный пакет cache

Сообщение conf » Чт апр 15, 2010 11:40 am

Кто-нибудь может рассказать практическое применение lmbDbCacheConnection? Зачем хранить кэш в базе? Тормозить же будет.
Опыт - это то, что мы получаем, когда не получаем того, что хотим.
http://www.shelfari.com/shein_alexey/shelf - лучшие книги для программистов.
Аватара пользователя
conf
LIMB Addicted
 
Сообщения: 570
Зарегистрирован: Вт мар 25, 2008 6:41 pm
Откуда: Tashkent, Uzbekistan

Re: Альтернативный пакет cache

Сообщение korchasa » Чт апр 15, 2010 12:55 pm

conf писал(а):Кто-нибудь может рассказать практическое применение lmbDbCacheConnection? Зачем хранить кэш в базе? Тормозить же будет.

На shared-хостингах, где нет нормальных кэшей, а соединение с базой уже открыто, это будет даже быстрее чем файлы.
Аватара пользователя
korchasa
LIMB Developer
 
Сообщения: 935
Зарегистрирован: Чт май 10, 2007 3:47 am

Re: Альтернативный пакет cache

Сообщение conf » Чт апр 15, 2010 1:54 pm

korchasa писал(а):
conf писал(а):Кто-нибудь может рассказать практическое применение lmbDbCacheConnection? Зачем хранить кэш в базе? Тормозить же будет.

На shared-хостингах, где нет нормальных кэшей, а соединение с базой уже открыто, это будет даже быстрее чем файлы.

Тогда его надо допиливать. Там используется lmbInsertOnDuplicateUpdateQuery, который реализован только для MySQL, для всех остальных кидается Exception.
Опыт - это то, что мы получаем, когда не получаем того, что хотим.
http://www.shelfari.com/shein_alexey/shelf - лучшие книги для программистов.
Аватара пользователя
conf
LIMB Addicted
 
Сообщения: 570
Зарегистрирован: Вт мар 25, 2008 6:41 pm
Откуда: Tashkent, Uzbekistan

Re: Альтернативный пакет cache

Сообщение korchasa » Чт апр 15, 2010 2:26 pm

conf писал(а):
korchasa писал(а):
conf писал(а):Кто-нибудь может рассказать практическое применение lmbDbCacheConnection? Зачем хранить кэш в базе? Тормозить же будет.

На shared-хостингах, где нет нормальных кэшей, а соединение с базой уже открыто, это будет даже быстрее чем файлы.

Тогда его надо допиливать. Там используется lmbInsertOnDuplicateUpdateQuery, который реализован только для MySQL, для всех остальных кидается Exception.

ИМХО не критично, ибо есть более насущные проблемы:
  • dbalRecordSet->at(0) гарантировано делает запрос
  • документация
  • проверить подсвечивание полей в форме, при ошибке
  • taggable кеш не работает с mint
  • миграции схемы БД
  • соединение с базой через unix-сокет
Собственно эти проблемы я хотел решить до релиза
Аватара пользователя
korchasa
LIMB Developer
 
Сообщения: 935
Зарегистрирован: Чт май 10, 2007 3:47 am

Re: Альтернативный пакет cache

Сообщение hidrarg » Вт май 04, 2010 7:51 pm

Добавим поддержку unix сокетов для мемкеша?
Код: Выделить всё
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()
hidrarg
LIMB Addicted
 
Сообщения: 54
Зарегистрирован: Чт май 08, 2008 1:17 pm

Re: Альтернативный пакет cache

Сообщение conf » Вт май 04, 2010 10:23 pm

Тесты?
Опыт - это то, что мы получаем, когда не получаем того, что хотим.
http://www.shelfari.com/shein_alexey/shelf - лучшие книги для программистов.
Аватара пользователя
conf
LIMB Addicted
 
Сообщения: 570
Зарегистрирован: Вт мар 25, 2008 6:41 pm
Откуда: Tashkent, Uzbekistan

Пред.След.

Вернуться в Limb3 разработка

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

cron