Zend_Cache前端Zend_Cache_Core简介
可用选项这些选项被传递给如前面例子中演示的工厂方法.
例子An example is given in the manual at the very beginning. 如果你只向缓存中存储字符串(由于"automatic_serialization"选项,可能会存储一些布尔值),你可以使用更加简介的构造: // 假定你已经有 $cache $id = 'myBigLoop'; // cache id of "what we want to cache" if (!($data = $cache->load($id))) { // cache miss $data = ''; for ($i = 0; $i < 10000; $i++) { $data = $data . $i; } $cache->save($data); } // [...] do something with $data (echo it, pass it on etc.) 如果你缓存多个块或则数据实例,意思是一样的: // 确保使用独一无二的 identifiers: $id1 = 'foo'; $id2 = 'bar'; // block 1 if (!($data = $cache->load($id1))) { // cache missed $data = ''; for ($i=0;$i<10000;$i++) { $data = $data . $i; } $cache->save($data); } echo($data); // this isn't affected by caching echo('NEVER CACHED! '); // block 2 if (!($data = $cache->load($id2))) { // cache missed $data = ''; for ($i=0;$i<10000;$i++) { $data = $data . '!'; } $cache->save($data); } echo($data); 如果你想缓存特殊值(带 "automatic_serialization" 选项的布尔值)或不能用上述紧缩结构的空字符串,你需要正式地测试缓存记录。 // the compact construction // (not good if you cache empty strings and/or booleans) if (!($data = $cache->load($id))) { // cache missed // [...] we make $data $cache->save($data); } // we do something with $data // [...] // the complete construction (works in any case) if (!($cache->test($id))) { // cache missed // [...] we make $data $cache->save($data); } else { // cache hit $data = $cache->load($id); } // we do something with $data Zend_Cache_Frontend_Output简介
可用的选项
该前端除了 例子An example is given in the manual at the very beginning. Here it is with minor changes: // if it is a cache miss, output buffering is triggered if (!($cache->start('mypage'))) { // output everything as usual echo 'Hello world! '; echo 'This is cached ('.time().') '; $cache->end(); // output buffering ends } echo 'This is never cached ('.time().').'; Using this form it is fairly easy to set up output caching in your already working project with little or no code refactoring. Zend_Cache_Frontend_FunctionIntroduction
A可用的选项
例子
在PHP中使用 $cache->call('veryExpensiveFunc', $params); // $params is an array // For example to call veryExpensiveFunc(1, 'foo', 'bar') with // caching, you can use // $cache->call('veryExpensiveFunc', array(1, 'foo', 'bar'))
Zend_Cache_Frontend_ClassIntroduction
Available options
ExamplesFor example, to cache static calls : class test { // Static method public static function foobar($param1, $param2) { echo "foobar_output($param1, $param2)"; return "foobar_return($param1, $param2)"; } } // [...] $frontendOptions = array( 'cached_entity' => 'Test' // The name of the class ); // [...] // The cached call $result = $cache->foobar('1', '2'); To cache classic method calls : class Test { private $_string = 'hello !'; public function foobar2($param1, $param2) { echo($this->_string); echo "foobar2_output($param1, $param2)"; return "foobar2_return($param1, $param2)"; } } // [...] $frontendOptions = array( 'cached_entity' => new Test() // An instance of the class ); // [...] // The cached call $result = $cache->foobar2('1', '2'); Zend_Cache_Frontend_FileIntroduction
For instance, you have an XML configuration file which is parsed by a function
which returns a "config object" (like with Available options
Examples
Use of this frontend is the same than of Zend_Cache_Frontend_PageIntroduction
On the other hand, the "cache id" is calculated automatically with
For the moment, it's not implemented but we plan to add a HTTP conditional system to save bandwidth (the system will send a HTTP 304 Not Modified if the cache is hit and if the browser has already the good version). Available options (for this frontend in Zend_Cache factory)
ExamplesUse of Zend_Cache_Frontend_Page is really trivial : // [...] // require, configuration and factory $cache->start(); // if the cache is hit, the result is sent to the browser and the script stop here // rest of the page ... a more complex example which shows a way to get a centralized cache management in a bootstrap file (for using with Zend_Controller for example) /* * you should avoid putting too many lines before the cache section. * For example, for optimal performances, "require_once" or * "Zend_Loader::loadClass" should be after the cache section. */ $frontendOptions = array( 'lifetime' => 7200, 'debug_header' => true, // for debugging 'regexps' => array( // cache the whole IndexController '^/$' => array('cache' => true), // cache the whole IndexController '^/index/' => array('cache' => true), // we don't cache the ArticleController... '^/article/' => array('cache' => false), // ... but we cache the "view" action of this ArticleController '^/article/view/' => array( 'cache' => true, // and we cache even there are some variables in $_POST 'cache_with_post_variables' => true, // but the cache will be dependent on the $_POST array 'make_id_with_post_variables' => true ) ) ); $backendOptions = array( 'cache_dir' => '/tmp/' ); // getting a Zend_Cache_Frontend_Page object $cache = Zend_Cache::factory('Page', 'File', $frontendOptions, $backendOptions); $cache->start(); // if the cache is hit, the result is sent to the browser and the // script stop here // [...] the end of the bootstrap file // these lines won't be executed if the cache is hit 特殊的取消方法因为设计问题,在有些情况下(例如使用非 HTTP/200 返回代码时),你可能需要取消当前缓存处理,所以 我们引入这个特别的前端,cancel()方法。 // [...] // require, configuration and factory $cache->start(); // [...] if ($someTest) { $cache->cancel(); // [...] } // [...]
|