色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

mysql查詢重復查詢,如何保證多線程從mysql數據庫查詢的數據不重復

方一強2年前65瀏覽0評論
mysql查詢重復查詢,如何保證多線程從mysql數據庫查詢的數據不重復?

以mysql來說,可能出現臟讀、不可重復讀以及幻讀,mysql默認設置是可重復讀,即一次事務中不會讀取到不同的數據。可以做如下操作:

1)打開兩個客戶端,均設置為RR;

2)在一個事務中,查詢某個操作查到某份數據;比如是某個字段version=1存在數據;

3)在另一個事務中,刪除這份version=1的數據;刪除后,在2所屬的事務中查詢數據是沒有變化的,還是存在version=1的數據;

4)當我們在2所屬的事務中繼續更新數據,那么會發現更新不了,明明我們就看到了這份version=1的數據;緩存一致性:緩存一致,與什么一致?是與數據庫一致,對外查詢每個時刻一致;所以在針對于緩存與數據庫之間該先更新哪一個呢?可能有人覺得我先更新數據庫,再更新緩存不就行了嗎?但是有想過個問題嗎?當用戶已經支付成功了,更新到數據庫,但是呢?你還在緩存中顯示未支付,在用戶點擊頻率很高并且數據庫壓力過大,來不及同步到緩存時,那你是不是很尷尬,這就是典型的不一致了。此時用戶再支付,那你又告訴他已經支付了,那他會把你罵死的那該怎么來做呢?我們可以這樣,先更新緩存再更新數據庫,那么存在什么問題呢?1)緩存更新成功,但是數據庫更新失敗,而被其它的并發線程訪問到2)緩存淘汰成功,但是數據庫更新失敗,這也會引發后期數據不一致