功能完善--购物车

功能完善–购物车

标签(空格分隔): 淘淘商城

—、

存储Cookie的问题

在淘淘商城中,在用户未登录的情况下,用户选中的商品加入购物车之后,商品的数据以及数量都是存储在cookie中的。但是对于不同的浏览器存储cookie的大小是有限制的。如下图所示:
浏览器对Cookie的限制

这样的话当如果用户一直添加购物车的话,这种实现方式肯定是有问题的。既然不能存储的客户端,那就只能存储到服务端了,解决方案如下:
第一:存储到数据库中

  • 由于对cookie的操作存在大量的读和写并发操作,如果放在db中性能有很大的瓶颈。
  • cookie数据是临时数据,当用户清空缓存之后,数据库会存在大量的垃圾数据

第二:存储到文件系统中

  • 操作不方便,其他问题和存储在数据库类似。不推荐

第三:存储到缓存系统中

  • 目前来看,存储在缓存系统是最好的实现方式。但鉴于服务器的内存有限,存储大量的数据会造成内存瓶颈,可以采用集群的模式。
  • 存储方式如下:使用Map存储,生成一个32位的uuid作为key。Map的key使用产品id。value值存储购物车数据,这样修改效率也得到提升,如果使用String数据结构存储,每次修改购物车信息需要做频繁的反序列化操作也会影响性能。

登录后合并缓存中和数据库数据的问题

什么时候合并?购物车系统还是单点系统上做,单点系统知道登录时机,但是不能合并购物车。所以在登录的时候,发送MQ通知到购物车系统中。将cookie数据发送到购物车系统中合并并持久化

购物车数据量大且访问并发大的问题

购物车在最初的设计过程中,仅仅是希望用户对想购买的商品进行收集的操作,但是后期用户将这个功能用成了商品的收藏。这样就对购物车系统的访问量加大,存储购物车的数据也变大,怎么优化这个问题—读和写都造成了很大的压力。分析如下:

  • 登录状态:使用数据库存储购物车数据

    • 数据库的读并发:可以采用MySQL的读写分离操作,一主多从
    • 数据库的写并发:采用读写分离只能解决读并发的压力,不能解决写的并发,写的并发,可以通过缓存解决,这样会引发数据库和缓存之间的数据同步问题。所以这个方案不是最好的。可以采用:分表分库的方式。将数据进行分离。当然这样会引发读数据不一致的问题,可以通过中间件(MyCat)来解决。
      另一方案:队列。例如:12306的延迟下单。滴滴打车排队等待等功能,等待提交,避免高峰对服务器压力的问题。
  • 未登录状态下:使用的是Redis存储购物车数据,由于缓存的特性就是支持高并发,所以只需要解决量的存储问题,可以使用Redis集群。并且对购物车数据设置过期时间,将没有用的数据定时清理

下单后删除购物车数据的问题

由于下单操作在订单系统中完成是在订单系统中完成中的,这就涉及到应用之间系统通讯的问题,需要在系统下单完成之后,发送MQ消息到购物车系统中,购物车系统监听到该消息后,删除订单中的数据.
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值