public static function instance($config_name)
{
// memcache 驱动
if (\Config\Store::$driver == \Config\Store::DRIVER_MC) {
if (!isset(\Config\Store::${$config_name})) {
throw new \Exception("\\Config\\Store::{$config_name} not set\n");
}
if (!isset(self::$instance[$config_name])) {
if (extension_loaded('Memcached')) {
self::$instance[$config_name] = new \Memcached();
} elseif (extension_loaded('Memcache')) {
self::$instance[$config_name] = new \Memcache();
} else {
sleep(2);
exit("extension memcached is not installed\n");
}
foreach (\Config\Store::${$config_name} as $address) {
list($ip, $port) = explode(':', $address);
self::$instance[$config_name]->addServer($ip, $port);
}
}
return self::$instance[$config_name];
} elseif (\Config\Store::$driver == \Config\Store::DRIVER_REDIS) {
if (!isset(\Config\Store::${$config_name})) {
echo "\\Config\\Store::{$config_name} not set\n";
throw new \Exception("\\Config\\Store::{$config_name} not set\n");
}
if (!isset(self::$instance[$config_name])) {
self::$instance[$config_name] = new Redisd();
// 只选择第一个ip作为服务端
$address = current(\Config\Store::${$config_name});
list($ip, $port) = explode(':', $address);
$timeout = 1;
self::$instance[$config_name]->connect($ip, $port, $timeout);
self::$instance[$config_name]->setOption(\Redis::OPT_SERIALIZER, \Redis::SERIALIZER_PHP);
}
return self::$instance[$config_name];
} else {
if (!isset(self::$instance[$config_name])) {
self::$instance[$config_name] = new FileStore($config_name);
}
return self::$instance[$config_name];
}
}