Contents
  1. 1. 参考资料
  2. 2. 总结
  3. 3. zk实现
  4. 4. redis实现
  5. 5. 数据库实现

参考资料

参考blog 最详细
https://blog.csdn.net/lemon89/article/details/52796775

简书
https://www.jianshu.com/p/d93a4f98067e?utm_campaign=maleskine&utm_content=note&utm_medium=reader_share&utm_source=weixin

总结

悲观锁策略更适合读写特别频繁的业务,因为避免了多个线程无效的争夺锁的操作,而乐观锁策略更适合读多写少的策略,可以充分的利用时间。

zk实现

  1. 临时顺序节点+监听的方式(也是最主要的实现方式)
  2. 利用节点名字不重复的特性,创建某永久节点,来实现获取锁,然后释放锁的时候,删除该节点。类似于redis的悲观锁策略

redis实现

  1. 乐观锁:通过watch一个库存,然后,开启事务count–,再提交事务。实现进程安全。
  2. 悲观锁:通过setnx方法,来实现抢锁,delete实现释放锁,再引入超时机制,即使出现异常线程也能保证业务不停摆

数据库实现

特点:db操作都有一定性能损耗
1.乐观锁的形式:特定一条数据添加版本号,每写一次去check一次版本号;也可以通过唯一性索引的方式,开启事务提交业务代码的同时再出入一个唯一性的锁数据。
2.悲观锁的形式:select * for update的形式锁住一条数据再进行写操作;

Contents
  1. 1. 参考资料
  2. 2. 总结
  3. 3. zk实现
  4. 4. redis实现
  5. 5. 数据库实现