PHP支持组操作的Memcache类
Memcache是PHP开发中较常用到的缓存方法,在高并发的系统中是必不可少的组成部分。
在实际开发中,Memcache存在一个比较不尽人意的问题,就是Memcache不能支持对key进行的组操作。
组操作,也可以称为域操作,比如说某个文章系统,在前台部分使用Memcache缓存了列表页数据、文章详细页数据,两种数据的量都比较多。那么,当后台发布了一篇文章的时候,列表页就应该需要更新到最新的列表——可能涉及到许多个列表页。当然,对文章详细页来说,它是不需要更新的。
好的,这个时候我们就需要删除原有缓存,让程序可以自动更新列表页数据。但是使用Memcache的flush函数有个问题,就是它会清空全部的数据,包括列表页和文章页的数据,在大并发的条件下,全部缓存删除后重建缓存的时候,将会有非常高的负载产生。
另外,还会有情况就是有些你不愿意删除的缓存变量,也会丢失了,比如说程序的配置,数据库为了提速而存到缓存的表结构等。
所以我们需要一个支持组操作的缓存机制,我们就可以把列表页设置成一个组,文章页数据是另外一个组,程序配置又是另外一个组等等。当需要重建列表页的时候,只需要删除列表页这个组里面全部的数据,而不会影响到别的组的数据。
测试了几种方案,还是以下的方案最为理想和高速,我们先看代码,再说原理:
<?php
class MyCache
{
private $mmc = null;
private $group = null;
private $version = 1;
function __construct($group){
if(!class_exists('mmcache')){
$this->mmc = false;
return;
}
$this->mmc = new memcache();
$this->mmc->addServer('192.168.1.5', 11211);
$this->mmc->addServer('192.168.1.6', 11211);
$this->group = $group;
$this->version = $this->mmc->get('version_'.$group);
}
function set($key, $var, $expire=3600){
if(!$this->mmc)return;
return $this->mmc->set($this->group.'_'.$this->version.'_'.$key, $var, $expire);
}
function get($key){
if(!$this->mmc)return;
return $this->mmc->get($this->group.'_'.$this->version.'_'.$key);
}
function incr($key, $value=1){
if(!$this->mmc)return;
return $this->mmc->increment($this->group.'_'.$this->version.'_'.$key, $value);
}
function decr($key, $value=1){
if(!$this->mmc)return;
return $this->mmc->decrement($this->group.'_'.$this->version.'_'.$key, $value);
}
function delete($key){
if(!$this->mmc)return;
return $this->mmc->delete($this->group.'_'.$this->version.'_'.$key);
}
function flush(){
if(!$this->mmc)return;
++$this->version;
&nb
相关新闻>>
- 发表评论
-
- 最新评论 更多>>