以前我用過querylist插件抓數據,服務器寫和定時器,每天固定時間去運行腳本。朝這個方式試試
成都創(chuàng)新互聯公司是一家專注于做網站、網站制作與策劃設計,江城網站建設哪家好?成都創(chuàng)新互聯公司做網站,專注于網站建設10年,網設計領域的專業(yè)建站公司;建站業(yè)務涵蓋:江城等地區(qū)。江城做網站價格咨詢:18982081108
高并發(fā)下數據的更新,應該 update table xxx set num = num - 1 的方式,這種方式可以保證數據的正確性。
但是會出現 num 為負數的問題,如果庫存為負數,顯然是不合理的。
于是,需要將 num 字段設置為 無符號整型,這樣就不會出現負數了,因為,如果減到負數,就會更新失敗。
但是這種依然會造成很多無用的更新語句的執(zhí)行,是不合理的。
于是,update table xxx set num = num - 1 where num 0,
這樣當 num 等于0之后就不會去更新數據庫了,減少了很多無用的開銷。
這種方式被稱作“樂觀鎖”
此外,對于搶紅包這種非整數的操作,我們應該轉換為整數的操作。
關于搶購超賣的控制
一般搶購功能是一個相對于正常售賣系統(tǒng)來說獨立的子系統(tǒng),這樣既可以防止搶購時的高并發(fā)影響到正常系統(tǒng),
也可以做到針對于搶購業(yè)務的特殊處理。
在后臺設計一些功能,可以就昂正常的商品加入到搶購活動中并編輯成為搶購商品,寫入到搶購商品表,當然
也可以把搶購商品表寫入redis而不是數據表。并且在原商品表寫入一個同樣的商品(id相同,用于訂單查看,
此商品不可購買)
如果是數據表,為了控制超賣,需要對表進行行鎖,更新的時候帶上 where goods_amount 0。
如果是redis,使用 hincrby 一個負數來減庫存,并且 hincrby 會返回改變后的值,再來判斷返回值是否大于0,
因為redis每個命令都是原子性的,這樣不用鎖表就可控制超賣。
那你可以在插入數據庫那里設置監(jiān)聽呀,一有插入就往Android推送消息。
不然你只能通過每隔一段時間刷新一下讀取數據庫,看看有沒有更新,有就推送,沒有就繼續(xù)監(jiān)聽,這個你可以自己設置更新時間。
這需要前后端配合,前端需要實時監(jiān)聽后端api返回數據是否更新,或者后端也可以采用socket長連接保持數據推送,不讓前端實時請求
可以用腳本來實現;
思路:
1.創(chuàng)建一個ceshi.txt文件,內容是數據庫內數據數量;
2.腳本內容查詢數據庫數量,讀取并更新ceshi.txt內的數量,判斷查詢出的數量大于ceshi.txt內的數量就是新增,小于就是刪除,并執(zhí)行php程序;