在我的网站上,每个用户都使用数据库(添加一些信息,获取它,更改它)。服务器限制为每个数据库用户30个并发连接。
我无法更改配置。
当在线用户数超过850-950时,与db(php + mysqli)的连接会返回错误。我试图为数据库创建更多用户,但托管人员删除了所有这些用户。
如何减少连接数?
我已经做过的事情:
减少对服务器的常规请求的频率(获取新消息,保存文本(如草稿))。
删除用户执行某些操作时上次保存的查询。
降低保存统计信息等的频率
答案 0 :(得分:0)
使用此(称为单例模式):
class Database {
private $_connection;
private static $_instance; //The single instance
private $_host;
private $_username;
private $_password;
private $_database;
/*
Get an instance of the Database
@return Instance
*/
public static function getInstance() {
if (!self::$_instance) { // If no instance then make one
self::$_instance = new self();
}
return self::$_instance;
}
// Constructor
private function __construct()
{
$this->setHost('localhost');
$this->setUsername('root');
$this->setPassword('');
$this->setDatabase('testbd');
$this->_connection = new mysqli($this->_host, $this->_username, $this->_password, $this->_database);
// Error handling
if (mysqli_connect_error()) {
trigger_error("Failed to connect to MySQL: " . mysqli_connect_error(),
E_USER_ERROR);
}
}
// Magic method clone is empty to prevent duplication of connection
private function __clone() { }
// Get mysqli connection
public function getConnection() {
return $this->_connection;
}
/**
* @param string $host
*/
public function setHost($host) {
$this->_host = $host;
}
/**
* @param string $username
*/
public function setUsername($username) {
$this->_username = $username;
}
/**
* @param string $password
*/
public function setPassword($password) {
$this->_password = $password;
}
/**
* @param string $database
*/
public function setDatabase($database) {
$this->_database = $database;
}
}
class Query extends Database {
public static function run($sql) {
return parent::getInstance()->getConnection()->query($sql);
}
public static function escape($string) {
return parent::getInstance()->getConnection()->real_escape_string($string);
}
public static function error() {
return parent::getInstance()->getConnection()->error;
}
}
要运行查询,请调用Query::run($sql);
它将返回一个mysqli结果对象。