尚品汇总结六:购物车模块(面试专用)

购物车业务简介

购物车模块要能过存储顾客所选的的商品,记录下所选商品,还要能随时更新,当用户决定购买时,用户可以选择决定购买的商品进入结算页面。

     功能要求:

  1. 利用缓存提高性能。Redis

购物车数据存在redis中,使用的是redis的hash类型存储,hash类型比较满足这个购物车的业务需求.

Hash存储形式:

      {key:[{field:value},{ field:value },{ field:value },………..]}

 {userId:[{skuId:cartInfo},{skuId: cartInfo },{skuId: cartInfo},………]}

CartInfo对象:

 Id,用户id,skuId,cartPrice(加入购物车时价格),数量、实时价格、sku名称、sku图片、选择状态。

  1. 未登录状态也可以存入购物车,一旦用户登录要进行合并操作。 

未登录和已登录 怎么区分????

使用userId进行区分,如果用户没登录,前端页面会给生成一个临时用户id   userTempeId,前端采用随机数生成,生成完 存在了用户浏览器cookie中,通过网关全局过滤器获取cookie中的临时用户id。

登录后的购物车数据: key是真实用户id

{2:[{21:“商品信息”},{22: cartInfo },{23: cartInfo},………]}

未登录购物车:key是临时用户id,是随机数。

{hsjfhskf123238:[{21:“商品信息”},{22: cartInfo },{23: cartInfo},………]}

已经实现的功能:

  1. 添加购物车

要区分用户是否登录,如果登录 就添加登录购物车,使用真实用户id。如果没登录,添加未登录购物车,使用临时用户id。

  1. 展示购物车列表

触发合并

  1. 如果用户未登录,直接返回未登录购物车数据
  2. 如果用户已登录,判断有没有未登录购物车,如果没有,直接返回已登录购物车数据。
  3. 用户登录了,还有未登录购物车,触发购物车合并了。

合并的时候,判断用户有没有已登录的购物车,如果有,已登录购物车和未登录购物车中是否有相同的商品,如果有相同商品,数量相加。不同的商品,直接把未登录购物车的商品改成已登录购物车的。

  1. 选中购物车中商品数据

在购物车列表展示的时候,商品信息前面有个方框,可以打钩,勾选了就是选中,去掉勾选,就是没选中。

选中的作用是 后期去结算的时候,只结算购物车中选中的商品。

面试官问你,你们项目的微服务怎么拆分的????

  根据业务功能拆分,不同的功能模块 是不同的微服务。

  1. 删除购物车功能

根据skuid去操作redis中的hash的field删除。

                     5)获取到选中的购物车,这个功能是给结算页用的。因为结算页需要获取到购物车中所有选中的商品,进行下单。

购物车使用redis进行存储,数据丢失问题?

      Redis是基于内存的,重启或者挂了,内存的数据容易丢失。

Redis给提供了 持久化机制,RDB和AOF。RDB是默认开启的,容易丢失一些数据。丢失的是 这次持久化和上次持久化直接的数据。AOF 默认不开启,需要手动开启,持久化策略,有每秒钟持久化一次的,还一种是没个写(修改)操作 都会进行一次持久化。

两种都可以一起用

添加购物车业务流程

合并购物车业务流程

购物车扩展

1、业务话术(可以自己总结)写下来  自己的理解

我们项目对于购物车的设计主要分为两个部分:未登录和已登录两种状态。在添加购物车时需要进行判断用户是否登录,如果未登录,则将购物车的信息放在redis中,采用hash结构存储,key为uuid(用户的临时id)随机生成,field为skuId,value是商品购物项信息,同时在数据库进行持久化操作,将reids的Key(临时用户id)存放到cookie中。用户已登录状态下,cookie中会存放token,根据token我们能获取到用户的id,所以采用userId作为hash结构的key,field为skuId,value是商品购物项信息,后面就添加购物车、合并购物车…………………。

2、常见面试问题

  1. cookie被禁了能添加吗?

未登录:不能了,没有临时用户id了。

已登录:都不能登录了。

  1. 未登录购物车有过期时间吗?已登录后有吗?

未登录购物车一定要有,已登录购物车可以没有。

未登录购物车使用的是临时用户id,这个临时用户id,用户可能会重新生成。一旦重新生成了临时用户id,未登录购物车里就会有垃圾数据了。

未登录购物车,过期时间可以指定,7  15  30 都可以。

  1. 购物车能添加多少个不同的商品?

99个, 200个。

统计redis hash结构中的 有多少skuid就行了。

购物车上限控制,要做上限控制,如果不做,可能会有人不断的添加购物车,直到把redis服务器内存干满

  1. 每个商品最多能加多少件?

京东 是 200个。真快乐商城 是 99个

这个可以实现,前端就可以做一个校验,当添加数量超过200个,就给提示,+号按钮禁用。

  1. PC(电脑)和客户端(手机APP)购物车数据一样吗?

未登录:不一样

已登录:是一样的。

  1. 未登录情况下  A用户在A电脑 添加3个商品  然后 B用户用A电脑又添加2个商品

问 登录B用户的账号  购物车合并的数据是哪个用户的?

考的是业务的分析梳理能力:

2个用户使用的是同一个电脑,没问题,要看使用的是不是同一个浏览器!

还要看 B用户在哪个浏览器登录的!!!!

  1. 添加购物车减库存吗?

不减库存

  1. 进入购物车列表的时候 验库存吗?验价格吗?

需要验,防止之前添加的商品 价格有变化或者库存无货。

  1. 购物车里的商品价格变换了有提示吗?库存无货了有提示吗?

简历

责任描述:

负责购物车功能模块开发,具体包括添加、合并、删除购物车等功能。

技术描述:

使用Redis。。。

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值