我正在尝试了解(并可能部署)我们环境中的 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/