2010-05-24 3 views
1

серверная сторона - это PHP + zend framework.php cache zend framework

проблема:

я не имею огромный из Appox данных 5000 записей и не из столбцов 5 в input.txt файле. Мне нравится читать все данные в памяти только один раз и отправлять некоторые данные в каждый запрос браузера. , но если я обновляю этот файл input.txt, то обновленные данные должны быть автоматически синхронизированы с этим адресом памяти .

, так что мне нужно решить эту проблему, используя технику кэширования памяти. Но метод кэширования имеет срок действия. Если файл input.txt обновляется до истечения срока действия кеша, тогда мне нужно автосинхронизировать с этой ячейкой памяти.

Теперь я использую zend framework 1.10.is это возможно в zend framework. может кто-нибудь дать мне некоторую строку кода zendfrmawork

У меня нет возможности использовать memchached сервер (распространяется).

Только zend оснастка.

+0

do/can you use APC/eAccelerator Расширение PHP, если не читать весь файл input.txt с file_get_contents по каждому запросу будет работать просто отлично – bas

ответ

1

Использование отложенной загрузки, как это (кэш 1h, как правило, OK).

function getData() { 
    $cache = ...; //get your memory cache here 
    $cacheId = 'MyCacheId'; //cache id for your data 
    $loadTimeCacheId = 'dataLoadCacheId'; //cache id for data load timestamp 
    $cacheLength = 3600; //seconds 

    $data = $cache->load($cacheId); 
    $loadTime = (int) $cache->load($loadTimeCacheId); 

    if (!$data || filemtime('/path/to/your/file') > $loadTime) { 
     $data = ...; //real loading here 

     $cache->save($data, $cacheId, array(/*no tags*/), $cacheLength); //save data to cache 
     $cache->save(time(), $loadTimeCacheId, array(/*no tags*/), $cacheLength); //save load timestamp 
    } 

    return $data; 
} 
0

Лучший вариант заключается в использовании Zend_Cache_Frontend_File указывает на файл и Zend_Cache_Backend_Memcached. Практически нет другого способа сохранить что-либо в памяти, чем Memcache или APC. Это невозможно сделать без внешнего расширения IMO.