在高并发情况下,锁机制能够保证数据的正确性。主要有两种机制:悲观锁和乐观锁 以用户购买商品为例: 一个用户购买商品的流程: a. 选择商品 获取库存。看库存的值是否大于要购买的数量。大于购买。 b.确认购买后生成订单信息。库存减少对应的数量。
1.悲观锁:就是A用户在购买商品时,对商品加上锁。其他用户不可以购买,对该商品的访问是阻塞的。 直到A用户购买完成。其他用户才可以购买。悲观锁不适用于高并发的场景下
2.乐观锁:是以版本号为原理的机制。数据一旦被改变,版本号就加一 库存的余量假如是100 版本为v1 A用户购买 获取库存 获取版本号 如果购买成功 写回库存数据时,要首先获取库存的版本 等于自己的话。直接写回。假如大于当前的版本,说明数据被其他人修改了,要获取最新版本的数据。在最新版本的数据基础之上减订单的数量。同时版本加1.
单机单线程 的锁机制 依赖框架比较容易解决 分布式情况下: 存在分布式锁。使用zookeeper 可以解决。利用zookeeper对外提供单一视图。每次进行数据操作时,先获取该资源的锁。 场景:访问量统计、库存统计等