内にキャッシュを実装しようとしています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;
}
}