电商项目之如何扣减库存

news2024/11/25 6:50:57

在这里插入图片描述

文章目录

  • 1 问题背景
  • 2 前言
  • 3 扣减库存的三种方案
    • 3.1 下单减库存
    • 3.2 付款减库存
    • 3.3 预扣库存
  • 4 如何解决恶意买家下单的问题
    • 4.1 限制用户下单的数量
    • 4.2 标识恶意买家
  • 5 实战:具体实现思路

1 问题背景

今天研究一下亿级流量的电商网站是怎么扣减库存
参考自:浅析「扣减库存」的方案设计

2 前言

本文旨在阐述生产环境如何在高并发的场景下可靠地扣减库存,有其他解决方案的伙伴可以在评论中分享出来。

3 扣减库存的三种方案

常规的支付链路是下单->创建订单->支付

3.1 下单减库存

用户下单时减库存

优点:实时扣减库存,避免支付时因库存不足减库存的问题
缺点:恶意买家大量下单,但不付款,导致真正想买的人买不到

3.2 付款减库存

下单时不会立即减库存,而是等到支付时才会减库存

优点:防止恶意买家大量下用光库存,避免下单扣库存的缺点
缺点:下单页面不是最新的库存,假如支付的订单数超过库存数,则支付失败

3.3 预扣库存

下单后预扣库存,超过一定时间后,库存释放。若超过时间后再支付,如果没有库存,则支付失败

优点:实时减库存,缓解恶意买家大量下单的问题,超过一定时间未支付则释放库存
缺点:在一定时间内,恶意买家大量下单仍可以将库存用完。

4 如何解决恶意买家下单的问题

在库存方面有恶意买家下单占用库存的问题,也会有恶意买家下单后拒付的问题,这种拒付会提高卖家收款账号被风控的概率。因此无论是在库存方面还是在支付方面,都需要解决恶意买家下单的问题

4.1 限制用户下单的数量

优点:限制恶意买家下单
缺点:非恶意买家会被限制下单,销量会降低

4.2 标识恶意买家

通过历史订单的情况、买家设备指纹(user_agent等),来标识恶意买家。缺点是可能存在误标。

5 实战:具体实现思路

  • 商品的库存用Redis的hash结构存起来,通过incrby指令加减库存;
  • 扣减库存时,采用预扣库存的思路,先扣减Redis中的库存,剩余库存的数量大于0,表明预扣成功,否则回滚库存(Redis要回滚库存,然后抛异常,不持久化数据库库存);
  • 如果Redis预扣库存成功,则持久化库存到数据库,否则抛异常。更新数据库的库存时,直接使用update语句update t_sku_inventory set inventory = inventory + quantity where id = xxx;

流程图如下图所示:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1071136.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ml-dms-dataset实验

https://github.com/apple/ml-dms-dataset 数据集的两个问题: 部分图片失效images 和 labels不匹配 evaluation运行结果 论文中的结果: inference结果:

iPhone升级iOS17出现无法连接互联网的错误提示怎么办?

最新的iOS 17系统已经发布了快一个月了,很多人都已升级体验更多全新功能,但有部分用户却在升级过程中遇到一些问题:如无法验证更新,iOS17验证失败,因为您不再连接到互联网、 iPhone无法检查更新等错误问题。明明网络稳…

Java——String类的常见操作

Java String类的常见方法 package com.yushifu.javaAPI;import java.lang.reflect.Array; import java.util.Arrays; //String类的常见操作 public class Demo02 {public static void main(String[] args) {String s new String("ababbadc");//indexOf方法————…

RK3568驱动指南|第五期-中断-第48章 并发管理工作队列实验

瑞芯微RK3568芯片是一款定位中高端的通用型SOC,采用22nm制程工艺,搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码,支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU,可用于轻量级人工…

iPhone15系类LDR6020P 超简外围手机转接器/拓展坞方案

目前市面上的手机大部分已经取消3.5音频耳机接口,仅仅保留了Type-c口。但是追求音质和零延迟的用户仍然会选择3.5mm有线耳机,因为在玩手机游戏的时候,音画不同步真的很影响游戏体验,所以Type-C转3.5mm接口线应运而生。 #iPhone15…

mysql批量插入数据,跳过唯一索引报错

数据准备 DROP TABLE IF EXISTS user1; CREATE TABLE user1 ( id INT NOT NULL AUTO_INCREMENT, name VARCHAR(45) NULL, age INT(3) NOT NULL, PRIMARY KEY (id), UNIQUE INDEX u_name (name));insert into user1(name, age) values (zhangshan, 18), (lisi, 19);1. INSERT I…

【Python】WebUI自动化—Selenium的下载和安装、基本用法、项目实战(16)

