购物车设计

原创 2015年11月21日 13:49:10

  对于闪购平台的购物车设计来讲,性能是一个设计目标。

  闪购模式流量一般体现在某个时间段开抢的时候,这就意味着在这个峰值时间会有大量操作购物车的操作,并且对一个热点sku会有大量的存取操作。

  因此设计时,可以将购物车数据及对就sku库存放入缓存中。这样可以提升性能,但会存在丢失数据的危险。这就需要有机制当缓存挂掉时,重启时候,用户购物车在缓存中的数据不会没掉。这个缓存可以用redis,主备结构,主结点负责写,读操作操作,从结点作为冷备。当缓存主结点挂掉时或者更严重的是主结点机子磁盘损坏,这样可以从备份结点恢复数据。

  因为sku库存放入缓存中后,与数据库中的sku库存会有一致性问题。具体来讲会有缓存中sku库存大于数据库中sku库存,这时就会发生超卖。而如果缓存中的sku库存小于数据库中sku库存,这时就会发生少卖。

  超卖的情况在小概率情况下,如果不对加库存操作做幂等性,这个就不可避免,即当由于业务中对某个sku加库存dubbo操作重复发送,导致缓存中的库存被多加了n个。这样在之后这多出的n个库存被用户放入购物车,最终下单时,由于实际数据库库存只有m个,因此导致拥有这个n个多出库存的用户操作是失败的。

  而如果对库存操作做幂等操作,意味着库存增加操作dubbo服务提供方需要保证幂等性。一般的做法是服务调用方生成一个唯一流水号,然后将此流水放入redis缓存,并在调用服务提供方时将此流水号带上。然后加库存服务提供方在接收到此流水号时,先尝试从缓存中delete,如果有数据且清除成功且执行加库存操作。

  由此可见对于库存操作做幂等性来讲,会增加两次对于缓存的操作。

  而如果不做幂等的话,就会发生超卖,当然对于这种情况可以选择告诉用户[您手慢了,此商品已被抢光]。

  而之前网易项目使用不做幂等,最终提供用户的方案,解决超卖问题。

  而对于少卖,即缓存中sku库存小于数据库中库存,这一般会发生在并发时,多个用户抢一件商品sku时,导致库存变成负数,而之后回滚库存操作可能失败。这就导致少卖的情况。对于这种情况一种解决方案是每天凌晨2点同步一次缓存库存与数据库库存。

  对于购物车涉及到的业务接口,基本有以下几个:

 1.addToCart(long userId,long skuId,int count); //加入sku到购物车接品

 2.updateAmount(long userId,skuId,int differ,List<long> selectedSkuIds); //将用户购物车中某个sku的数量增加或减去differ值。此方法更新商品后,会根据selectedSkuIds重新计算一遍购物车价格,返回满足条件的优惠券

 3.deleteCart(long userId,long skuId, List<long> selectedSkuIds); //将某个sku从用户购物车移除。此接品,在清除后台会重复计算selectedSkuIds价格,并会返回选中的sku列表与未选中的sku列表集合。及相应优惠券。

4.getCart(long userId,list<Long> selectedSkuIds); //查询用户购物车。此接品会重新计算selectedSkuIds,并返回选中与未选中sku列表集合,返回相应的满足条件的优惠券信息。

5.doSelectCart(long userId, List<Long> selectedSkuIds); //用户在选中或取消购物车中某个sku项时,调用此方法。会重复计算选中列表,并返回计算后选中与未选中列表,及相应符合条件的优惠券信息。

  

  

购物车设计思路

购物车

购物车功能模块设计

一、   需求分析   一:购物车模块功能需求   客户在浏览网页的时候, 当遇到喜欢的商品、 又不急于结账而是继续浏览货 物时。 需要...

一对一对多关系与购物车、订单设计

购物车,用户,商品表这3这之间的关系 将这三者关联起来,数据库该咋设计呢? 我目前想到的方法就是,新建5个表: 用户表商品表购物车表用户商品关系表购物车商品关系表 主要字段就是: 用户表:...

购物车与商城订单的关系以及技术实现深入分析

本站所有文章均为原创,欢迎转载,来源:技术小树懒(www.drw1314.com),作者:锦焕同学 接触商城开发已经有一段时间了,我们从B2C拼团项目做到了C2C视频电商系统。虽然项目都还不算成...

常见b2c网站购物车的设计

对于大部分B2C网站来说,购物车是网站的咽喉之地,订单是白花花的银子,所有银子都必然流经购物车,购物车不能有失。优秀的购物车设计至少需要完成两项使命:一是方便用户多买货多掏银子;二是帮用户保管好待购的...
  • john_bh
  • john_bh
  • 2017年01月06日 10:22
  • 223

用jQuery模仿淘宝开发购物车的思路、遇到的技术问题、源代码--着重讲页面的设计

这几天在做学校的大创项目(开发一个购买桶装水系统),为了使项目给用户提供的页面更人性,在开发购物车这部分运用了jQuery框架框架。从思考如何实现购物车功能到最终人性化地实现也经过了挺长的时间,所以现...
  • c_p_h
  • c_p_h
  • 2017年02月24日 20:35
  • 378

使用JSP做购物车(分析设计)

分析购物车模块:     a)显示所有图书     b)购买图书     c)显示购物车中的图书清单     d)删除某项图书     e)清空购物车     f)继续购物     g)批量购物图书 ...
  • boxyuan
  • boxyuan
  • 2016年12月29日 19:57
  • 251

组合模式设计购物车价格计算实例(仅供学习使用)

  • i_bruce
  • i_bruce
  • 2014年09月21日 13:29
  • 1311

常见b2c网站购物车的设计

核心提示: 对于大部分B2C网站来说,购物车是网站的咽喉之地,订单是白花花的银子,所有银子都必然流经购物车,购物车不能有失。优秀的购物车设计至少需要完成两项使命:一是方便用户多买货多掏银子;二是帮用户...
  • F7ANTY
  • F7ANTY
  • 2012年07月21日 15:56
  • 3040

用session实现购物车(含设计分析及源代码)part3

最后的servlet层的编写: 首先是简单商品展示页(IndexServlet.servlet): package cn.zc.servlet; import java.io.IO...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:购物车设计
举报原因:
原因补充:

(最多只允许输入30个字)