• 2010-04-09

    最简单的PHP缓存方案 – Zend_Cache

    Views: 16072 | No Comments

    Zend Framework的各个模块大多能单独使用, 抽取出来的最简单的缓存模块Zend_Cache只有8个文件, 包括目录目录一个11个, 如下:

    Zend/
    Zend/Cache
    Zend/Cache/Backend
    Zend/Cache/Backend/ExtendedInterface.php
    Zend/Cache/Backend/File.php
    Zend/Cache/Backend/Interface.php
    Zend/Cache/Backend.php
    Zend/Cache/Core.php
    Zend/Cache/Exception.php
    Zend/Cache.php
    Zend/Exception.php
    

    我曾经看过不少PHP开发者向人推销自己的PHP框架, 其中一般都包含他们最引以为豪的的文件缓存方案. 不过, 真正通用和流行的PHP缓存方案没有几个. Zend_Cache是非常简单的, 除了可以使用文件缓存, 还可以使用闻名遐尔的memcached, 也仅仅是往上面的列表中加入一个文件Memcached.php. 文件缓存的应用限制还是很大, 因为磁盘IO很容易成为瓶颈, 高并发的时候, 还是使用memcached.

    Zend_Cache的主要接口是load()和save(), 使用方法见以前的文章: Zend Framework 的缓存模块 Zend_Cache 使用(http://www.ideawu.net/blog/archives/320.html)

    在IT牛人博客聚合网站(www.udpwork.com)的RSS抓取程序中, 应用了Zend_Cache, 以避免过于频繁地抓取博客的RSS, 造成博客负载过重.

    Posted by ideawu at 2010-04-09 19:20:40 Tags:
  • 2008-04-11

    Zend Framework 的缓存模块 Zend_Cache 使用

    Views: 15923 | No Comments

    缓存有几个重要的概念:

    • 数据本身
    • 数据的标识
    • 缓存生命期
    • 缓存操作接口

    缓存的获取操作一般十分快速, 而数据库操作一般是昂贵的, 所以通过缓存可以提高系统的整体性能.

    Zend_Cache 的使用比较简单, 它可以把数据保存到 File, Memcache, SQLite 等介质(称为后端, Backend)中. 还有前端(Frontend), 主要用来对要缓存的数据进行转换, 如序列化.

    ==data==>Frontend==>mediate data==>Backend==>File, Memcache, etc

    使用例子:

    <?php
    // "load" Zend_Cache 工厂 
    require 'Zend/Cache.php'; 
    
    // 选择一个前端(例如'Core', 'Output', 'Page'...)
    $frontendName = 'Core';
    
    // 选择一个后端(例如'File'或者'Sqlite'...)
    $backendName = 'File';
    
    // 为选择的前端设置一个选项数组
    // 前端把要缓存的数据序列化, 这样就可以缓存数组, 对象的实例等数据.
    $frontendOptions = array('automatic_serialization'=>true);
    
    // 为选择的后端设置一个选项数组
    // 缓存文件被保存在 ./cache 目录下.
    $backendOptions = array('cache_dir' => './cache');
    
    // 创建实例(当然,最后两个参数是可选的)
    $cache = Zend_Cache::factory($frontendName, $backendName, $frontendOptions, $backendOptions);
    
    // 数据的标识
    $id = 'mydata';
    $data = $cache->load($id);
    if(!$data){
        // 缓存中没有需要的数据(缓存未命中), 所以需要从数据库或者其它地方把数据放入缓存.
        // 这里的代码是耗时和耗资源的.
        $data = query_database();
        $tags = array();
        // 缓存的生命期为 10 秒.
        $lifetime = 10;
        $cache->save($data, $id, $tags, $lifetime);
    }
    
    // 对数据进行处理.
    manipulate(data);
    ?>
    
    Posted by ideawu at 2008-04-11 11:56:02 Tags:
  • 2008-03-19

    Zend Framework 有优点在哪?

    Views: 16606 | 1 Comment

    今天我使用 Zend Framework(以下简称 ZF) 制作一个数据库操作的 Demo.

    在制作 Demo 中, 我未体会到 ZF 有明确的核心思想. 我根据 ZF 的要求写了单独的一个文件(控制器), 然后创建了单独的一个模板文件(事实上是一个普通的 PHP 文件), 而且还从 Zend_Db_Table 派生了一个类(只有类的框架, 没有任何逻辑代码), 该类拥有了 CRUD 能力.

    和不使用 ZF 相比, 这样做从代码量上没有任何减少, 甚至结构上没有任何改变. $_GET['id'] 变成了 $this->_request->getParam('id'); include('header.html') 变成了 $this->reader('header.html'); 没有了 SQL 字符串拼接, 但是为了保存一行数据仍然需要手工创建一个关联数组.

    那么 ZF 在界面层提供了什么工具? 视图文件还是普通的 PHP 脚本, 为了显示一个数组, 仍然需要写自己的

    <?php foreach...{?>
    ...
    <?php}?>

    在 1.0.5 版本的中, 增加了使用 PHP 脚本方式生成界面的 Zend_Form 模块, 完全地将表单的验证等逻辑处理与表单的界面耦合在一个 PHP 类中. 这样做, 根本就是违反了表现与结构分离的原则, 界面开发人员无法单独的设计界面. 而分离的一个重要目标就是让界面开发人员不需要 Web 服务器就能设计界面.

    由于个人的局限性, 所以我希望 ZF fans 能交流你们对 ZF 的看法.

    Posted by ideawu at 2008-03-19 21:19:09 Tags:
|<<<1>>>| 1/1 Pages, 3 Results.