文章目录 一.介绍二.下载安装selenium三.安装浏览器驱动四.QuickStart—自动访问百度五.Selenium基本用法1.定位节点1.1.单个元素定位1.2.多个元素定位 2.控制浏览器2.1.设置浏览器窗口大小、位置2.2.浏览器前进、刷新、后退、关闭 3.WebDriver常用方法4.Selenium事件处理4.1.鼠…

史上最全,Jmeter+Ant+Jenkins接口自动化集成(图文步骤)

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 1、安装 jdk、Jme…

水电站生态流量监测解决方案(dtu数据采集和分析)

1. 引言 水电站是重要的清洁能源发电设施,但其建设和运营也对当地生态环境带来一定的影响。为了科学合理地评估水电站的生态流量,监测和记录河流中的流量数据变得至关重要。通过采集和分析这些数据,可以做出合理的决策和调整,以最…

华为云新开源低代码引擎 TinyEngine核心亮点

核心亮点 • 可以定制开发低码平台。 TinyEngine 采用灵活的系统架构,其出色的整体架构提供了高度的自定义自由度,使用户能够像搭建积木一样选择不同的模块来构建自己的专属设计器。此外,插件化的架构使得用户可以方便地扩展与业务相关的功能。在 TinyEngine 中,插件根据…

外贸SEO应该怎样做?

这几年做外贸SEO的越来越多,背后原因很复杂,不去探讨了。今天就自己SEO服务客户情况所见,聊一点外贸网站SEO该怎么做的感想。 我所遇到的英文外贸网站,大部分是卖产品的,产品各种各样,从单一软件或产品小网…

基于边缘网关的智慧工地监测方案

边缘物联网技术为千行百业赋能,依托边缘计算的低延时、高效率、广适用优势,也为工程建设产业带来新的增长动力。 例如在智慧工地应用中,围绕建设施工过程中的人员、设备、环境等要素,利用边缘计算网关构建全面的数据采集、分析、联…

【UE5 Cesium】15-Cesium for Unreal 加载本地影像和地形

目录 一、加载全球无高度地形 二、加载区域DEM 三、加载离线地图影像 一、加载全球无高度地形 1. 先去如下网址下载全球无高度地形:Using a global terrain layer without height detail - #9 by RidhwanAziz - Cesium for Unreal - Cesium Community 下载后如下…

核桃派walnutpi添加红外遥控器键盘映射(其他的linux板子同理)ir-keytable

01studio终于又发布新品了,全志h616 linux开发板核桃派,正好我也打算学习linux,做为我的启蒙公司,必须支持果断入了一个。 这个板子自带红外接收头,比较少见,一般都需要自己加,看官网文档&…

Git指导:提交干净的commit信息

为什么我们应该关心编写干净的提交消息? 提交是程序员技术的有形构建块。它们充当代码的锦上添花,如果编写正确,它们会带来巨大的价值。编写良好的提交消息变得不可或缺,因为它们提供了上下文——否则一开始就不需要提交消息。 良…

windows 远程连接 ubuntu桌面xrdp

更新 sudo apt update安装组件 sudo apt-get install xorg sudo apt-get install xserver-xorg-core sudo apt-get install xorgxrdp sudo apt install xfce4 xfce4-goodies xorg dbus-x11 x11-xserver-utilsxrdp sudo apt install xrdp sudo systemctl status xrdp sudo …

证件照快速抠图更换背景 - Python OpenCV图像分割

需要更换证件照的背景,大多软件App直接收费或者需要支付后才可去水除印,本文公开不收费,欢迎使用,代码可在IDE如PyCharm或者Linux上直接运行,程序会自动安装依赖库OpenCV,如果觉得不错随手点个赞哦 &#x…

美客多平台运营策略揭秘,卖家如何实现安全稳定的测评!

要在美客多平台上取得成功,卖家需要具备一定的运营策略。本文将为大家分享一些关键的运营策略,帮助卖家在美客多平台上实现可持续发展。 一:优化商品页面,提升转化率 在美客多平台上,商品页面是吸引用户注意力的关键。…

c++中的map和set

文章目录 1. 关联式容器2. 键值对3. 树形结构的关联式容器3.1 set3.1.1 set的介绍3.1.2 set的使用 3.2 map3.2.1 map的介绍3.2.2 map的使用 3.3 multiset3.3.1 multiset的介绍3.3.2 multiset的使用 3.4 multimap3.4.1 multimap的介绍3.4.2 multimap的使用 1. 关联式容器 在初阶…

pycharm配置远程服务器

1.首先在服务器的一个位置创建一个文件夹 作为我们的工作文件夹,这里就命名为hhr。 2.配置我们的解释器 (实验室服务器python环境都配好了,我们只需要找到就可以了),这里可以连上Xhell之后输入python打开python解释器…