zoukankan      html  css  js  c++  java
  • 秒杀系统分析

    一、秒杀核心业务分析

    应用:商品抢购、优惠券的领取

    技术难点:

    • 短时高并发、负载压力大
    • 读多写少
    • 竞争资源有限,不能多买,不能少买,不能重买

    重要点:修改库存

    二、关于锁的那些事:


    1、悲观锁:在数据处理过程中,将数据处于锁定状态【依靠数据库提供的锁机制】
    使用场景:写多读少,保证数据安全

    2、乐观锁:在数据提交更新是,才会正式对数据的冲突与否进行检测。如果发现冲突,让用户决定如何去做或者程序自动重试。
    使用场景:读多写少,提高系统吞吐量
    乐观锁只是在更新表的那一刻锁表,其他时间不锁表,所以相对于悲观锁,吞吐量更高。

    三、秒杀核心服务实战:

    1、基于mysql通过版本号实现
    update t_goods_info
    set amount = amount - #{buys} , version = version+1
    where code = #{code} and version = #{version}

    缺点:需要加version字段

    2、基于mysql通过状态实现
    update t_goods_info
    set amount = amount - #{buys}
    where code = #{code} and amount - #{buys} >=0


    3、使用缓存:
    基于redis实现:利用watch指令在redis事务中提供CAS的能力

    基于memcached的cas机制实现:
    读取数据-〉比较版本 -〉更新数据

    • 通过gets命令获取数据库版本号
    • 检查库存是否大于购买数量
    • 使用cas更新商品库存(带版本号),如果更新失败,当前线程休眠重试,并错峰执行,避免请求同一时间并发。

    数据库乐观锁实现的优点:简单高效、稳定可靠,缺点:并发能力低,数据库并发瓶颈值300-700

    四、秒杀系统架构设计

  • 相关阅读:
    Object有哪些公用方法?(转)
    equals和==的区别(转)
    switch语句中case的标签
    (常见面试问题)九种基本数据类型的大小,以及他们的封装类
    English
    plot
    文件读写
    标准化
    独热编码
    一阶逻辑
  • 原文地址:https://www.cnblogs.com/wjh123/p/11530720.html
Copyright © 2011-2022 走看看