Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > memcache


Автор: Muerto 28.2.2011, 23:10
Смотрел я на функции memcache ... и вот думаю...
Как бы мне грамотно проверять если пора обновлять кэш или нет?

Я могу например stdClass закешировать

stdClass->timestamp
и stdClass->Data

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

Когда я проверяю filemtime я могу его и вовсе не загружать если он устарел а сразу генерировать новые данные....

А как здесь быть не решил как лучше, может мудрый совет у кого будет...

Автор: Shogun 1.3.2011, 02:42
Muerto, Вы можете например ставить лимит на хранения данных в memcache, тогда и получится аналог filemtime.

Код

$mem = new Memcache();

if (!$data = $mem->get('data_object'))
  {
    $data = new stdClass();
    ...
    $mem->set('data_object', $data, time() + 30);
  }

...


А ваше странно что Вы хотите использовать memcache вместо filecache, обычно он нужен уже при нагруженных проектах, тогда и поймете его преимущество перед файловым кэшем.
Копайте гугл с Memcached vs File cache ...

Еще http://docs.php.net/manual/ru/book.memcached.php

Автор: Muerto 1.3.2011, 08:40
Shogun, Я сделал по другой системе
 stdClass $ob=new stdClass();
$ob->time=time();
$ob->data=$data;

И если нужно время то просто получаю...

А то если экспайер ставить, то может быть что в кеше вообще нифига не будет

И вот сравнивал производительность своих классов http://forum.vingrad.ru/forum/topic-323707.html memcache не удевил к лучшему

Автор: solenko 1.3.2011, 10:05
Цитата

А то если экспайер ставить, то может быть что в кеше вообще нифига не будет

А что с того, чот там есть неактуальные данные? Только забивать место

Автор: Muerto 1.3.2011, 13:27
solenko, У меня просто много разных систем кеширования... http://forum.vingrad.ru/forum/topic-323707/anchor-entry2307591/0.html
 мне нужно что бы они работали одинаково...
Не у всех есть мемкэш, поэтому мои классы имеют одни и те же методы, что бы я моментально мог переключать

Автор: Shogun 1.3.2011, 13:37
Цитата(Muerto @ 1.3.2011,  13:27)
solenko, У меня просто много разных систем кеширования... http://forum.vingrad.ru/forum/topic-323707/anchor-entry2307591/0.html
 мне нужно что бы они работали одинаково...
Не у всех есть мемкэш, поэтому мои классы имеют одни и те же методы, что бы я моментально мог переключать

Factory + Adapter ??

Автор: solenko 1.3.2011, 14:15
Цитата(Muerto @  1.3.2011,  12:27 Найти цитируемый пост)
solenko, У меня просто много разных систем кеширования... http://forum.vingrad.ru/forum/topic-323707...y2307591/0.html
 мне нужно что бы они работали одинаково...
Не у всех есть мемкэш, поэтому мои классы имеют одни и те же методы, что бы я моментально мог переключать 

Да, они имеют одинаковый интерфейс (грубо set/get/delete/exists), но то, что при кешировании в файлах  приходится отслеживать expire самому, не повод для того, чтобы не делать это штатными средствами в memcache.

Автор: solenko 1.3.2011, 14:30
Цитата(Muerto @  1.3.2011,  12:27 Найти цитируемый пост)
solenko, У меня просто много разных систем кеширования... http://forum.vingrad.ru/forum/topic-323707...y2307591/0.html
 мне нужно что бы они работали одинаково...
Не у всех есть мемкэш, поэтому мои классы имеют одни и те же методы, что бы я моментально мог переключать 

Да, они имеют одинаковый интерфейс (грубо set/get/delete/exists), но то, что при кешировании в файлах  приходится отслеживать expire самому, не повод для того, чтобы не делать это штатными средствами в memcache.

Автор: Muerto 1.3.2011, 19:21
solenko, В моем интерфейсе есть метод public boolean isUpToDate(String key, int timeInSeconds) и хотелось бы реализовать...

Автор: solenko 1.3.2011, 19:43
int timeInSeconds -- непонятно значение параметра
а реальный isUpToDate -- alias для exists

Автор: Muerto 1.3.2011, 21:58
solenko, а я не замечал в memcache такое, есть replace, set & get

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)