我想使用PHP和MySQL组合实现网页,它有一个部分用于自动更新来自DB的通知计数,首先我选择具有设置时间间隔的ajax来更新通知计数,但是当我去性能时,一些建议说Ajax在很多用户走上正轨时并不理想。 所以我指的是内存缓存机制, 以我的方式,它看起来不错,因为它避免了许多请求连续命中 MySQL,所以现在 Questoins 是如何保持 memcache 与 MySQL 同步,我尝试了 memcache 的简单示例,在 mysq PHP 代码下方
<?php
$meminstance = new Memcache();
$meminstance->pconnect('localhost', 11211);
mysql_connect("localhost", "appuser", "Appuser") or die(mysql_error());
mysql_select_db("test") or die(mysql_error());
$query = "select id,client,ip,count,title from mysql_common.alert_count";
$querykey = "KEY" . md5($query);
$result = $meminstance->get($querykey);
if (!$result) {
$query = mysql_query("select id,client,ip,count,title from mysql_common.alert_count");
while($row= mysql_fetch_array($query))
{
$id[]=$row['id'];
$count[]=$row['count'];
$title[]=$row['title'];
$client[]=$row['client'];
$ip[]=$row['ip'];
}
$arr['id']=$id;
$arr['count']=$count;
$arr['title']=$title;
$arr['client']=$client;
$arr['ip']=$ip;
$result= json_encode($arr);
$meminstance->set($querykey, $result, false, 20);
echo $result;
print "got result from mysql'n";
return 0;
}
print_r($meminstance->get($querykey));
print "got result from memcached'n";
return 0;
?>
上述代码的工作流程 - 首先是具有此查询数据的 memcache,如果然后从 memcache 获取,否则从 mysql 获取结果并存储到 memcache,但是当我更新 mysql 表数据并执行相同的代码时,它给出了来自 memcache 的结果,但这不是更新的数据。 请指导我保持内存缓存与MySQL同步。
当数据库中的相应数据更新时,您需要使缓存中的数据失效。一种方法可能是使用唯一 id 作为键而不是整个查询,每当更新该 id 的数据时,请删除该项以进行缓存。这样,应用程序将从数据库重新加载条目。
但是,如果您有范围查询,则很难使缓存中的数据失效。因为您永远不知道更新是否会影响缓存查询的结果。
像NCache和Tayzgrid这样的缓存解决方案提供了数据库依赖性的功能。缓存中的项可以根据对数据库的查询进行设置。缓存监视数据库的更改,并在更新相应的结果时使缓存中的数据失效。但是,这些功能不适用于memcache。