Memcache与MySQL如何工作?

2022-08-30 19:13:32

我试图在我们的环境中理解(并可能部署)memcached。

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

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

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


答案 1

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

关于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 文档以获取更多信息,这里有一些很好的例子和评论。


答案 2

关于memcache是如何工作的,有几个例子。这是其中一个链接。

其次,Memcache可以使用或不使用MySQL。

它缓存了PHP中的对象,现在无论它来自MySQL还是其他任何地方,如果它是PHP对象,它都可以存储在MemCache中。

APC为您提供了比Memcache更多的功能。除了存储/缓存PHP对象之外,它还缓存PHP可执行的机器可读操作码,以便您的PHP文件不会经历在内存中加载的过程 > 被调用,而是直接从内存中运行已编译的操作码。


推荐