1.早上提醒項目提前上線下午兩點至三點
2.導出兩張模板,生產環境需要導出CSR一張表方便以后查看
3.這問題讓我聯系很多情景下應用的鎖,分布式鎖、JAVA中線程同步鎖、mysql死鎖檢測機制、緩存鎖等,在關系型數據庫里又有行鎖,表鎖,讀鎖,寫鎖等鎖,這個問題我覺得理解它是多向的,什么情況使用鎖呢?
在多用戶環境中,在同一時間可能會有多個用戶更新相同的記錄,這會產生沖突最有效的辦法就是加入鎖;
悲觀鎖(Pessimistic Lock), 顧名思義,就是很悲觀,每次去拿數據的時候都認為別人會修改,所以每次在拿數據的時候都會上鎖,這樣別人想拿這個數據就會block直到它拿到鎖,實現悲觀鎖首先,在要鎖定的表里,加一個字段如 lock_at 時間標志,表示當前記錄被鎖定時的時間, 當為 0 時,表示該記錄未被鎖定,當要修改某個記錄時,先看看當前時間與 lock_at 字段相差是否超過預定的一個時長T,比如 30 分鍾 ,1 小時 之類的,如果沒超過,說明該記錄有人正在修改,我們暫時不能修改。 否則,說明可以修改,主要通過這個時間戳實現的。
樂觀鎖(Optimistic Lock), 顧名思義,就是很樂觀,每次去拿數據的時候都認為別人不會修改,所以不會上鎖,但是在更新的時候會判斷一下在此期間別人有沒有去更新這個數據,可以使用版本號等機制,實現樂觀鎖在程序里面我們需要定義兩個方法,分別是使用樂觀鎖返回版本號沒有使用鎖返回null,在添加一條記錄前,再次讀取這個記錄的版本號 字段,與之前讀取的值進行比對,
- 如果版本號不同,說明在用戶修改過程中,這個記錄被別人改動過了。那么, 我們要給出提示。
- 如果版本號 相同,說明這個記錄未被修改過。那么,對版本號 +1, 並保存這個記錄。這樣子就完成了記錄的更新。同時,該記錄的版本號也加了1。
zookeeper的數據可以支持臨時節點的概念,即客戶端寫入的數據是臨時數據,在客戶端宕機后,臨時數據會被刪除,這樣就實現了鎖的異常釋放。使用這樣的方式,就不需要給鎖增加超時自動釋放的特性了。
緩存鎖redis中SETNX 命令就搞定了,返回1代表加鎖成功,返回0 表示鎖被占用着。然后再用 DEL ***命令解鎖,返回1表示解鎖成功,0表示已經被解鎖過
http://www.digpage.com/lock.html
