开源商城源码_java b2b2c多用户开源商城系统商品模块扣减库存源码分享

需求分析

在分享源码之前,先将b2b2c系统中商品模块需求整理、明确,方便源码的理解。

业务需求

  • b2b2c电子商务系统中商品的库存存放在redis和数据库中,实现发货退货等操作库存的扣减或增加

技术需求

  • redis事务问题,若扣减库存完成后,发生异常,则redis没有事务,无法实现数据回滚,导致数据异常
  • 采用lua脚本扣减库存方式,原子性提交操作,lua脚本中实现扣减失败则回滚操作
  • 数据库中的库存信息,非实时更新,而是采用缓冲池方式,缓冲池方式可以自主选择是否开启

架构思路

商品库存领域模型架构

eb9df2bd11eb28a89a61a38c27d34819.png

基于lua+redis的库存扣减

GoodsQuantityVO

/** * 商品库存vo * @author fk * @version v6.4 * @since v6.4 * 2017年9月7日 上午11:23:16 */public class GoodsQuantityVO implements Cloneable{    private Integer goodsId;    private Integer skuId;    private Integer quantity;    private  QuantityType quantityType;    public GoodsQuantityVO() {}    public GoodsQuantityVO(Integer goodsId, Integer skuId, Integer quantity ) {        super();        this.goodsId = goodsId;        this.skuId = skuId;        this.quantity = quantity;    }    setter and getter}

GoodsQuantityManager

/** * 商品库存接口 * @author fk * @version v2.0 * @since v7.0.0 * 2018年3月23日 上午11:47:29 * * @version 3.0 * 统一为一个接口(更新接口)
* 内部实现为redis +lua 保证原子性 -- by kingapex 2019-01-17 */public interface GoodsQuantityManager { /** * 库存更新接口 * @param goodsQuantityList 要更新的库存vo List * @return 如果更新成功返回真,否则返回假 */ Boolean updateSkuQuantity(List goodsQuantityList ); /** * 同步数据库数据 */ void syncDataBase(); /** * 为某个sku 填充库存cache
* 库存数量由数据库中获取
* 一般用于缓存被击穿的情况 * @param skuId * @return 可用库存和实际库存 */ Map fillCacheFromDB(int skuId);}

GoodsQuantityManagerImpl

库存业务类基于lua+redis的实现:

/** * 商品库存接口 * * @author fk * @author kingapex * @version v2.0 written by kingapex  2019年2月27日 * 采用lua脚本执行redis中的库存扣减
* 数据库的更新采用非时时同步
* 而是建立了一个缓冲池,当达到一定条件时再同步数据库
* 这样条件有:缓冲区大小,缓冲次数,缓冲时间
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值