/**
* 进程间共享内存操作类
*/
class Pshmop
{
protected static $_models = array();
private $_yac = null;
private static $_keyPrefix = 'shm_';
private static $_ttlMaxTime = 7776000; //86400*90 为防止永久贮存及保存时间过久造成内存消耗严重导致数据被踢出
/**
* Returns the static model of the specified AR class.
* @param string $className active record class name.
* @return Order the static model class
*/
public static function model($className = __CLASS__)
{
$model = null;
if (isset(self::$_models[$className]))
$model = self::$_models[$className];
else {
$model = self::$_models[$className] = new $className(null);
}
return $model;
}
public function __construct() {
if(extension_loaded("yac")){
$this->_yac = new Yac(self::$_keyPrefix);
}
}
/**
* add value
* @param mixed $keys
* @param mixed $value
* @param int $ttl
* @return mixed
*/
public function add($key, $value, $ttl=-1){
if(empty($key)){
return null;
}
if(empty($this->_yac)){
return null;
}
if($ttl<0 || $ttl>self::$_ttlMaxTime){
$ttl = self::$_ttlMaxTime;
}
return $this->_yac->add($key, $value, $ttl);
}
/**
* set value
* @param mixed $keys
* @param mixed $value
* @param int $ttl
* @return mixed
*/
public function set($key, $value, $ttl=-1){
if(empty($key)){
return null;
}
if(empty($this->_yac)){
return null;
}
if($ttl<0 || $ttl>self::$_ttlMaxTime){
$ttl = self::$_ttlMaxTime;
}
return $this->_yac->set($key, $value, $ttl);
}
/**
* get value
* @param mixed $keys
* @return mixed
*/
public function get($key){
if(empty($key)){
return null;
}
if(empty($this->_yac)){
return null;
}
return $this->_yac->get($key);
}
/**
* delete key
* @param mixed $keys
* @param int $delay
* @return mixed
*/
public function delete($key, $delay=0){
if(empty($key)){
return null;
}
if(empty($this->_yac)){
return null;
}
return $this->_yac->delete($key, $delay);
}
/**
* flush shm
* @param void
* @return mixed
*/
public function flush(){
if(empty($this->_yac)){
return null;
}
return $this->_yac->flush();
}
/**
* get shm info
* @param void
* @return mixed
*/
public function info(){
if(empty($this->_yac)){
return null;
}
return $this->_yac->info();
}
}