php网站开发流程逻辑,大连虚拟主机,系统开发策略主要有,外贸网站翻墙做广告并发安全问题之超卖问题
乐观锁总结#xff1a;
优点#xff1a;不加锁性能好。 缺点#xff1a;同时请求成功率低#xff08;即只要发现数据变了就放弃了#xff09;。 乐观锁思想的具体体现#xff1a;一共两步#xff0c;第一步#xff0c;先查询状态。第二步
优点不加锁性能好。 缺点同时请求成功率低即只要发现数据变了就放弃了。 乐观锁思想的具体体现一共两步第一步先查询状态。第二步再更新数据时必须where等于前面的状态确保数据没有改变。 第二步集查询和操作数据于一身具有原子性。
在有数量限制的业务中即先查询的就是这个数据要想提高成功率可以在第二步中数据不必等于第一步查询的数据而是小于第一步中查询的数据即可这样就可以完美降低失败率只有数量耗尽时才会失败。
**举个例子**比如卖书书有数量限制num_total10以卖出数量为num 第一步查询select * from book where id xxx; if (book.num book.num_total) {可以继续执行第二步} else {拒绝卖书操作} 第二步查询加更新update book set num num 1 where num num_total; 第二步中没有使用标准的乐观锁即数据没有被操作才更新 num #{num} 而是让num num_total只要没有达到库存上限即可操作提高了并发的成功率只要不是numnum_total都可以成功。
典型查询、判断、更新三个操作非原子性 解决方案-加锁即可加锁的思想分为两类悲观锁和乐观锁。
悲观锁是在操作数据之前先获取锁有锁才能操作这样安全了但是性能下降了把并发改为了单线程串行执行。
乐观锁不加锁只会先查询一次然后在操作数据时再查询一次这里的查询与修改是原子性的例如前面第一次查询变量a为1等到操作数据时就要在SQL中update xxx set xxxxxx where a 1这样就让查询和修改操作具有原子性如果数据改变了就异常或者重试。