python 訂單併發問題

2021-09-25 05:49:27 字數 810 閱讀 6255

訂單的併發問題:(秒殺活動)

訂單併發資料庫操作的鎖的問題!

悲觀鎖:如同python中的gil;只能有乙個操作可執行,其他需要等待;

python與mysql:

models.objects.select_for_update().get(id=1)

sql語句:

select * from models where id = 1 for update;

樂觀鎖: 不是加鎖,,,判斷更新時的庫存和之前查出的庫存是否一致

sk = models.objects.filter(id=1)

orgin_stock = sk.stock

new_stock = orgin_stock - int(count)

new_sales = sk.sales + int(count)

res = models.objects.filter(id=1, stock=orgin_stock).update(

stock=new_stock,

sales=new_sales)

# res是返回被修改的行數;

if res == 0:

# 說明下單失敗,需要進行事務的回滾

return jsonresponse()

對於樂觀鎖,一旦有更新,就會失敗。所以需要進行迴圈的判斷,不過迴圈要有次數限制;

由於mysql的事務隔離性存在,也會出現錯誤的問題;

需要修改mysql的配置檔案,修改mysql 的事務的隔離級別:

如果衝突比較少的時候,可以使用樂觀鎖!

解決併發問題

一.使用redis鎖 智慧型雲 工單系統 搶單 工單id鎖key public static final string cloud live gain order lock orderid cloud live gain order lock orderid component public cla...

Connection併發問題

connection lock getconnection lock.setautocommit false lock.createstatement execute select from zhaojianyong for update final connection connection ge...

hive併發問題

hive 併發模型 使用案例 併發支援 是資料庫的必須,而且他們的使用案例很好懂。至少,我們要盡可能支援併發讀和寫。新增幾個發現當前已經鎖定的鎖,是有用的。這裡沒有乙個直接的需求新增乙個api顯式獲取鎖,所以,所有鎖都是隱式獲取的。hive定義一下模式的鎖 注意不需要意向鎖 共享 s 排他 x 見名...