电商实战:秒杀场景方案2 :基于hint实现库存热点扣减

目录

回顾

示意图

hint 关键字


回顾

之前提到的第一种方案

是在 redis 里先抗

然后通过 rocketmq 削峰填谷 把消息一个一个推到 mysql

但我们也可以基于InventoryHint 对库存进行扣减

示意图

电商实战:秒杀场景方案2 :基于hint实现库存热点扣减_第1张图片

在写 sql 语句的时候我们使用 hint 关键字

例如

hint 关键字



    UPDATE /*+ COMMIT_ON_SUCCESS ROLLBACK_ON_FAIL TARGET_AFFECT_ROW 1 */ collection
    SET saleable_inventory = saleable_inventory - #{quantity}, lock_version = lock_version + 1
    WHERE id = #{id} and = #{quantity}]]>




    UPDATE /*+ COMMIT_ON_SUCCESS ROLLBACK_ON_FAIL TARGET_AFFECT_ROW 1 */ collection
    SET saleable_inventory = saleable_inventory + #{quantity}, lock_version = lock_version + 1
    WHERE id = #{id} and 




    UPDATE /*+ COMMIT_ON_SUCCESS ROLLBACK_ON_FAIL TARGET_AFFECT_ROW 1 */ collection
    SET occupied_inventory = occupied_inventory + #{quantity}, lock_version = lock_version + 1
    WHERE id = #{id} and 

告诉 mysql 内核这可能是热点更新数据

然后对操作进行分组

大概意思就是 mysql 会讲一段时间内的 update 操作分成一个组 按照主键或者是唯一键

可能达成的效果有

  1. 减少行锁的申请等待
  2. 减少 b+数的索引遍历
  3. 减少事务的提交

你可能感兴趣的:(#,SpringBoot,web后端开发,#,高并发秒杀电商平台,android,蓝桥杯,前端,职场和发展,bootstrap,html)