重複提交表單形成的重複註冊問題。

問題:項目測試過程當中發現用戶表中有兩個如出一轍的數據,便是同一用戶註冊兩次。前端

1.分析:
第一反應是用戶註冊時重複提交了;mysql

前端方面,應該有提交加載框鎖定,那爲何還會重複提交呢?問了前端才知道渲染加載框有延遲,因此用戶可重複提交。sql

後端方面,無論前端是否優化問題,後端能夠作些什麼處理?
思路很簡單,mysql事務查詢時加上寫鎖。數據庫

2.解決:
復現模擬用戶點擊,可以使用如下方法:
建立兩個相同註冊接口a1,a2,在接口a1事務中加入睡眠10秒--sleep(10),而後前後請求a一、a2,能夠就可模擬出重複註冊的問題。後端

修改代碼在查詢時加上寫鎖:
再重複以上操做進行測試,問題解決。併發

3.結論:
明確重複註冊這一類的問題,接口類型屬寫數據,查詢讀數據不會出現。
藉着該問題,從新複習關於數據庫鎖方面的知識。
(1)鎖須要在事務中才生效;
(2)鎖分共享鎖和排它鎖,共享鎖只鎖寫不鎖讀,排它鎖鎖讀寫;
(3)鎖有範圍,行鎖和表鎖;
(4)針對同一行數據,加鎖和不加鎖同時存在的讀寫狀態是怎麼樣的。
(5)鎖主要解決什麼問題,併發。
待續。。測試

相關文章
相關標籤/搜索