<?php
/**
* 缓存驱动
* @author Devil
* @version 1.0.0
*/
class CacheLibrary
{
private $c_obj;
private $c_time;
/**
* [__construct 构造方法]
*/
public function __construct($host, $port = 11211)
{
/* 实例化memcached */
$this->c_obj = new Memcached();
if(!$this->c_obj->addServer($host, $port)) Api_Return(L('code_413'), 413);
/* 基础参数设置 */
$this->c_time = empty(C('cache')['time']) ? 0 : C('cache')['time'];
}
/**
* [GetTime 获取缓存时间]
* @return [int] [缓存时间]
*/
private function GetTime($time = 0)
{
return (intval($time) > 0) ? intval($time) : $this->c_time;
}
/**
* [Add 缓存添加]
* @param [string] $key [索引]
* @param [mixed] $val [值]
* @param [integer] $time [过期时间(单位秒), 0永久, 或时间戳]
* @return [boolean] [成功true, 失败false]
*/
public function Add($key, $val, $time = 0)
{
return $this->c_obj->add($key, $val, $this->GetTime($time));
}
/**
* [Set 缓存替换]
* @param [string] $key [索引]
* @param [mixed] $val [值]
* @param [integer] $time [过期时间(单位秒), 0永久, 或时间戳]
* @return [boolean] [成功true, 失败false]
*/
public function Set($key, $val, $time = 0)
{
return $this->c_obj->set($key, $val, $this->GetTime($time));
}
/**
* [SetMulti 设置多个索引的缓存数据]
* @param [type] $key_all [索引数组]
* @param [integer] $time [过期时间(单位秒), 0永久, 或时间戳]
* @return [boolean] [成功true, 失败false]
*/
public function SetMulti($key_all, $time = 0)
{
return $this->c_obj->setMulti($key_all, $time);
}
/**
* [Append 向已存在索引后面追加数据]
* @param [string] $key [索引]
* @param [string] $val [追加的数据(字符串)]
*/
public function Append($key, $val)
{
$this->setOption();
return $this->c_obj->append($key, $val);
}
/**
* [Prepend 向已存在索引前面追加数据]
* @param [string] $key [索引]
* @param [string] $val [追加的数据(字符串)]
*/
public function Prepend($key, $val)
{
$this->setOption();
return $this->c_obj->prepend($key, $val);
}
/**
* [Replace 替换已存在索引下的元素]
* @param [string] $key [索引]
* @param [mixed] $val [值]
* @param [integer] $time [过期时间(单位秒), 0永久, 或时间戳]
* @return [boolean] [成功true, 失败false]
*/
public function Replace($key, $val, $time = 0)
{
$this->c_obj->replace($key, $val, $time);
}
/**
* [setOption 设置选项]
*/
private function setOption()
{
$this->c_obj->setOption(Memcached::OPT_COMPRESSION, false);
}
/**
* [Fetch 抓取下一个结果]
* @param [string] $key_all [索引名]
* @param [boolean] $cas [是否返回长度, 是true, 否false默认]
*/
public function Fetch($key_all, $cas = false)
{
$this->GetDelayed($key_all, $cas);
return $this->c_obj->fetch();
}
/**
* [FetchAll 抓取所有剩余的结果]
* @param [string] $key_all [索引名]
* @param [boolean] $cas [是否返回长度, 是true, 否false默认]
*/
public function FetchAll($key_all, $cas = false)
{
$this->GetDelayed($key_all, $cas);
return $this->c_obj->fetchAll();
}
/**
* [GetDelayed 请求多个索引]
* @param [string] $key_all [索引名]
* @param [boolean] $cas [是否返回长度, 是true, 否false默认]
*/
private function GetDelayed($key_all, $cas)
{
$this->c_obj->getDelayed($key_all, $cas);
}
/**
* [Get 缓存获取]
* @param [string] $key [索引]
* @return [mixed] [当前索引对应的数据]
*/
public function Get($key)
{
return $this->c_obj->get($key);
}
/**
* [GetMulti 获取多个索引的缓存数据]
* @param [type] $key_all [索引数组]
*/
public function GetMulti($key_all)
{
return $this->c_obj->getMulti($key_all);
}
/**
* [Delete 删除一个索引]
* @param [string] $key [索引]
* @param [integer] $time [等待时间(单位秒), 0立即, 或时间戳]
* @return [boolean] [成功true, 失败false]
*/
public function Delete($key, $time = 0)
{
return $this->c_obj->delete($key, $time);
}
/**
* [DeleteMulti 删除多个索引]
* @param [array] $key_all [索引数组]
* @param [integer] $time [过期时间(单位秒), 0立即, 或时间戳]
* @return [boolean或array] [成功true, 失败false]
*/
public function DeleteMulti($key_all, $time = 0)
{
$s = $this->c_obj->deleteMulti($key_all, $time);
if(empty($s)) return false;
foreach($s as $key=>$val)
{
if($val !== true) if($this->Get($key) == false) $s[$key] = true;
}
return $s;
}
/**
* [Flush 作废所有元素]
* @param [integer] $time [等待时间(单位秒), 0立即]
* @return [boolean] [成功true, 失败false]
*/
public function Flush($time = 0)
{
return $this->c_obj->flush($time);
}
}
?>