java 订单减库存_下单减库存
1. 减库存
一般下单减库存的流程大概是这样的:
1、查询商品库存。这里直接查的Redis中的库存。
2、Redis中的库存减1。这里用到的Redis命令是:incrby -1
3、扣减数据库中的库存。这里用数据库乐观锁,不用额外加锁
4、异步刷新Redis中的库存
5、定时扫描超时未支付的交易,库存加回去
总结一下这个流程就是:先减redis库存,再减数据库库存,最后刷新redis库存
用到的Redis命令可能:DECR key 或者 INCRBY key -1
更新数据库的SQL可能是这样的:
update 商品库存表 set 库存 = 库存 - 1 where 商品ID = xxx and 库存 > 0;
或者
update 商品库存表 set 库存 = 库存 - 1 where 商品ID = xxx and version = xxx;
用乐观锁是一种比较好的方式,而且一遍ID字段都有索引,可以充分利用MySQL行级锁
这种方式还有一个比较巧妙的地方是,利用redis的单线程来操作库存,而且又是原子命令,可以避免并发问题
同时,先减redis库存后可以防止后续因库存不足而造成下单失败
最后,数据库更新完以后,再通过MQ异步刷新缓存,可以使得redis中的库存误差不会太大
交易系统会定时扫描超时未支付的订单,然后用MQ异步通知订单和商品中心,将订单关闭,库存再放回去
2. 加锁
加锁(比如:基于Redis的分布式锁)
MQ可以把并行转成串行,但是并不能很好的解决并发访问的问题,只能靠锁
加锁会影响性能,但是影响不大。假设我们用Redisson分布式锁,操作redis只需要几毫秒,因此这点儿损耗不是什么大问题。都是这么玩儿的,不加锁还能怎么办呢。
3. 内存缓存
在cms管理后台修改数据后,同步或异步刷新redis缓存,同时利用zookeeper刷新内存缓存,这样就可以不用等到需要用的时候再从redis中同步。
一定要避免redis大key,最常见的就是hash key,设置的时候不注意,一不小心里面就几千个field了,这对查询非常不利,可以取模进行分片。
一定要避免HGETALL命令,利用Pinpoint可以帮助我们分析每个请求在每个操作所消耗的时候,从而有助于我们优化
数据迁移用Canal
java 订单减库存_下单减库存相关推荐
- java 订单减库存_下单减库存(示例代码)
1. 减库存 一般下单减库存的流程大概是这样的: 1.查询商品库存.这里直接查的Redis中的库存. 2.Redis中的库存减1.这里用到的Redis命令是:incrby -1 3.扣减数据库中的库存 ...
- java 高并发商城库存订单处理,下单减库存,如何解决高并发减库存问题
下单减库存,如何解决高并发减库存问题 1. 减库存 一般下单减库存的流程大概是这样的: 1.查询商品库存.这里直接查的Redis中的库存. 2.Redis中的库存减1.这里用到的Redis命令是:in ...
- 【电商经验】之商品下单减库存方案
一.下单减库存方案 在电商项目中设计商品下单减库存时有两种典型的方案: 下单后减库存 付款后减库存 这两种减库存方案都有各自的优缺点,没有说哪种是最好的,主要看业务场景适合哪种. 1.下单后减库存 用 ...
- 电商扣减库存_电商库存体系设计
库存是什么? 百度百科:库存(inventory)是以支持生产,维护,操作和客户服务为目的而存储的各种物料,包括原材料和在制品,维修件和生产消耗品,成品和备件等: 狭义:"仓库里存放东西&q ...
- java订单实现的_订单的处理原理及代码实现.
上一篇博文我们已经介绍了购物车的原理及实现, 那么购物车再往后就是提交订单了, 订单的实现方式是怎么样的呢? 那么下面就让我们来一起学习下. 提交订单有几个关键点: 1, 用户必须登录 2, 购物车必 ...
- 分布式锁和mysql事物扣库存_浅谈库存扣减和锁
先说场景: 物品W现在库存剩余1个, 用户P1,P2同时购买.则只有1人能购买成功.(前提是不允许超卖) 秒杀也是类似的情况, 只有1件商品,N个用户同时抢购,只有1人能抢到.. 这里不谈秒杀设计, ...
- java日期减天数_使用Java中的Calendar.DATE从当前日期减去天数
为Java中的Calendar类导入以下软件包.import java.util.Calendar; 首先,创建一个Calendar对象并显示当前日期.Calendar calendar = Cale ...
- 分布式锁和mysql事物扣库存_这个是真的厉害,高并发场景下的订单和库存处理方案,讲的很详细了!...
前言 之前一直有小伙伴私信我问我高并发场景下的订单和库存处理方案,我最近也是因为加班的原因比较忙,就一直没来得及回复.今天好不容易闲了下来想了想不如写篇文章把这些都列出来的,让大家都能学习到,说一千道 ...
- 电商扣减库存_二类电商:鲁班今日最新消息!
了解更多,点击上方蓝字关注我吧 [小店'美妆个护'行业禁限售商品需求收集] 小店平台目前针对部分品类做了较为严格的禁限售要求,存在部分优质商品在站外销量火爆但在抖音无法售卖的情况.如您有这部分的投放需 ...
最新文章
- 《计算机组成与体系结构:性能设计》读后小记 11、指令集:寻址方式和指令格式...
- SAMBA服务和FTP服务讲解(week3_day1)--技术流ken
- jsp servlet中的过滤器Filter配置总结(转)
- RTX5 | 线程管理03 - 线程退出osThreadExit
- 程序员自救指南:一不小心删库删表怎么办?
- C/C++中的关键字
- c++switch语句中不能进行变量定义吗_Go 指南--控制流语句
- mac中 安装mysql无法启动_Mac 下安装MySQL(dmg方式),无法启动
- 查询iphone邮箱服务器,iPhone上的各种邮箱设置
- Colab+Google使用教程
- HTML表格表格标签的属性
- mysql值为空返回0 ,否则 返回1
- 电脑组装好了开机完全没反应?
- Canvas 从 0 到 1 -- 开发 2D 游戏《保卫家园》-- 【上篇】
- Shell发送邮件+附件
- php图片无损压缩的问题解决(推荐)
- 自考学历和成考学历哪个更高一些 有啥区别
- JavaScript 数字格式化怎么写(#,##.00) (实用,赞)
- exfat fat_正确的名称是exFAT还是FAT64?
- 9.7-一定要开始学了