Zend_Db_Row子类的本地“缓存”

时间:2011-12-06 20:41:04

标签: php zend-framework memcached zend-db

在我们的应用程序中,我们使用Zend_Db_Row的子类来表示应用程序中的对象。这些对象由各种获取函数返回。

<?php
require_once 'Zend/Db.php';

class Model_Users extends Zend_Db_Table_Abstract
{
    protected $_name = 'users';
    protected $_primary = 'userId';
    protected $_rowClass = 'Model_User';

    /**
     * fetch user by email
     * 
     * @param string $email
     */
    public function fetchWithEmail($email)
    {
        $select = $this->select();
        $select->where('email = ?', $email);
        return $this->fetchRow($select);
    }

}

问题是我们从不同的函数,模型,控制器等多次调用fetch函数(具有相同的值)。例如,$modelUsers->fetchWithEmail('user@domain.com')在单个php脚本执行中出现10次。

我们计划使用memcached来缓存这些对象,但是,它仍然会调用缓存服务器10次(而不是调用数据库10次)。使用memcache会更快,但我们只想调用缓存服务器一次(而不是10次)

zend框架的任何框架/模块可以帮助我们存档某种本地缓存?如果我们的脚本将调用$modelUsers->fetchWithEmail('user@domain.com'),它将进入脚本内存,直到脚本执行完成(或者更新或删除函数更改了数据库中该行的值)

2 个答案:

答案 0 :(得分:1)

Doctrine ORM实现了EntityManager。

  

EntityManager API用于管理对象的持久性并查询持久对象。

http://www.doctrine-project.org/docs/orm/2.1/en/reference/architecture.html#the-entitymanager

答案 1 :(得分:1)

Zend_Cache可以使用,你可以使用Apc,Memcache,Flat文件等。