MySQL是一款常用的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),具有開(kāi)源、高效、可擴(kuò)展等優(yōu)點(diǎn)。在MySQL連接過(guò)程中,單例模式是很常見(jiàn)的設(shè)計(jì)模式之一。下面我們來(lái)了解一下什么是MySQL單例連接。
//數(shù)據(jù)庫(kù)連接類(lèi) class Db{ private static $_instance = null; private static $_conn = null; private function __construct(){ $config = [ 'host' =>'127.0.0.1', 'port' =>'3306', 'username' =>'root', 'password' =>'123456', 'dbname' =>'test', ]; $dsn = sprintf('mysql:host=%s;port=%s;dbname=%s;charset=utf8', $config['host'], $config['port'], $config['dbname']); try{ self::$_conn = new PDO($dsn, $config['username'], $config['password']); }catch(PDOException $e){ die('Connection failed:'. $e->getMessage()); } } public static function getInstance(){ if(!self::$_instance){ self::$_instance = new self; } return self::$_instance; } public function getConn(){ return self::$_conn; } } $db1 = Db::getInstance(); $db2 = Db::getInstance(); if($db1->getConn() === $db2->getConn()){ echo '同一個(gè)連接'; }else{ echo '不是同一個(gè)連接'; }
在上述代碼中,實(shí)現(xiàn)了一個(gè)數(shù)據(jù)庫(kù)連接類(lèi)Db,在構(gòu)造函數(shù)中通過(guò)PDO實(shí)例化連接。getInstance方法返回一個(gè)單例對(duì)象實(shí)例,并且判斷當(dāng)前實(shí)例是否存在,如果不存在則新建一個(gè)實(shí)例,如果存在則返回創(chuàng)建好的單例對(duì)象實(shí)例。這種設(shè)計(jì)模式單例模式可以有效地減少數(shù)據(jù)庫(kù)連接的開(kāi)銷(xiāo),減少連接池競(jìng)爭(zhēng),提高系統(tǒng)的性能。
上一篇MySQL分組后合成一行
下一篇C json 串不排序