gpt4 book ai didi

php - 在 Zend 框架中缓存 PDOStatement 对象

转载 作者:行者123 更新时间:2023-12-04 05:59:02 26 4
gpt4 key购买 nike

我正在尝试缓存不会经常更改(如果有的话)的查询结果。在我的类里面,我有一个私有(private)类变量 private $_cache在我的构造函数中,我按照我对大部分缓存的方式对其进行初始化:

// Setup caching
$frontendOptions = array('lifeTime' => (strtotime('+1 week') - time()));
$backendOptions = array('cache_dir' => '../application/cache');
$this->_cache = Zend_Cache::factory('Core', 'File', $frontendOptions, $backendOptions);

后来,在一个函数中,我尝试缓存查询的结果:
$cache_id = 'all_station_results';

if ( ($results = $this->_cache->load($cache_id)) === false )
{
// Get all data from stations table
$sql="SELECT * FROM locations";
$sth = $this->_db->query($sql);

// Serialize query results
$data = serialize($sth);

// Write to cache
$this->_cache->save($data, $cache_id);
}
else
{
// Return results from cache
return unserialize($results);
}

这会引发异常:

You cannot serialize or unserialize PDOStatement instances



所以我尝试不进行序列化,但抛出了这个异常:

Datas must be string or set automatic_serialization = true



现在,显然 PDOStatement 不是字符串,我看不出设置 automatic_serialization = true 之间的区别和手动序列化。

如何缓存此 PDOStatement 对象?

最佳答案

AFAIK,您根本无法序列化 PDO 对象:它们与底层数据库驱动程序和当前打开的连接紧密耦合。

您将不得不缓存一个包含数据库调用结果的数组。但这可能不一定有助于您的性能:从缓存中获取大量数据(或将其全部存储在 PHP 脚本的内存中)可能与创建数据库一样长调用,尤其是在表被正确索引的情况下。

使用普通的数据库连接可能是正确的方法;如果您可以完全控制您的数据库,并且您正在使用 mySQL,您还可以考虑查看 mySQL query caching .

关于php - 在 Zend 框架中缓存 PDOStatement 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9141713/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com