/** * 获取一个随机Host数组 * * @param $group * @return array|bool */ public static function getRandHostData($group) { $time = self::$lastChangeTime->get(); if (self::$lastTime < $time) { # 需要更新数据 self::$hostByGroup = []; self::$lastTime = $time; foreach (self::$table as $v) { self::$hostByGroup[$v['group']][$v['id']] = $v['id']; } } if (isset(self::$hostByGroup[$group]) && self::$hostByGroup[$group]) { $hostId = array_rand(self::$hostByGroup[$group]); return self::$table->get("{$group}_{$hostId}"); } else { return false; } }
protected function _driverSet($k, $v) { switch ($this->_type) { case 'mysql': foreach ($v as &$tmp) { $tmp = "'" . $this->_driver()->real_escape_string($tmp) . "'"; } unset($tmp); $k = $this->_driver()->real_escape_string($k); $sql = 'INSERT INTO `' . $this->_link['table'] . '`, (`_key`, `' . implode('`, `', array_keys($v)) . '`) VALUES (\'' . $k . '\', ' . implode(', ', $v) . ')'; $sql .= 'ON DUPLICATE KEY UPDATE '; foreach ($v as $kk => $vv) { $sql .= "`{$kk}` = {$vv}, "; } $sql = rtrim($sql, ' ,'); # INSERT INTO table (a,b,c) VALUES (1,2,3) ON DUPLICATE KEY UPDATE c = 1; $rs = $this->_driver()->query($sql); return $rs ? true : false; case 'sqlite': break; case 'redis': case 'ssdb': return $this->_driver()->hSet($this->_link['path'], $k, serialize(parent::get($k))); case 'rocksdb': if (!$this->_driver) { $this->_driver = new \RocksDB($this->_link['path']); } return $this->_driver->set($k, serialize($v)); } return false; }