日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

锁究竟锁住的是什么?

發布時間:2024/10/5 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 锁究竟锁住的是什么? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

背景:今天遇到一個問題,在一個長事務中,我調用服務a去寫數據(redis數據庫不支持事物),然后調我的服務去寫這個數據,但是我主數據庫是事務型數據庫。當我事務失敗會滾的時候,服務a去寫的數據并沒有做相應的會滾動作。導致重新發起調用的時候,數據庫沒有值,但是redis有值,我的處理邏輯是redis有值我就不會去進行寫操作了,直接查回去就行了。所以尷尬的是我的主數據庫里面永遠丟失了這條數據。(業務要求數據無論成功與否都最好寫入數據庫中)

于是乎:

1、我對寫入主數據庫的方法做了異步,保證事務異常仍然不會會滾數據。

2、我對還沒提交事務的時候的數據優先查詢redis的數據。

保障了數據是最新的,而且在第二次使用數據的時候,數據庫里面因為異步也會存在該數據。

但是我發現,debug模式下,打斷點在異步方法中,主線程并沒有繼續執行,而是等待。但是事務失敗后,該數據仍然對主數據庫進行了寫入操作

什么是事務?

事務必須服從ACID原則。ACID指的是原子性(atomicity)、一致性(consistency)、隔離性(isolation)和持久性(durability)。 通俗理解,事務其實就是一系列指令的集合

  • 原子性:操作這些指令時,要么全部執行成功,要么全部不執行。只要其中一個指令執行失敗,所有的指令都執行失敗,數據進行回滾,回到執行指令前的數據狀態。
  • 一致性:事務的執行使數據從一個狀態轉換為另一個狀態,但是對于整個數據的完整性保持穩定。
  • 隔離性:在該事務執行的過程中,無論發生的任何數據的改變都應該只存在于該事務之中,對外界不存在任何影響。只有在事務確定正確提交之后,才會顯示該事務對數據的改變。其他事務才能獲取到這些改變后的數據。
  • 持久性:當事務正確完成后,它對于數據的改變是永久性的。

?什么是鎖?

鎖是用于解決隔離性的一種機制。另外鎖有不同的粒度,同時事務也是有不同的隔離級別的(一般有四種:讀未提交Read uncommitted, 讀已提交Read committed, 可重復讀Repeatable read, 可串行化Serializable)。 在具體的程序設計中,開啟事務其實是要數據庫支持才行的,如果數據庫本身不支持事務,那么仍然無法確保你在程序中使用的事務是有效的。 鎖可以分為樂觀鎖和悲觀鎖: 悲觀鎖:認為在修改數據庫數據的這段時間里存在著也想修改此數據的事務; 樂觀鎖:認為在短暫的時間里不會有事務來修改此數據庫的數據; 我們一般意義上講的鎖其實是指悲觀鎖,在數據處理過程中,將數據置于鎖定狀態(由數據庫實現)

關于樂觀鎖和悲觀鎖文章可以看看這個https://www.jianshu.com/p/d2ac26ca6525

回答一下初衷:鎖究竟鎖住的什么?java的鎖會鎖住鎖住當前對象的線程換言之java方法棧的內存數據,事務為實現隔離型也有鎖這個鎖一般是數據庫級別的鎖,不只是單單鎖對象。

?

?

?

總結

以上是生活随笔為你收集整理的锁究竟锁住的是什么?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。