From 5da5a0717bb76c02928cbda33c2156aa2727f171 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E9=99=88=E5=8F=94=E5=8F=94?= Date: Mon, 29 Jun 2015 19:30:17 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0redis=E9=9C=80=E8=A6=81?= =?UTF-8?q?=E6=9D=83=E9=99=90=E9=AA=8C=E8=AF=81=E7=9A=84=E9=AA=8C=E8=AF=81?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Think/Cache/Driver/Redis.class.php | 219 +++++++++--------- 1 file changed, 112 insertions(+), 107 deletions(-) diff --git a/ThinkPHP/Library/Think/Cache/Driver/Redis.class.php b/ThinkPHP/Library/Think/Cache/Driver/Redis.class.php index 132cefb..1e3c969 100644 --- a/ThinkPHP/Library/Think/Cache/Driver/Redis.class.php +++ b/ThinkPHP/Library/Think/Cache/Driver/Redis.class.php @@ -1,107 +1,112 @@ - -// +---------------------------------------------------------------------- -namespace Think\Cache\Driver; -use Think\Cache; -defined('THINK_PATH') or exit(); - -/** - * Redis缓存驱动 - * 要求安装phpredis扩展:https://github.com/nicolasff/phpredis - */ -class Redis extends Cache { - /** - * 架构函数 - * @param array $options 缓存参数 - * @access public - */ - public function __construct($options=array()) { - if ( !extension_loaded('redis') ) { - E(L('_NOT_SUPPORT_').':redis'); - } - $options = array_merge(array ( - 'host' => C('REDIS_HOST') ? : '127.0.0.1', - 'port' => C('REDIS_PORT') ? : 6379, - 'timeout' => C('DATA_CACHE_TIMEOUT') ? : false, - 'persistent' => false, - ),$options); - - $this->options = $options; - $this->options['expire'] = isset($options['expire'])? $options['expire'] : C('DATA_CACHE_TIME'); - $this->options['prefix'] = isset($options['prefix'])? $options['prefix'] : C('DATA_CACHE_PREFIX'); - $this->options['length'] = isset($options['length'])? $options['length'] : 0; - $func = $options['persistent'] ? 'pconnect' : 'connect'; - $this->handler = new \Redis; - $options['timeout'] === false ? - $this->handler->$func($options['host'], $options['port']) : - $this->handler->$func($options['host'], $options['port'], $options['timeout']); - } - - /** - * 读取缓存 - * @access public - * @param string $name 缓存变量名 - * @return mixed - */ - public function get($name) { - N('cache_read',1); - $value = $this->handler->get($this->options['prefix'].$name); - $jsonData = json_decode( $value, true ); - return ($jsonData === NULL) ? $value : $jsonData; //检测是否为JSON数据 true 返回JSON解析数组, false返回源数据 - } - - /** - * 写入缓存 - * @access public - * @param string $name 缓存变量名 - * @param mixed $value 存储数据 - * @param integer $expire 有效时间(秒) - * @return boolean - */ - public function set($name, $value, $expire = null) { - N('cache_write',1); - if(is_null($expire)) { - $expire = $this->options['expire']; - } - $name = $this->options['prefix'].$name; - //对数组/对象数据进行缓存处理,保证数据完整性 - $value = (is_object($value) || is_array($value)) ? json_encode($value) : $value; - if(is_int($expire) && $expire) { - $result = $this->handler->setex($name, $expire, $value); - }else{ - $result = $this->handler->set($name, $value); - } - if($result && $this->options['length']>0) { - // 记录缓存队列 - $this->queue($name); - } - return $result; - } - - /** - * 删除缓存 - * @access public - * @param string $name 缓存变量名 - * @return boolean - */ - public function rm($name) { - return $this->handler->delete($this->options['prefix'].$name); - } - - /** - * 清除缓存 - * @access public - * @return boolean - */ - public function clear() { - return $this->handler->flushDB(); - } - -} + +// +---------------------------------------------------------------------- +namespace Think\Cache\Driver; +use Think\Cache; +defined('THINK_PATH') or exit(); + +/** + * Redis缓存驱动 + * 要求安装phpredis扩展:https://github.com/nicolasff/phpredis + */ +class Redis extends Cache { + /** + * 架构函数 + * @param array $options 缓存参数 + * @access public + */ + public function __construct($options=array()) { + if ( !extension_loaded('redis') ) { + E(L('_NOT_SUPPORT_').':redis'); + } + $options = array_merge(array ( + 'host' => C('REDIS_HOST') ? : '127.0.0.1', + 'port' => C('REDIS_PORT') ? : 6379, + 'timeout' => C('DATA_CACHE_TIMEOUT') ? : false, + 'persistent' => false, + ),$options); + + $this->options = $options; + $this->options['expire'] = isset($options['expire'])? $options['expire'] : C('DATA_CACHE_TIME'); + $this->options['prefix'] = isset($options['prefix'])? $options['prefix'] : C('DATA_CACHE_PREFIX'); + $this->options['length'] = isset($options['length'])? $options['length'] : 0; + $func = $options['persistent'] ? 'pconnect' : 'connect'; + $this->handler = new \Redis; + $options['timeout'] === false ? + $this->handler->$func($options['host'], $options['port']) : + $this->handler->$func($options['host'], $options['port'], $options['timeout']); + // Redis 权限验证 配置文件格式 'REDIS_AUTH' => 'username:password', + $auth = C('REDIS_AUTH'); + if (!empty($auth)) { + $this->handler->auth($auth); + } + } + + /** + * 读取缓存 + * @access public + * @param string $name 缓存变量名 + * @return mixed + */ + public function get($name) { + N('cache_read',1); + $value = $this->handler->get($this->options['prefix'].$name); + $jsonData = json_decode( $value, true ); + return ($jsonData === NULL) ? $value : $jsonData; //检测是否为JSON数据 true 返回JSON解析数组, false返回源数据 + } + + /** + * 写入缓存 + * @access public + * @param string $name 缓存变量名 + * @param mixed $value 存储数据 + * @param integer $expire 有效时间(秒) + * @return boolean + */ + public function set($name, $value, $expire = null) { + N('cache_write',1); + if(is_null($expire)) { + $expire = $this->options['expire']; + } + $name = $this->options['prefix'].$name; + //对数组/对象数据进行缓存处理,保证数据完整性 + $value = (is_object($value) || is_array($value)) ? json_encode($value) : $value; + if(is_int($expire) && $expire) { + $result = $this->handler->setex($name, $expire, $value); + }else{ + $result = $this->handler->set($name, $value); + } + if($result && $this->options['length']>0) { + // 记录缓存队列 + $this->queue($name); + } + return $result; + } + + /** + * 删除缓存 + * @access public + * @param string $name 缓存变量名 + * @return boolean + */ + public function rm($name) { + return $this->handler->delete($this->options['prefix'].$name); + } + + /** + * 清除缓存 + * @access public + * @return boolean + */ + public function clear() { + return $this->handler->flushDB(); + } + +} \ No newline at end of file -- Gitee