• Zend Framework中的前端缓存
  • Lumia920 发表于 2014/12/10 21:34:00 | 分类标签: 缓存 前端缓存 zend
  •  Zend_Cache前端

     Zend_Cache_Core

    简介

    Zend_Cache_Core是一个特别的前端,因为他是模块的核心. 它是一个一般化(generic)的缓存前端,并且由其他类扩展.

    注意

    所有的前端继承自Zend_Cache_Core因此它的方法和选项(描述如下)应该在其他的前端中可用,所以这里没有进行文档化.

     

    可用选项

    这些选项被传递给如前面例子中演示的工厂方法.

    核心前端选项

    选项 数据类型 默认值 描述
    caching boolean true 打开 / 关闭缓存 (对被缓存脚本的调试非常有用)
    cache_id_prefix string null 所有缓存 id 的前缀,如果设置为 null ,没有缓存 id 前缀使用。 缓存 id 前缀在缓存里创建一个命名空间,允许多个程序和网上共享缓存。 每个程序或网站可以使用不同的缓存 id 前缀,所以特定的缓存 id 可以使用多次。
    lifetime int 3600 缓存生命期(秒), 如果设置为 null, 缓存永远有效.
    logging boolean false 如果设置为true,日志纪录(通过使用Zend_Log)被激活(但是系统将变慢)
    write_control boolean true 打开 / 关闭 写控制 (the cache is read just after writing to detect corrupt entries),打开写控制轻微地放慢缓存写的速度但不影响读(it can detect some corrupt cache files but it's not a perfect control)
    automatic_serialization boolean false 打开 / 关闭自动序列化, 可以直接用于保存非字符串数据(但是很慢)
    automatic_cleaning_factor int 10 关闭 / 调整自动清理过程 (垃圾收集器): 0 表示不自动清理缓存,1 表示自动清理缓存,并且如果x > 1 表示x写操作后自动随机清理1次.
    ignore_user_abort boolean false 如果设置为 true,核心将在 save() 方法里设置 ignore_user_abort PHP flag,以免在某些情况下缓存崩溃。

     例子

    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
    
                
  • 请您注意

    ·自觉遵守:爱国、守法、自律、真实、文明的原则

    ·尊重网上道德,遵守《全国人大常委会关于维护互联网安全的决定》及中华人民共和国其他各项有关法律法规

    ·严禁发表危害国家安全,破坏民族团结、国家宗教政策和社会稳定,含侮辱、诽谤、教唆、淫秽等内容的作品

    ·承担一切因您的行为而直接或间接导致的民事或刑事法律责任

    ·您在编程中国社区新闻评论发表的作品,本网站有权在网站内保留、转载、引用或者删除

    ·参与本评论即表明您已经阅读并接受上述条款

  • 感谢本文作者
  • 作者头像
  • 昵称:Lumia920
  • 加入时间:2013/6/13 0:00:00
  • TA的签名
  • 这家伙很懒,虾米都没写
  • +进入TA的空间
  • 以下内容也很赞哦
分享按钮