玖叶教程网

前端编程开发入门

秒杀技术选型分析(秒杀用到的技术)

控制库存的选定的五个技术方案

  • mysql乐观锁
  • mysql悲观锁
  • redis的原子操作incr
  • redis的watch(redis乐观锁)
  • redis执行lua脚本

测试结果(8核16G,300个线程并发,每次消耗一个库存,时间单位ms)

方案对比

推荐使用redis+LUA的方式实现。

  1. mysql乐观锁,在高并发的情况下会导致大量的无效请求,同时对mysql数据库的性能造成影响,导致系统吞吐的急剧下降。
  2. mysql悲观锁,在高并发下虽然执行的总体耗时不会太长,但是会导致用户长时间等待,并且不释放数据库的连接,导致其他业务拿不到数据库连接。
  3. redis的watch跟mysql的乐观锁有同样的问题,会导致大量无效的请求,进而导致正常请求无法完成。
  4. redis的原子操作,incr在压测看起来是效果最好的。但是因为是先减库存然后不过库存不足的时候再回滚当前操作,所以会造成库存抖动,用户体验会不太好。incr和lua的实现原理大致是相同的,会比lua快是因为它只执行单一的incr操作,判断在client端,并且client端是多线程去执行的,但是redis是单线程执行。
  5. redis+LUA,这个是最理想的状态。

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言