A. php 中的mysql for update 加鎖後還其他用戶還能讀取嗎
加鎖後只能讀,但不能寫。
B. php中如何避免mysql資料庫死鎖
mysql一般不會死鎖,除非程序有問題。性能優先事務不優先的資料庫(設置)不要追求可靠性萬無一失。
網站性能問題主要是資料庫量大了以後,查詢掃描硬碟而產生的。其它性能不要太在意。編寫代碼的時候不要堅持性能原則,而是堅持可用性原則。初學者編寫代碼通常容易面向性能,但是一個項目的一個頁面幾百、幾千行代碼是很常見的。要面向可用性、可維護性、可讀性。這是項目原則。你看看java語言。對於網站,除了查詢掃描硬碟而產生的時間延遲,其它是不管的,只要不算有問題就可以。
連接方式是否為永久連接,在訪問量未達到高並發之前,還是非永久鏈接更好。非永久連接的資源消耗是不大於永久連接的,因為mysql是把連接許可權緩存的,不會多次掃描硬碟,性能是可執行級別的而不是查找數據級別的。在訪問量達到高並發之後,性能問題的原因是多方面的,多環節的,是否為永久連接不是主要原因。
C. mongodb 樂觀鎖怎麼使用php
sql中並發控制採用的樂觀鎖就是在記錄中增加版本號或timestamp,那麼MongoDB中如何實現呢?
Mongodb不善於處理事務,但提供了findAndModify命令。該命令允許對文檔進行原子性更新,並在同一次調用中返回:
代碼如如:
db.collection_yown.findAndModify(
{
query:{"name":"yown"},update:{"version":2},new:true or false
}
)
默認情況下,findAndModify命令會返回更新前的文檔,要是返回修改後的文檔,就把new設置為false.
Mongodb同時也提供update命令,這兩者的區別如下:
update和findAndModify都可以用做更新操作;
區別
findAndModify是有返回值的,輸出中的value欄位即返回修改之前的文檔,使用 new:true選項返回修改後的文檔。 update是更新操作,是沒有返回值的。
findAndModify 強調操作的原子性(atomically),比如用來實現自增1的操作或者操作隊列。屬於 get-and-set 式的操作,一般來講,findAndModify 比update操作稍慢,因為需要等待資料庫的響應。
另外findAndModify ,其中modify可以是update,還可以是remove
{
findAndModify: <string>,
query: <document>,
sort: <document>,
remove: <boolean>,
update: <document>,
new: <boolean>,
fields: <document>,
upsert: <boolean>
}
D. PHP如何使用文件鎖解決高並發問題
<?php
//連接資料庫
$con=mysqli_connect("192.168.2.186","root","root","test");
//查詢商品數量是否大於0,大於0才能下單,並減少庫存
$fp = fopen("lock.txt", "r");
//加鎖
if(flock($fp,LOCK_EX))
{
$res=mysqli_fetch_assoc(mysqli_query($con,'SELECT total FROM shop WHERE id=1 LIMIT 1'));
if($res['total']>0){mysqli_query($con,'UPDATE shop SET total=total-1 WHERE id=1');}
//執行完成解鎖
flock($fp,LOCK_UN);
}
//關閉文件
fclose($fp);
unset($res);
mysqli_close($con);
?>
E. PHP下有沒有互斥鎖的實現方案
木有...至於鎖的方案一般由資源自己實現。比如對資料庫和緩存的訪問。PHP進程都是單線程模型,如果資源不可讀寫,則阻塞。不過PHP有文件鎖的機制,這貌似是PHP唯一支持的鎖...