【问题标题】:how to keep the memcache in sync with mysql?如何保持 memcache 与 mysql 同步?
【发布时间】:2015-01-12 13:59:08
【问题描述】:

我想使用 PHP 和 MySQL 组合来实现网页,它有一部分用于自动更新来自 DB 的通知计数,首先我选择设置时间间隔的 ajax 来更新通知计数,但是当我要去性能 一些建议说,当许多用户走上正轨时,ajax 并不理想。所以我指的是 memcache 机制,以我的方式看起来不错,因为它避免了许多请求连续命中 mysql,所以现在的问题是如何保持 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 但那不是更新的数据。请指导我使 memcache 与 mysql 保持同步。谢谢

【问题讨论】:

    标签: php mysql caching memcached


    【解决方案1】:

    当数据库中的相应数据更新时,您需要使缓存中的数据无效。一种方法可能是使用唯一 id 作为键而不是整个查询,并且每当更新该 id 的数据时,删除该项目以进行缓存。这样您的应用程序将从数据库中重新加载条目。

    但是,如果您有范围查询,则很难使缓存中的数据无效。因为您永远不会知道更新是否会影响缓存查询的结果。

    NCacheTayzgrid 这样的缓存解决方案提供了数据库依赖的特性。可以根据对数据库的查询来设置缓存中的项目。缓存监视数据库的更改并在相应结果更新时使缓存中的数据无效。但是这些功能在 memcache 中不可用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-22
      • 2010-09-14
      相关资源
      最近更新 更多