class memcached{
private $local_cache = array();
private $m;
private $client_type;
protected $errors = array();
public function __construct()
{
if (OPEN_CACHE == false){
return false;
}
$this->client_type = class_exists('Memcache') ? "Memcache" : (class_exists('Memcached') ? "Memcached" : FALSE);
if($this->client_type)
{
// 判断引入类型
switch($this->client_type)
{
case 'Memcached':
$this->m = new Memcached;
break;
case 'Memcache':
$this->m = new Memcache();
// if (auto_compress_tresh){
// $this->setcompressthreshold(auto_compress_tresh, auto_compress_savings);
// }
break;
}
$this->auto_connect();
}
else
{
//echo 'ERROR: Failed to load Memcached or Memcache Class (∩_∩)';
//exit;
return false;
}
}
/**
* @Name: auto_connect
* @param:none
* @todu 连接memcache server
* @return : none
* add by cheng.yafei
**/
private function auto_connect()
{
$configServer = array(
'host' => MEMCACHE_HOST,
'port' => MEMCACHE_PORT,
'weight' => 1,
);
if(!$this->add_server($configServer)){
echo 'ERROR: Could not connect to the server named '.MEMCACHE_HOST;
}else{
//echo 'SUCCESS:Successfully connect to the server named '.MEMCACHE_HOST;
}
}
/**
* @Name: add_server
* @param:none
* @todu 连接memcache server
* @return : TRUE or FALSE
* add by cheng.yafei
**/
public function add_server($server){
extract($server);
return $this->m->addServer($host, $port, $weight);
}
/**
* @Name: add_server
* @todu 添加
* @param:$key key
* @param:$value 值
* @param:$expiration 过期时间
* @return : TRUE or FALSE
* add by cheng.yafei
**/
public function add($key = NULL, $value = NULL, $expiration = 0)
{
if (OPEN_CACHE == false){
return null;
}
if(is_null($expiration)){
$expiration = MEMCACHE_EXPIRATION;
}
if(is_array($key))
{
foreach($key as $multi){
if(!isset($multi['expiration']) || $multi['expiration'] == ''){
$multi['expiration'] = MEMCACHE_EXPIRATION;
}
$this->add($this->key_name($multi['key']), $multi['value'], $multi['expiration']);
}
}else{
$this->local_cache[$this->key_name($key)] = $value;
switch($this->client_type){
case 'Memcache':
$add_status = $this->m->add($this->key_name($key), $value, MEMCACHE_COMPRESSION, $expiration);
break;
default:
case 'Memcached':
$add_status = $this->m->add($this->key_name($key), $value, $expiration);
break;
}
return $add_status;
}
}
/**
* @Name 与add类似,但服务器有此键值时仍可写入替换
* @param $key key
* @param $value 值
* @param $expiration 过期时间
* @return TRUE or FALSE
* add by cheng.yafei
**/
public function set($key = NULL, $value = NULL, $expiration = NULL)
{
if(is_null($expiration)){
$expiration = MEMCACHE_EXPIRATION;
}
if(is_array($key))
{
foreach($key as $multi){
if(!isset($multi['expiration']) || $multi['expiration'] == ''){
$multi['expiration'] = $this->config['config']['expiration'];
}
$this->set($this->key_name($multi['key']), $multi['value'], $multi['expiration']);
}
}else{
$this->local_cache[$this->key_name($key)] = $value;
switch($this->client_type){
case 'Memcache':
$add_status = $this->m->set($this->key_name($key), $value, MEMCACHE_COMPRESSION, $expiration);
break;
case 'Memcached':
$add_status = $this->m->set($this->key_name($key), $value, $expiration);
break;
}
return $add_status;
}
}
/**
* @Name get 根据键名获取值
* @param $key key
* @return array OR json object OR string...
* add by cheng.yafei
**/
public function get($key = NULL)
{
if($this->m)
{
if(isset($this->local_cache[$this->key_name($key)]))
{
return $this->local_cache[$this->key_name($key)];
}
if(is_null($key)){
$this->errors[] = 'The key value cannot be NULL';
return FALSE;
}
if(is_array($key)){
foreach($key as $n=>$k){
$key[$n] = $this->key_name($k);
}
return $this->m->getMulti($key);
}else{
return $this->m->get($this->key_name($key));
}
}else{
return FALSE;
}
}
/**
* @Name rm
* @param $key key
* @param $expiration 服务端等待删除该元素的总时间
* @return true OR false
* add by cheng.yafei
**/
public function rm($key, $expiration = NULL)
{
if(is_null($key))
{
$this->errors[] = 'The key value cannot be NULL';
return FALSE;
}
if(is_null($expiration))
{
$expiration = MEMCACHE_EXPIRATION;
}
if(is_array($key))
{
foreach($key as $multi)
{
$this->delete($multi, $expiration);
}
}
else
{
unset($this->local_cache[$this->key_name($key)]);
return $this->m->delete($this->key_name($key), $expiration);
}
}
/**
* @Name replace
* @param $key 要替换的key
* @param $value 要替换的value
* @param $expiration 到期时间
* @return none
* add by cheng.yafei
**/
public function replace($key = NULL, $value = NULL, $expiration = NULL)
{
if(is_null($expiration)){
$expiration = MEMCACHE_EXPIRATION;
}
if(is_array($key)){
foreach($key as $multi) {
if(!isset($multi['expiration']) || $multi['expiration'] == ''){
$multi['expiration'] = $this->config['config']['expiration'];
}
$this->replace($multi['key'], $multi['value'], $multi['expiration']);
}
}else{
$this->local_cache[$this->key_name($key)] = $value;
switch($this->client_type){
case 'Memcache':
$replace_status = $this->m->replace($this->key_name($key), $value, MEMCACHE_COMPRESSION, $expiration);
break;
case 'Memcached':
$replace_status = $this->m->replace($this->key_name($key), $value, $expiration);
break;
}
return $replace_status;
}
}
/**
* @Name replace 清空所有缓存
* @return none
* add by cheng.yafei
**/
public function flush()
{
return $this->m->flush();
}
/**
* @Name 获取服务器池中所有服务器的版本信息
**/
public function getversion()
{
return $this->m->getVersion();
}
/**
* @Name 获取服务器池的统计信息
**/
public function getstats($type="items")
{
switch($this->client_type)
{
case 'Memcache':
$stats = $this->m->getStats($type);
break;
default:
case 'Memcached':
$stats = $this->m->getStats();
break;
}
return $stats;
}
/**
* @Name: 开启大值自动压缩
* @param:$tresh 控制多大值进行自动压缩的阈值。
* @param:$savings 指定经过压缩实际存储的值的压缩率,值必须在0和1之间。默认值0.2表示20%压缩率。
* @return : true OR false
* add by cheng.yafei
**/
public function setcompressthreshold($tresh, $savings=0.2)
{
switch($this->client_type)
{
case 'Memcache':
$setcompressthreshold_status = $this->m->setCompressThreshold($tresh, $savings=0.2);
break;
default:
$setcompressthreshold_status = TRUE;
break;
}
return $setcompressthreshold_status;
}
/**
* @Name: 生成md5加密后的唯一键值
* @param:$key key
* @return : md5 string
* add by cheng.yafei
**/
private function key_name($key)
{
return md5(strtolower(MEMCACHE_PREFIX.$key));
}
/**
* @Name: 向已存在元素后追加数据
* @param:$key key
* @param:$value value
* @return : true OR false
* add by cheng.yafei
**/
public function append($key = NULL, $value = NULL)
{
// if(is_array($key))
// {
// foreach($key as $multi)
// {
//
// $this->append($multi['key'], $multi['value']);
// }
// }
// else
// {
$this->local_cache[$this->key_name($key)] = $value;
switch($this->client_type)
{
case 'Memcache':
$append_status = $this->m->append($this->key_name($key), $value);
break;
default:
case 'Memcached':
$append_status = $this->m->append($this->key_name($key), $value);
break;
}
return $append_status;
// }
}//END append
}// END class
?>
- Memcache 操作类
- 在config文件中添加相应配置(可扩展为多memcache server)
$cacheObj = new memcached();
$cacheObj -> set('keyName','this is value');
$cacheObj -> get('keyName');
exit;