php - Memcache - 存储 mysql 结果

标签 php mysql memcached

我有一个数据库类,它管理我的应用程序的所有 mysql 连接。

出于多种原因,我不得不(迟迟)实现 Memcache。我已经开始弄明白了,但想确认一件事。

我希望用超时默认值来修改类。它查看它是否在内存缓存中,如果不在 - 进行查询并存储它。

但是,您似乎无法存储 mysqli 结果 (via this question)。这是否意味着您不能在应用程序中使用任何表示 $db->fetch_assoc() 或任何其他通用对象用途的代码?

如果是这样,这是否意味着我们正在全面讨论从头开始的代码更改?我想先确认一下,然后再把头放在手上。

最佳答案

您不能存储结果对象,不,但是您可以将所有行提取到一个数组中并存储该数组。如果您需要在其他地方重构您的代码,则取决于您编写代码的方式以及您之前对数据库访问的抽象程度。

例如,如果你有这样一个函数:

function database_result($query) {
   ...
   $result_array = $result->fetchAll();
   return $result_array;
}

然后您可以在该函数中添加 Memcached 缓存:

function database_result($query, $expire = 60) {
   $memcached_key = 'db:' . $query;
   $cached = $memcached->get($memcached_key);
   if ($memcached->getResultCode() !== Memcached::RES_NOTFOUND) {
       return $cached;
   }
   ...
   $result_array = $result->fetchAll();
   $memcached->set($memcached_key, $result_array, $expire);
   return $result_array;
}

如果您到处都使用原始 PDO 或 MySQLi 对象,那么您需要做更多的工作。

关于php - Memcache - 存储 mysql 结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11124454/

相关文章:

PHP 比较列值并相应地编辑数据库

php - 创建资源 : [message] fopen(): Unable to find the wrapper "https" on Ubuntu using Symfony 时出错

mysql - 错误 : #1436 - Thread stack overrun with MySQL trigger

c# - NHibernate 和 Memcached - 教程/示例

caching - 当键具有不同的时间范围并且缓存已满时,memcached 过期行为是什么?

java - 运行web应用程序时出现问题

php - MySQL同时select两个表

php - 将任何音频文件转换为 ogg,而无需在 php 中使用 ffmpeg

mysql - 如果在另一个表中不存在则选择,但是如果24h内没有记录

mysql - 统计SQL中每个父元素下每个子元素的评分