Django中管理併發操作

2022-08-23 21:03:11 字數 677 閱讀 9847

涉及了事務操作,我們不得不考慮的另乙個問題就是:併發操作

還是那個使用者轉賬的操作

我們使用事務操作解決的操作中途伺服器宕機問題

但是,如果有兩條請求同時修改一條記錄該怎麼辦?

select_for_update使用的是悲觀鎖

使用select_for_update內部執行的sql語句就是select...for update

具體用法:

models.userinfo.objects.select_for_update().get()

注意:一定要讓select_for_update在同乙個事務中

樂觀鎖的出發點是:同一條資料很少會因為併發修改而產生衝突,適用於讀多寫少的操作,用以提高吞吐量

實現方式:

讀取乙個字段,執行處理邏輯,當需要更新資料的時候,再次檢查該欄位是否和第一次讀取的一致。如果一致,則更新資料。否則拒絕更新,重新讀取後再提交

悲觀鎖可能會導致死鎖的發生

當a鎖定了a資源,需要b資源。而b資源又被b鎖定了,正在等待a資源。此時就導致了死鎖。我們一般通過設定超時時間來處理這個問題。

悲觀鎖可以有效的降低衝突後,重試的次數

樂觀鎖可以提高響應速度

Django中session進行許可權管理的使用

目錄 當session啟用後,傳遞給檢視request引數的httprequest物件將包含乙個session屬性,就像乙個字典物件一樣。你可以在django的任何地方讀寫request.session屬性,或者多次編輯使用它。這個檔案在我的c users 17764530215 test mysi...

django中ORM的事務操作

在django的orm中,有兩種使用事務的方式 注意,mysql需要是innodb引擎 from django.db import transaction transaction.atomic def viewfunc request 下面的 在乙個事務中執行,一但出現異常,整個函式中所有的資料庫操...

django中orm的簡單操作

from django.db import models create your models here.from django.db import models create your models here.class author models.model nid models.autofie...