共计 245 个字符,预计需要花费 1 分钟才能阅读完成。
1. 业务层面乐观锁 CAS,使用版本号解决 ABA 问题,实际使用中使用时间戳,更新的时候把查出来的时间戳带上,如果更新失败可以自旋,获取最近值和时间戳,直到更新成功。
2.DB 层面开启一个事务,然后 select 一行 for update 给这一行加上排它锁,再去更新行,然后提交,其他事务就会阻塞在 select for update。
3. 分布式锁适合竞争不激烈的情况保证一致性,因为性能比较差,按 CAP 理论来讲应该是保证了 CP 放弃了 A,zk 或者 redis 保证一致性 P,只有拿到锁的线程才能执行,保证一致性 C
正文完
发表至: java
2019-09-09