电商系统购物车设计与实现

购物车的设计

离线购物车

用户在没有登录的状态下,可以将商品加入购物车中。
可以查看购物车。
关闭浏览器,再次打开,购物车中的商品存在。
可以删除购物车中的商品,可以选择或者不选择购物车中的商品进行结算。
可以修改购物车中商品的数量。

在线购物车

具备离线购物车的所有功能。
用户登录后,之前离线购物车中的商品能够与在线购物车中的商品进行合并。

将购物车中的商品数据存储在何处?

为了提高系统的并发和吞吐量,首先选择将购物车中的商品数据放在 Redis 中。

  1. Redis 也可以做数据的持久化,并且 Redis 查询性能好于 MySQL 。
  2. 将数据存储在服务器端,利用大数据技术可以对商品进行分析,并且再次进入系统时,可以做商品推荐。
购物车数据结构设计
  1. 购物项
    在这里插入图片描述
    从京东的购物车页面,可以看到,每个购物项,应该设计成如下结构:

    {
        "skuId": 2131241,
        "check": true,
        "title": "Apple iphone.....",
        "defaultImage": "...",
        "price": 4999,
        "count": 1,
        "totalPrice": 4999,
        "skuSaleVO": {...}
    }
    
  2. 购物车的设计

    [
        {},
        {},
        {},
        ...
    ]
    
  3. Redis 中如何存储购物车的数据,如上图,考虑到每个商品的增删改查都比较频繁,因此,存储在Redis中的购物项,考虑使用Redis 的 hash结构。键为 skuId,值为购物项。而每个用户对应一个购物车。而购物车数据在redis中的存储,应该时 用户id作为键,购物车作为值。因此,存储结构应该设计为:Map<String, Map<String, Object>>

临时购物车和在线购物车设计
  1. 临时购物车是用户状态没有登录时的购物车。
    在将商品加入临时购物时,商品后台系统,会生成一个临时的 user-key,并且命令浏览器保存再 cookie中。
    而后端系统,会利用临时生成的 user-key 作为将,将对应的购物车数据作为值。存储在 Redis中。
    再次访问购物车时候,由于 cookie中保存了临时的 user-key,因此可以利用 user-key 从redis中取出购物车中的商品展示。
  2. 在线购物车是用户状态已登录时的购物车。
    将商品加入购物车时,后端服务会利用用户的key作为键,购物车数据作为值,存储在redis中。
    后端服务此时也可以从浏览器中取临时的user-key(如果存在),利用 user-key 取到临时购物车中的数据,与在线购物中的数据进行合并。合并完成后,存储在redis中的临时购物车就可以被删除了。
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值