zoukankan      html  css  js  c++  java
  • 防止库存超卖方法总结

    1、简单处理【update & select 合并】(乐观锁)

    2、使用redis队列

    实现的方式是用的redis的list队列,框架为laravel

    核心部分为list的pop操作,此操作为原子性,即使很多用户同时到达,也是依次执行

    2.mysql 当mysql单表的数据量大于1000万行时,建议进行水平分拆。

    利用redis的incr、decr的原子性做操作
    redis的lpush、rpop的原子性做操作,但是这个只能一个一个的扣,但不能原子地同时扣多个
    sql乐观锁

     

    二、扣减库存
    安全扣减库存方案有很多说法,列一下几个方案和我推荐的方案。

    方案一:分布式锁
    有的文章会用redis分布式锁来做保证扣库存数量准确的环节,让点击结算时,后端逻辑会查询库存和扣库存的update语句同时只有一条线程能够执行,以商品id为分布式锁的key,锁一个商品。但是这样,其他购买相同商品的用户将会进行等待。

    优点:这样做虽然安全
    缺点:但是失去的是性能问题。
    方案二:分布式锁+分段缓存
    也有文章会说借鉴ConcurrenthashMap,分段锁的机制,把100个商品,分在3个段上,key为分段名字,value为库存数量。用户下单时对用户id进行%3计算,看落在哪个redis的key上,就去取哪个。

    小蚊子大人
  • 相关阅读:
    java内联函数
    jvm垃圾回收
    jvm内存管理
    java进程和线程的区别
    jvm
    简单易学的SSM(Spring+SpringMVC+MyBatis)整合
    Spring之声明式事务
    SpringMVC知识点小结
    Servlet之文件的上传与下载
    java使用字节流和字符流实现文件复制
  • 原文地址:https://www.cnblogs.com/ywsheng/p/15005911.html
Copyright © 2011-2022 走看看