标签:
配置:
$redis_config = array( ‘prefix‘ => ‘ylmall_‘, ‘master‘ => array( ‘host‘ => "192.168.1.19", ‘port‘ => "6379", ) );
类文件:
class cls_redis {
/**
*
* @var $_configMaster master config,default to empty array
*/
private $_configMaster = array ();
/**
*
* @var $_configSlave slave config,default to empty array
*/
private $_configSlave = array ();
/**
*
* @var $_redisKeyPrefix the redis key prefix
*/
private $_redisKeyPrefix = ‘‘;
private $debug = false;
public $queries = array ();
/**
*
* @ignore
*
*/
function __construct($redis_config) {
$this->_configMaster = $redis_config [‘master‘];
// $this->_configSlave = $redis_config[‘slave‘];
$this->_redisKeyPrefix = $redis_config [‘prefix‘];
}
/**
* Get redis key prefix
*
* @return string
*/
public function getKeyPrefix() {
return $this->_redisKeyPrefix;
}
/**
* Set redis key prefix
*
* @return
*
*/
public function setKeyPrefix($prefix) {
$this->_redisKeyPrefix = $prefix;
}
/**
*
* @var $_redisMaster redis master,default to null
*/
private $_redisMaster = null;
/**
* Get redis master server.If fail,throw ErrorException.
*
* @return Redis
*/
public function getRedisMaster() {
if ($this->_redisMaster instanceof Redis) {
return $this->_redisMaster;
} else {
$this->_redisMaster = new Redis ();
try {
$this->_redisMaster->connect ( $this->_configMaster [‘host‘], $this->_configMaster [‘port‘] );
$this->_redisMaster->setOption ( Redis::OPT_PREFIX, $this->_redisKeyPrefix );
} catch ( Exception $e ) {
// $this->errorShow ();
throw new ErrorException ( "Connect redis server " . implode ( ",", $this->_configMaster ) . " fail !" );
}
return $this->_redisMaster;
}
}
/**
*
* @var $_redisSlave redis slave,default to null
*/
private $_redisSlave = null;
/**
* Get redis salve server.If fail,throw a ErrorException.
*
* @return Redis
*/
public function getRedisSlave() {
if ($this->_redisSlave instanceof Redis) {
return $this->_redisSlave;
} else {
$this->_redisSlave = new Redis ();
try {
// $this->_redisSlave->connect($this->_configSlave[‘host‘], $this->_configSlave[‘port‘]);
// $this->_redisSlave->setOption(Redis::OPT_PREFIX, $this->_redisKeyPrefix);
$this->_redisSlave->connect ( $this->_configMaster [‘host‘], $this->_configMaster [‘port‘] );
$this->_redisSlave->setOption ( Redis::OPT_PREFIX, $this->_redisKeyPrefix );
} catch ( Exception $e ) {
// $this->errorShow();
// throw new ErrorException("Connect redis server " . implode(",", $this->_configSlave) . " fail !");
$this->errorShow ();
throw new ErrorException ( "Connect redis server " . implode ( ",", $this->_configMaster ) . " fail !" );
}
return $this->_redisSlave;
}
}
/**
*
* @var $_cmdScopeMaster master sever command scope
*/
private static $_cmdScopeMaster = array (
‘multi‘,
‘exec‘,
‘discard‘,
‘watch‘,
‘unwatch‘,
// key - value structure
‘setex‘,
‘psetex‘,
‘setnx‘,
‘del‘,
‘delete‘,
‘incr‘,
‘incrBy‘,
‘incrByFloat‘,
‘decr‘,
‘decrBy‘,
// list structrue
‘lPush‘,
‘rPush‘,
‘lPushx‘,
‘rPushx‘,
‘lSet‘,
‘lRem‘,
‘lRemove‘,
‘lInsert‘,
‘lTrim‘,
‘listTrim‘,
// set structrue
‘sAdd‘,
‘sRem‘,
‘sRemove‘,
‘sMove‘,
‘sPop‘,
// hash structrue
‘hSet‘,
‘hSetNx‘,
‘hDel‘,
‘hIncrBy‘,
‘hIncrByFloat‘,
‘hMset‘,
// transaction
‘multi‘,
‘exec‘,
// sorted set structrue
‘zAdd‘,
‘zDelete‘,
‘zDeleteRangeByRank‘,
‘zCount‘,
‘zRange‘,
‘zRangeByScore‘,
‘expire‘,
// server
‘info‘
);
/**
* set master server commadn scope
*
* @param array $cmds
* @return void
*/
public function setCmdScopeMaster(array $cmds) {
self::$_cmdScopeMaster = array_unique ( array_merge ( self::$_cmdScopeMaster, $cmds ) );
}
/**
*
* @var $_cmdScopeSlave slave sever command scope
*/
private static $_cmdScopeSlave = array (
// key - value structure
‘exists‘,
‘mGet‘,
‘getMultiple‘,
// list structure
‘lPop‘,
‘rPop‘,
‘blPop‘,
‘brPop‘,
‘lSize‘,
‘lIndex‘,
‘lGet‘,
‘lRange‘,
‘lGetRange‘,
// set structrue
‘sIsMember‘,
‘sContains‘,
‘sCard‘,
‘sSize‘,
‘sRandMember‘,
‘sMembers‘,
// hash structrue
‘hGetAll‘,
‘hGet‘,
‘hLen‘,
‘hKeys‘,
‘hVals‘,
‘hExists‘,
‘hMGet‘,
// sorted set structrue
‘zRevRange‘,
‘zRevRangeByScore‘
);
/**
* set slave server commadn scope
*
* @param array $cmds
* @return void
*/
public function setCmdScopeSlave(array $cmds) {
self::$_cmdScopeSlave = array_unique ( array_merge ( self::$_cmdScopeSlave, $cmds ) );
}
/**
* set a key value
*
* @param string $key
* @param mixed $value
* @param int $expire
* @return bool
*/
public function set($key, $value, $expire = 0) {
if ($this->debug) {
$this->queries [] = "custom set : $key $value";
}
$value = serialize ( $value );
$this->getRedisMaster ();
if ($expire) {
return $this->_redisMaster->setex ( $key, $expire, $value );
} else {
return $this->_redisMaster->set ( $key, $value );
}
}
/**
* Get the value of a key
*
* @param string $key
* @return mixed
*/
public function get($key) {
if ($this->debug) {
$this->queries [] = "custom get : $key";
}
$this->getRedisSlave ();
return unserialize ( $this->_redisSlave->get ( $key ) );
}
/**
* Call Redis method use master or slave instance.If fail,throw a ErrorException.
*
* @return
*
*/
public function __call($name, $args) {
if ($this->debug) {
$this->queries [] = "call method : $name " . implode ( ‘,‘, $args );
}
if (in_array ( $name, self::$_cmdScopeMaster )) {
$this->getRedisMaster ();
return call_user_func_array ( array (
$this->_redisMaster,
$name
), $args );
} elseif (in_array ( $name, self::$_cmdScopeSlave )) {
$this->getRedisSlave ();
return call_user_func_array ( array (
$this->_redisSlave,
$name
), $args );
} else {
throw new ErrorException ( "It is an invalidate method : {$name}!" );
}
}
/**
* Set redis resource to null when serializing
*/
public function __sleep() {
$this->_redisMaster = $this->_redisSlave = null;
}
/**
* Set redis resource to null when destruct
*/
public function __destruct() {
$this->_redisMaster = $this->_redisSlave = null;
}
public function errorShow() {
}
}
标签:
原文地址:http://www.cnblogs.com/icyy/p/4584345.html