我正在寻找在 中实现缓存Zend_Db
,没有任何本地方法可以提供缓存Zend_Db
,所以我想知道我应该在哪里做。
我看了一下Zend_Db_Table_Abstract
(我正在自定义扩展它App_Model_DbTable_Abstract
),我发现了一个受保护的方法_fetch()
,它直接采用一个Zend_Db_Table_Select
实例,看起来像是适配器之前的最后一步。
我在考虑重写这个方法,序列化$select
对象,散列它,最后缓存它,并检查提供的每个 $select 对象以返回缓存或最新的行集。
这是正确的做法吗?
这是我刚刚做的:
class App_Model_DbTable_Abstract extends Zend_Db_Table_Abstract
{
protected function _fetch(Zend_Db_Table_Select $select)
{
$hashedQuery = sha1(serialize($select->__toString()));
$cacheManager = Zend_Registry::get('Zend_Cache_Manager');
$cache = $cacheManager->getCache('database');
if (!($data = $cache->load($hashedQuery))) {
$data = parent::_fetch($select);
$cache->save($data, $hashedQuery);
}
return $data;
}
}