Heim  >  Artikel  >  php教程  >  Redis Client,单例

Redis Client,单例

PHP中文网
PHP中文网Original
2016-05-23 17:10:171438Durchsuche

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);
	}
}

?>
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:在线端口扫描工具Nächster Artikel:使用usort对数组进行排序