php与memcache结合做部分重页面做缓存处理

来源:互联网 发布:国际阿里云网址 编辑:程序博客网 时间:2024/06/09 18:09

需求和现状

我们的平台(php网站)由于业务日益负载,导致部分页面承载着很重的数据库查询压力,例如首页涉及很多的联表查询,业务详情页涉及一些鉴权和多表查询,我称之为“重页面”,为了提高查询速度,我决定使用业务缓存方法来处理一层。

解决方法

平台的后端返回的都是json串,所以将json串作为value,前缀加页面标识(例如服务id等)作为key,存储json串。第一次请求时候做set动作,有效期为1小时,这一小时内均get该值。
部分代码:

$mclient = Sap_Common_MClient::getInstance();$rs = $mclient->get($key);// 有缓存的话先从缓存中取if ($rs !== false){    // echo "111111";    $serviceDetail = $rs;    //清理昨天的缓存    $yesterdayDate = date('Y-m-d',time()-Sap_Common_Constants::TIME_DAY_DURATION);    $key_yesterday = 'serviceDetail_'.$yesterdayDate;    $rs_yesterday = $mclient->delete($key);} else {    // echo "222222";    $serviceDetail = $dataServiceOper->queryServiceDetailById($serviceId, $uid);    $rsMemcached = $serviceDetail;    $expireTime = 3600;    $mclient->set($key,$rsMemcached,$expireTime);}

注意点

  • 变更频率很高并且实时性要求较强的数据(例如发出一条评论),别这么缓存,例如访问量、评论等等,最好能单拉接口让前端获取,或者单独请求,与缓存json做拼接。
  • 变更频率不高的数据(可能要求实时性),需要在变更动作作出时候,清理缓存,例如一些详情内容变更、首页产品位排序变更等等,可以通过清楚缓存,使得变更立即生效。
0 0