购物车业务简介
购物车模块要能过存储顾客所选的的商品,记录下所选商品,还要能随时更新,当用户决定购买时,用户可以选择决定购买的商品进入结算页面。
功能要求:
- 利用缓存提高性能。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图片、选择状态。
- 未登录状态也可以存入购物车,一旦用户登录要进行合并操作。
未登录和已登录 怎么区分????
使用userId进行区分,如果用户没登录,前端页面会给生成一个临时用户id userTempeId,前端采用随机数生成,生成完 存在了用户浏览器cookie中,通过网关全局过滤器获取cookie中的临时用户id。
登录后的购物车数据: key是真实用户id
{2:[{21:“商品信息”},{22: cartInfo },{23: cartInfo},………]}
未登录购物车:key是临时用户id,是随机数。
{hsjfhskf123238:[{21:“商品信息”},{22: cartInfo },{23: cartInfo},………]}
已经实现的功能:
- 添加购物车
要区分用户是否登录,如果登录 就添加登录购物车,使用真实用户id。如果没登录,添加未登录购物车,使用临时用户id。
- 展示购物车列表
触发合并
- 如果用户未登录,直接返回未登录购物车数据
- 如果用户已登录,判断有没有未登录购物车,如果没有,直接返回已登录购物车数据。
- 用户登录了,还有未登录购物车,触发购物车合并了。
合并的时候,判断用户有没有已登录的购物车,如果有,已登录购物车和未登录购物车中是否有相同的商品,如果有相同商品,数量相加。不同的商品,直接把未登录购物车的商品改成已登录购物车的。
- 选中购物车中商品数据
在购物车列表展示的时候,商品信息前面有个方框,可以打钩,勾选了就是选中,去掉勾选,就是没选中。
选中的作用是 后期去结算的时候,只结算购物车中选中的商品。
面试官问你,你们项目的微服务怎么拆分的????
根据业务功能拆分,不同的功能模块 是不同的微服务。
- 删除购物车功能
根据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、常见面试问题
- cookie被禁了能添加吗?
未登录:不能了,没有临时用户id了。
已登录:都不能登录了。
- 未登录购物车有过期时间吗?已登录后有吗?
未登录购物车一定要有,已登录购物车可以没有。
未登录购物车使用的是临时用户id,这个临时用户id,用户可能会重新生成。一旦重新生成了临时用户id,未登录购物车里就会有垃圾数据了。
未登录购物车,过期时间可以指定,7天 15天 30天 都可以。
- 购物车能添加多少个不同的商品?
99个, 200个。
统计redis hash结构中的 有多少skuid就行了。
购物车上限控制,要做上限控制,如果不做,可能会有人不断的添加购物车,直到把你redis服务器内存干满。
- 每个商品最多能加多少件?
京东 是 200个。真快乐商城 是 99个
这个可以实现,前端就可以做一个校验,当添加数量超过200个,就给提示,+号按钮禁用。
- PC(电脑)和客户端(手机APP)购物车数据一样吗?
未登录:不一样
已登录:是一样的。
- 未登录情况下 A用户在A电脑 添加3个商品 然后 B用户用A电脑又添加2个商品
问 登录B用户的账号 购物车合并的数据是哪个用户的?
考的是业务的分析梳理能力:
2个用户使用的是同一个电脑,没问题,要看使用的是不是同一个浏览器!
还要看 B用户在哪个浏览器登录的!!!!
- 添加购物车减库存吗?
不减库存
- 进入购物车列表的时候 验库存吗?验价格吗?
需要验,防止之前添加的商品 价格有变化或者库存无货。
- 购物车里的商品价格变换了有提示吗?库存无货了有提示吗?
简历
责任描述:
负责购物车功能模块开发,具体包括添加、合并、删除购物车等功能。
技术描述:
使用Redis。。。