Home > php教程 > PHP源码 > Redis Client,单例

Redis Client,单例

PHP中文网
Release: 2016-05-23 17:10:17
Original
1498 people have browsed it

php代码

<?php  //if(!defined(&#39;BASEPATH&#39;)) exit(&#39;No direct script access allowed...&#39;);

/**
 * ---------------- redis.conf.php ------------------
 * $redis_conf = array();
 * $redis_conf[&#39;master&#39;] = array();;
 * $redis_conf[&#39;master&#39;][&#39;host&#39;] = &#39;127.0.0.1&#39;;
 * $redis_conf[&#39;master&#39;][&#39;port&#39;] = 6379;
 * $redis_conf[&#39;master&#39;][&#39;passwd&#39;] = &#39;&#39;;
 * $redis_conf[&#39;master&#39;][&#39;timeout&#39;] = 1;
 * ---------------- author:  simon ------------------
 */

/**
 * Redis Client Interface
 *
 * ------------------- Usage ---------------------
 * $conf_dir = __DIR__ .&#39;/../conf/redis.conf.php&#39;;
 * $redis = RedisCli::getInstance($conf_dir, &#39;master&#39;);
 * $ret = $redis->set(&#39;xxxxx&#39;, &#39;good&#39;);
 * $ret = $redis->get(&#39;xxxxx&#39;);
 *
 */

class RedisCli {
	private static $_instance = array();
	private $_redis = false;
	
	/**
	 * 单例模型,构造函数
	 */
	public static function getInstance($conf_dir=&#39;/xxx/redis.conf.php&#39;, $serverName=&#39;master&#39;) {
		if (isset(self::$_instance[$serverName])) {
			return self::$_instance[$serverName];
		}
		require_once($conf_dir);
		if (!isset($redis_conf[$serverName])) {
			throw new Exception("param serverName Or redis config error...");
		}
		$conf = $redis_conf[$serverName];
		if (!class_exists(&#39;Redis&#39;)) {
			throw new Exception("Class Redis not exists, please install the php Redis extension...");
		}
		if (isset($conf[&#39;host&#39;]) && isset($conf[&#39;port&#39;]) && isset($conf[&#39;passwd&#39;]) && isset($conf[&#39;timeout&#39;])) {
			self::$_instance[$serverName] = new self($conf[&#39;host&#39;], $conf[&#39;port&#39;], $conf[&#39;passwd&#39;], $conf[&#39;timeout&#39;]);
			return self::$_instance[$serverName];
		}
		return false;
	}

	/**
	 *  私有, 单例模型,禁止外部构造
	 */
	private function __construct($host, $port, $passwd, $timeout) {
		$this->_redis = new Redis();
		if ($this->_redis->connect($host, $port, $timeout)) {
			if (!empty($passwd)) {
				$this->_redis->auth($passwd);
			}
		}
	}

	/**
	 *  私有, 单例模型,禁止克隆
	 */
	private function __clone() {
	}

    /**
	 *  公有,调用对象函数
	 */
	public function __call($method, $args) {
		if (!$this->_redis || !$method) {
			return false;
		}
		if (!method_exists($this->_redis, $method)) {
			throw new Exception("Class RedisCli not have method ($method) ");
		}
		return call_user_func_array(array($this->_redis, $method), $args);
	}
}

?>
Copy after login
Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Articles by Author
Popular Recommendations
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template