php - MySQL 的内存缓存如何工作?

标签 php mysql memcached apc

我正在尝试了解(并可能部署)我们环境中的 memcached。

我们在负载均衡器上有 4 个 Web 服务器,运行一个用 PHP 开发的大型 Web 应用程序。我们已经在使用 APC。 我想看看 memcached 是如何工作的?至少,我可能不明白缓存是如何工作的。

我们有一些复杂的动态查询,它们组合了几个表来提取数据。每次,数据都将来自不同的客户端数据库,并且数据不断变化。据我了解,如果缓存中存储了一些数据,如果下次请求相同,则返回相同的数据。 (或者我在这里可能完全错了)。

整个内存缓存(或者就此而言,任何缓存的工作)是如何工作的?

最佳答案

一般来说,缓存是一种非常快速的键/值存储引擎,您可以在其中通过预先确定的键存储值(通常是序列化的),因此您可以通过相同的键检索存储的值。

关于 MySQL,您将以这样一种方式编写您的应用程序代码,即在向数据库发出请求之前检查缓存中是否存在数据。如果找到匹配项(存在匹配键),您就可以访问与该键关联的数据。如果可以避免,目标是不向成本更高的数据库发出请求。

一个例子(仅供引用):

$cache = new Memcached();

$cache->addServer('servername', 11211);

$myCacheKey = 'my_cache_key';

$row = $cache->get($myCacheKey);

if (!$row) {

    // Issue painful query to mysql
    $sql = "SELECT * FROM table WHERE id = :id";

    $dbo->prepare($sql);
    $stmt->bindValue(':id', $someId, PDO::PARAM_INT);

    $row = $stmt->fetch(PDO::FETCH_OBJ);

    $cache->set($myCacheKey, serialize($row));
}

// Now I have access to $row, where I can do what I need to
// And for subsequent calls, the data will be pulled from cache and skip
// the query altogether
var_dump(unserialize($row));

memcached 上查看 PHP 文档有关更多信息,有一些很好的示例和评论。

关于php - MySQL 的内存缓存如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10135391/

相关文章:

php - 如何更新mySQL表中单元格值大于n的行?

mysql - 使用 Memcache 设置 MySQL 5.6 失败且没有错误

caching - 带 memcached 或 NOSQL 数据库(如 MongoDB/CouchDB)的 RDMS?

django - 安装python包时出错

php - cakephp:如何在模型中为不同的操作设置多重验证?

php - 搜索结果分页效果不佳...搜索正在工作,但分页导致 codeigniter 中出现错误

php - 在 php 循环中显示正确的问题

php - 支持模糊搜索的最容易实现的站点搜索应用程序是什么?

mySQL JOIN 来自不同表不同记录

php - SQL - 如果存在于另一个表中