Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
$parts = explode('_', $name);
if ('cached'==$parts[0] && method_exists($this,$parts[1]) ) {
$parts = explode('_', $name);
if (sizeof($parts)==2 && 'cached'==$parts[0] && method_exists($this,$parts[1]) ) {
class ListSweeper < ActionController::Caching::Sweeper
observe List, Item
def after_save(record)
list = record.is_a?(List) ? record : record.list
expire_page(:controller => "lists", :action => %w( show public feed ), :id => list.id)
expire_action(:controller => "lists", :action => "all")
list.shares.each { |share| expire_page(:controller => "lists", :action => "show", :id => share.url_key) }
end
end
function getXyz() {}
function getXyzCache() {
if (!$result = $cache->load('можем по-человечески определить ключ')) {
$result = $ths->getXyz();
$cache->save($result,
'key'
);
}
}<pre>
Бонус - со значением, которое кладется в или вынимается из кэша - можно провести еще какие-то манипуляции, если это нужно.
А условие if (!$result = $cache->load()) - можно при желании вынести в дополнительную прослойку:function cache_get_and_store($key, $callback){
if (!$result = $cache->load($key)) {
// достаем из базы или откуда там надо, ну и сохраняем, знамо дело.
}
}
<?php
class App_Cache
{
public static $frontendName = 'Class';
public static $backendName = 'File';
public static $frontendOptions;
public static $backendOptions = array('cache_dir' => CACHE_DIR);
static public function get($class)
{
$instance = new $class;
self::$frontendOptions = array(
'cached_entity' => $instance
);
return Zend_Cache::factory(self::$frontendName,
self::$backendName,
self::$frontendOptions,
self::$backendOptions);
}
}
$modelPages = App_Cache::get('Model_Page');
$list = $modelPages->getList();
Интересный подход для кэширования моделей