在Zend Framework中缓存数据库查询结果

时间:2015-01-26 12:43:01

标签: php caching zend-framework

我是Zend的初学者,我在尝试缓存数据库查询结果时遇到了一些问题。

我已经阅读过很多论坛和文档,例如http://framework.zend.com/manual/1.12/en/zend.db.table.html(例31),但他们通常都会说在构造方法中设置$ defaultMetadataCache。

我做到了,但似乎没有读取缓存,因为我没有获得更好的性能。

这是我的文件构造./library/Zend/Db/Table/Abstract.php

public function __construct($config = array())
    {
        /**
         * Allow a scalar argument to be the Adapter object or Registry key.
         */
        if (!is_array($config)) {
            $config = array(self::ADAPTER => $config);
        }

        if ($config) {
            $this->setOptions($config);
        }

        $config_temp = new Zend_Config_Ini(APPLICATION_PATH . '/configs/config.ini', APPLICATION_ENV);

        $cache_lifetime = (isset($config_temp->cache->lifetime) && $config_temp->cache->lifetime) ? $config_temp->cache->lifetime : 300;
        $cache_dir = (isset($config_temp->cache->dir) && $config_temp->cache->dir) ? $config_temp->cache->dir : '/tmp/hookit/cache/';

        if(!is_dir($cache_dir))
            mkdir ($cache_dir, 0755, true);

        $frontendOptions = array('lifetime' => $cache_lifetime, 'automatic_serialization' => true);
        $backendOptions = array('cache_dir' => $cache_dir);

        $cache = Zend_Cache::factory('Core', 'File', $frontendOptions, $backendOptions);

        if(!self::getDefaultMetadataCache()){
            self::setDefaultMetadataCache($cache);
        }

        $this->_setup();
        $this->init();
    }

1 个答案:

答案 0 :(得分:1)

$defaultMetadataCache参数只允许缓存表格的元数据(不是某些查询的结果)。

这很有用,因为

  

默认情况下,Zend_Db_Table_Abstract查询底层数据库   每当需要该数据来执行表时,表元数据   操作

但是,只要这个缓存选项仅适用于表元数据,您似乎不应该看到性能如此显着提升,就像您将所有查询缓存到数据库一样。

此外,您使用File作为Zend_Cache后端。这意味着您将缓存的数据存储在常规操作系统文件中,这与在数据库中存储数据的操作数据相同,后者也使用文件来存储数据。

更好的方法(为了提高性能/减少延迟)是将缓存数据存储在RAM中并缓存所有查询(不仅仅是表的元数据)。