mysqli擴展的持久化連接在PHP5.3中(zhōng)被引入。支持已經存在于PDO MYSQL 和ext/mysql中(zhōng)。持久化連接背後的思想是客戶端進程和數據庫之間的連接可以通過一(yī)個客戶端進程來保持重用, 而不是多次的創建和銷毀。這降低了每次需要創建一(yī)個新連接的開(kāi)銷,未使用的連接被緩存起來并且準備随時被重用。
不像mysql擴展,mysqli沒有提供一(yī)個特殊的方法用于打開(kāi)持久化連接。需要打開(kāi)一(yī)個持久化連接時,你必須在 連接時在主機名前增加p:。
使用持久化連接的問題在于它們可能在客戶端處于不可預知(zhī)的狀态。比如,一(yī)個表鎖可能在客戶端意外(wài)終止之前被激活。 一(yī)個新的客戶端進程重用這個持久化連接就會"按照原樣"得到這個連接。這樣,一(yī)個新的客戶端進程 爲了更好的使用持久化連接,就需要做任何可能的清理工(gōng)作,這樣就增加了對程序員(yuán)的負擔。
mysqli擴展的持久化連接提供了内建的清理處理代碼。mysqli 所做的清理工(gōng)作包括:
回滾活動的事務
關閉并且删除臨時表
對表解鎖、
重置會話(huà)變量
關閉prepared語句(在PHP中(zhōng)經常發生(shēng))
關閉處理程序
釋放(fàng)通過GET_LOCK()獲得的鎖
這确保了從連接池返回的持久化連接在客戶端進程使用它之前處于幹淨的狀态。
mysqli擴展通過自動的調用C-API函數mysql_change_user() 來完成這個清理工(gōng)作。
自動清理的特性有優點也有缺點。優點是程序員(yuán)不再需要擔心附加的清理代碼,因爲它們會自動調用。然而缺點就是 代碼可能會潛在的慢(màn)一(yī)點,因爲每次從連接池返回一(yī)個連接都需要執行這些清理代碼。
這個自動清理的代碼可以通過在編譯php時定義MYSQLI_NO_CHANGE_USER_ON_PCONNECT 來關閉。
下(xià)一(yī)篇 ecshop列表頁商(shāng)品如何自定義排序即修改爲後台默認排序功能
上一(yī)篇: vcastr3播放(fàng)器自動播放(fàng)的問題