做了乙個nodejs併發測試,先描述一下環境 資料庫mysql,大概兩張表,讀取第一張表test的資料,拿出來-1,存到第二張testlog表記錄一下,用jmeter同事模擬50個請求,結果發現,部分資料沒有-1成功
test 表資料id num desc
1942017-02-2814:41:17:86testlog 表資料id,testid,num,desc 41992017-02-2814:32:42:2851982017-02-2814:32:43:7661972017-02-2814:32:44:8971972017-02-2814:32:44:8881972017-02-2814:32:44:2891972017-02-2814:32:44:86101972017-02-2814:32:44:45111972017-02-2814:32:45:4812197 2017-02-28 14:32:45:49 推測可能是同時修改資料,某乙個現在沒有修改完畢,下乙個執行緒已經讀取過了,導致資料更新不一致,但是nodejs不都是單執行緒的嗎,請各位大神解析一下,謝謝 **如下
varhttp =require('http');varurl =require('url');varutil =require('util');http.createserver(function(req,res));res.end("ok");varmysql =require('mysql');varconnection =mysql.createconnection();connection.connect();connection.query('select * from test',function(err,rows,fields);vartest =rows[0];//讀取numvarnum =test.num -1;varid =test.id;connection.query("update test set num="+num +",`desc`='"+dateformat(newdate())+"'",function (err, res) else }); } else }); }); function dateformat(date) ; if (/(y+)/.test(fmt)) for (var k in o) } return fmt; } }).listen(3000);
Redis高併發問題
商品搶購秒殺等活動 使用redis列表結構實現佇列資料結構,強拆的用rpush入隊,再用lpop出隊.redis宕機或者連線不上 解決方法 配置主從複製,配置哨兵模式,一旦發現主機宕機,讓下乙個從機當做主機。最壞的情況,只能關閉redis連線,去往資料庫連線。但由於資料量大,這樣sql資料庫也會宕掉...
php 處理併發問題
對於商品搶購等併發場景下,可能會出現超賣的現象,這時就需要解決併發所帶來的這些問題了 在php 語言中並沒有原生的提供併發的解決方案,因此就需要借助其他方式來實現併發控制。方案一 使用檔案鎖排它鎖 flock函式用於獲取檔案的鎖,這個鎖同時只能被乙個執行緒獲取到,其它沒有獲取到鎖的執行緒要麼阻塞,要...
資料庫高併發問題
多執行緒多程序 計算密集型任務 使用多程序,因為能python有gil,多程序可以利用上cpu多核優勢 io密集型任務 使用多執行緒,做io切換節省任務執行時間 併發 乙個專案剛開始的時候是為了實現基本功能,隨著版本和功能的迭代,大資料和高併發成了軟體設計必須考慮的問題 本質很簡單,乙個是慢,乙個是...