购物车的一些思路

问题一:你们的购物车是怎么做的(用户未登录的时候购物车数据存放到哪里了,登录时又存放到哪里了)Redis里

session不能用,session是有生命周期的,浏览器一关就没有了cookie容量太小了(4kb),没办法存放太多的数据,解决方案,添加多了提示购物车已满mysql和redis性能比较差

往Redis里放是key-value形式key可以是sessionId或者UUID,存放到浏览器的cookie里了需要下次打开浏览器,key是一致的。下次还需要拿这个key访问的拿着cookie里的user-key当子Redis里面的key,把字符串存放到cookie下次在打开是从cookie里获得user-key,之后把user-key的值获取后当成redis里的key

key:sessionId或者UUID value:商品数据 :List cartList;

未登录时:把购物车数据都放到Redis中,把sessionID或者UUID作为Redis的key,为了能在下次访问时使用同样的key系需要把key放在Redis中登录时:把购物车数据放在Redis中,把userID做为key

购物车对象类(Cart)包括:String SellerName/商家名称 ,String SellerId/商家ID ,ListorderItemList/要买的商品

未登录时:
1、查询购物车:findCardList(通过key:sessionId或者UUID)
2、添加购物车:addGoodsToCartList?itemId=XX&num=XX创建一个添加购物车的方法,方法需要两个参数(1、商品id,2、商品数量)

当你把商品加入购物车的时候,
1、首先判断当前的商品对应的商家有没有购物车对象(商家)
2、如果存在购物车对象,需要判断我即将添加的商品有没有对应的商家,有没有购物车对象
3、如果有,商品是否重复,重复就把数量加一
4、如果没有或者不重复,新建商品对象

把商品加入购物车,老的购物车会发生改变,向已有的购物车里加入数据
1、查询之前的购物车数据
2、向购物车中追加数据
3、把新的购物车数据放到Redis中

细节一:当商品数量小于1时,商品从orderItemList中移除,判断此桑吉是否有商品,如果orderItemList的长度等于0 ,表示商家没有商品,把商家对应的cart(购物车)对象从cartList中移除
细节二: 判断,若果商品数量num小于1(创建orderItem时),抛出异常数量非法。如果id不存在,抛出异常商品不存在(添加商品到购物车时)

登录时:用userId作为Redis的key(例如:从springSecurity安全框架家中获取UserId)未登录时获取的id一定是‘anonymousUser’,登录时候获取的userId是用户名XX。

在addGoodsToCartList方法中判断,如果未登录时,保存到Redis中的key是cookie中的value(UUID)。如果登录了,保存到Redis中的key是获取到的userId
理解版本一:
1、在findCardList判断,同一个浏览器。
2、未登录时保存到购物车的商品,在登录后,和原有购物车里面的商品进行合并
3、合并后清空清空(UUId作为Redis的key)的购物车(未登录状态的购物车)
4、保存合并后的购物车到Redis(userId作为Redis的key)
理解版本二:查询未登录时的购物车数据
1、判断是否登录否:直接返回购物车数据是:根据userId查询购物车数据
2、判断登录时是否有购物车数据否:直接返回根据userId查询到的购物车数据是:合并购物车(登录和未登录时)
3、清空未登录时查询到的购物车数据
4、把合并后的购物车数据放到redis中(userId作为key)

和并购物车的方法:
1、需要判断UUID购物车和userId购物车里的商家和商品是否重复,建议调用添加购物车的逻辑
2、遍历UUID购物车,获得购物车数据,

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值