2026-01-29 19:02:54
乐观锁和悲观锁是并发控制中两种截然不同的策略,核心区别在于对数据冲突的假设及处理方式。具体如下:
乐观锁版本号:每次更新操作将版本号加一,更新时需匹配当前版本号。
时间戳:需解决时钟同步问题,确保时间戳的准确性。
业务字段:如库存数量,仅当字段未变化时允许更新。
读多写少:冲突检测在提交时进行,避免频繁加锁解锁,提升并发性能。例如社交网络中用户查看帖子远多于编辑帖子。
冲突概率低:若冲突频繁发生,乐观锁会因重试降低性能。
无法解决脏读问题:仅在提交时检查冲突,无法阻止读取未提交的数据。
冲突高发时性能下降:频繁失败重试会抵消并发优势。
数据库实现:通过SELECT ... FOR UPDATE语句对数据行加排他锁,阻止其他事务修改。
写操作频繁:如金融系统账户交易,需保证数据准确性,防止并发修改导致错误。
冲突可能性高:通过加锁确保数据一致性。
性能问题:频繁加锁解锁降低并发能力。
死锁风险:锁持有时间过长可能导致死锁。
资源占用:长时间占用锁会浪费系统资源。
乐观锁适用场景:读操作远多于写操作,且冲突概率低(如社交网络帖子浏览)。可提高并发性能,减少数据库压力。
悲观锁适用场景:写操作频繁,且冲突概率高(如金融交易)。可保证数据一致性,避免错误。