购物车细节

1.怎么实现购物车?
在这里插入图片描述
(1)增加商品
购物车中的存储形式:
在这里插入图片描述
即在redis中的商品的存储方式用的是hash,Map<userId,Map<skuId,cart>>;
存储时用的是hash结构,而不是String或list结构的原因是hash结构可以直接根据key定位,而不需要遍历。如查询购物车商品或要删除某一个商品时,直接根据key,查询或删除,而不是遍历。
在这里插入图片描述
从前端传过来的参数是skuid,和num;
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(2)查询商品

将未登录用户的加购产品存储到localstore中,将已登录用户的加购产品存储到redis中。
写一个购物车类Cart,属性为加入购物车之后要显示的参数,判断如果要加入购物车的产品在购物车不存在,则加入购物车,如果该产品在购物车已存在,则产品数量加1.
2.redis和localstore有什么区别?为什么要将未登录时加购的产品存入localstore,将登录时的加购产品存入redis?
localstore本地存储器Html5 web存储,使用Html5可以在本地存储数据。
以前将未登录时加购的产品存入到cookie中,但是cookie的大小是有限的;其次每次请求都要携带cookie,占用大量带宽。
localstore用于长久保存整个网站的数据,保存的数据没有过期时间,直到手动去除。
登录后的加购数据没有存储到关系型数据库中的原因是关系型数据库对写的效率不是很高,而购物车主要是添加和删除操作比较多,因此要使用非关系型数据库,本项目中登录后的加购商品放入了redis。
3.怎么让用户登录后未登录时加购的产品还在?
首先先判断是否登录,如果已经登录,先查询本地存储器localstore中是否有数据,如果有合并到redis中,再查询,如果没有,直接从redis中查询即可。
4.怎么验证当前用户是否登录?
登录时使用jwtUtils生成一个token,token包含userId,userName,privatekey,token过期时间。将token写入cookie。
当验证是否登录时,只需要验证token是否为空,如果为空则用户未登录,如果不为空(即用户已登录),重新利用jwtUtils生成token(为了改变token过期时间),并返回用户信息。
在这里插入图片描述
在这里插入图片描述
5.购物车优化策略?
使用拦截器获取cookie中的token,解析token后,将用户信息放入ThreadLocal中,当添加或获取购物车中的商品时,直接利用getUser(),从Threadlocal中获取user信息,这样就优化了性能,不用每次加入购物车,或从购物车查询商品都要解析token。

6.怎么解决购物车高并发问题?
(1)使用nosql数据库,而不是sql数据库,sql数据库的写性能比较低,而购物车需要频繁的加购商品,因此nosql数据库可以提高性能。
(2)使用threadLocal进行性能的优化。
(3)部署多个购物车微服务,使用ribbon进行负载均衡。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值