Redis悲观锁、乐观锁和调用Lua脚本的优缺点
悲觀鎖使用了數據庫的鎖機制,可以消除數據不一致性,對于開發者而言會十分簡單,但是,使用悲觀鎖后,數據庫的性能有所下降,因為大量的線程都會被阻塞,而且需要有大量的恢復過程,需要進一步改變算法以提高系統的并發能力。
通過 CAS 原理和 ABA 問題的討論,我們更加明確了樂觀鎖的原理,使用樂觀鎖有助于提高并發性能,但是由于版本號沖突,樂觀鎖導致多次請求服務失敗的概率大大提高,而我們通過重入(按時間戳或者按次數限定)來提高成功的概率,這樣對于樂觀鎖而言實現的方式就相對復雜了,其性能也會隨著版本號沖突的概率提升而提升,并不穩定。
使用樂觀鎖的弊端在于,導致大量的 SQL 被執行,對于數據庫的性能要求較高,容易引起數據庫性能的瓶頸,而且對于開發還要考慮重入機制,從而導致開發難度加大。
使用 Redis 去實現高并發,通過 Redis 提供的 Lua 腳本的原子性,消除了數據不一致性,并且在整個過程中只有最后一次涉及數據庫,而且是使用了新的線程。
在實際操作中更加傾向于使用 JMS 啟動另外的服務器進行操作。但是這樣使用的風險在于 Redis 的不穩定性,因為其事務和存儲都存在不穩定的因素,所以更多的時候,建議使用獨立 Redis 服務器做高并發業務,一方面可以提高 Redis 的性能,另一方面即使在高并發的場合,Redis 服務器宕機也不會影響現有的其他業務,同時也可以使用備機等設備提高系統的高可用,保證網站的安全穩定。
總結
以上是生活随笔為你收集整理的Redis悲观锁、乐观锁和调用Lua脚本的优缺点的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java 判断目录是否为空
- 下一篇: Spring Boot 热部署 devt