网站建设与维护案例,网站开发证有没有用,网站建设前的功能,电子商务型网站乐观锁与悲观锁 北京这两天天气不好#xff0c;时晴时阴#xff0c;最近有有点累#xff0c;所以在家里休息了两天#xff0c;看了一下乐观锁与悲观锁#xff0c;虽然没有茅塞顿开#xff0c;但是也有点收获。 先想一想为什么要使用锁#xff1f; 在用户访问你的网站时时晴时阴最近有有点累所以在家里休息了两天看了一下乐观锁与悲观锁虽然没有茅塞顿开但是也有点收获。 先想一想为什么要使用锁 在用户访问你的网站时同一时间可能会有多个用户更新相同的记录这时候他们同时访问数据库这就会产生冲突这就是著名的并发高并发。 高并发会产生什么后果呢 丢失更新一个事务的更新覆盖了其他事务的更新这就是所谓的更新丢失。列如管理员A把数据库中的2改成了6管理员B把值从6又改成了2这个时候用户A就丢失了他的更新。 脏读 当一个事务读取其他完成一半事务的记录时就会发生脏读列如管理员AB读取数据库时看到的都是6 用户B把值改为2用户A读取到的值仍是6 . 超卖 如果maysql中没有锁的存在的话他会产生超卖的情况你库存只有十个但是一百个用户同时去访问你的数据库这时候就会产生超卖。可能你就会卖出12件商品。 解决高并发的方法 悲观锁 假设会发生并发冲突屏蔽一切可能违反数据完整性的操作, 认为会多人操作同一条数据,因此操作数据时直接把数据锁住直到一个人操作完成后才会释放锁上锁期间其他人不能修改数据。乐观锁 假设不会发生并发冲突只在操作时检查是否违反数据完整性如果别人修改了数据则放弃操作否则执行操作。而乐观锁不能解决脏读因为他在操作时才会去检查而脏读是在操作中产生的。版本号机制: MySql最经常使用的乐观锁时进行版本控制也就是在数据库表中增加一列记为version当我们将数据读出时将版本号一并读出当数据进行更新时会对这个版本号进行加1当我们提交数据时会判断数据库表中当前的version列值和当时读出的version是否相同若相同说明没有进行更新的操作不然则取消这次的操作总结在实际生产环境里边,如果并发量不大且不允许脏读可以使用悲观锁解决并发问题但如果系统的并发非常大的话,悲观锁定会带来非常大的性能问题,所以我们就要选择乐观锁定的方法.转载于:https://www.cnblogs.com/lowbi/p/11022610.html