Kev*_*ave 22 php mysql memcached apc
我试图在我们的环境中理解(并可能部署)memcached.
我们在loadbalancer上有4个web服务器,运行用PHP开发的大型Web应用程序.我们已经在使用APC了.我想看看memcached是如何工作的?至少,可能是我不明白缓存是如何工作的.
我们有一些复杂的动态查询,它们组合了几个表来提取数据.每次,数据都来自不同的客户端数据库,数据不断变化.根据我的理解,如果某些数据存储在缓存中,并且下次请求相同,则返回相同的数据.(或者我在这里可能完全错了).
整个memcache(或者就此而言,任何缓存的东西都有效)如何?
Mik*_*ell 26
通常,缓存是一个非常快速的键/值存储引擎,您可以通过预定键存储值(通常是序列化的),因此您可以使用相同的键检索存储的值.
关于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));
Run Code Online (Sandbox Code Playgroud)
查看有关memcached的 PHP文档以获取更多信息,有一些很好的示例和注释.