gulimall
文章平均质量分 73
谷粒商城笔记
qianye_97
这个作者很懒,什么都没留下…
展开
-
[gulimall] 秒杀
秒杀流程1. 合法性校验秒杀时间校验:当前时间是否在秒杀时间范围内接口幂等性校验:验证这个人是否已经买过了,去redis里使用setnx命令占位,过期时间=秒杀截止时间-当前时间2. 获取信号量信号量为秒杀的商品数使用信号量的tryacquire方法实现分布式锁3. 秒杀成功发送订单信息到MQ,异步下单直接返回秒杀成功结果,节省用户等待时间4. 限流措施前端限流,一些高并发的网站直接在前端页面开始限流,例如:小米的验证码设计nginx限流,直接负载部分请求到错误的静态页原创 2021-12-25 16:09:35 · 1114 阅读 · 0 评论 -
[gulimall]订单及库存
1. 提交订单查询商品信息,查询收货地址查询库存信息计算价格2. 下订单1. 验证令牌防止重复提交获取当前用户登录的信息通过lua脚本验证令牌和删除令牌2. 验证价格从数据库查询最新的商品价格和订单的金额对比,如果不一致则返回错误信息3… 验证库存并锁库存先判断仓库是否有足够的库存保存库存工作单详情信息(哪个商品需要修改多少库存),用于追溯(解锁库存等)锁定库存,并将工作单信息发送给MQ如果锁定失败,工作单信息都回滚。已经发送出去的消息,即使要解锁库存,由于在数据原创 2021-12-24 16:37:17 · 2378 阅读 · 0 评论 -
[gulimall] 购物车及threadlocal
1. 购物车功能分析user-key是游客id,不管有没有登录都会有这个cookie信息。所以用户信息:@Datapublic class UserInfoTo { //已登录用户的id private Long userId; //游客id private String userKey; //是否临时用户 private Boolean tempUser = false;}使用redis存储购物车Redis里面,我们的购物车结构是一个双层Map:M原创 2021-12-23 17:08:09 · 1115 阅读 · 0 评论 -
[gulimall] 异步编排
1 商品详情页逻辑查询商品详情页的逻辑非常复杂,数据的获取都需要远程调用,必然需要花费更多的时间。假如商品详情页的每个查询,需要如下标注的时间才能完成// 1. 获取sku的基本信息 0.5s// 2. 获取sku的图片信息 0.5s// 3. 获取sku的促销信息 TODO 1s// 4. 获取spu的所有销售属性 1s// 5. 获取规格参数组及组下的规格参数 TODO 1.5s// 6. spu详情 TODO 1s.........那么,用户需要6.5s后才能看到商品原创 2021-12-23 11:07:32 · 539 阅读 · 0 评论 -
[gulimall] cookie写入问题
问题起源场景1: 在微服务场景下,用户登录是通过认证服务来完成的,登录成功会将sessionId存在cookie中,但是当登录成功跳转到首页时并不能获取到session信息,原因就是首页在另外一个服务中,此时cookie出现了跨域问题获取不到。场景2: feign远程调用时,也会丢失cookie,因为feign自己构造了一个新的请求,这个请求里面没有任何请求头。在异步编排时,feign还会丢失上下文信息,因为老请求的信息存在threadlocal里,开启多线程时,就获取不到老请求的信息了cookie写原创 2021-12-22 22:50:23 · 501 阅读 · 0 评论 -
[gulimall] 用户登录与注册相关
1. 注册基本逻辑1)数据格式校验,以及用户名是否已存在2)核对验证码3)MD5加盐对密码加密4)写入数据库,返回登录页1.1 数据格式校验通过注解可以给前端传递过来的值进行校验,例如@NotEmpty, @Length等。但是这个注解必须配合 @Valid 使用,完成对参数的校验。而校验的结果,也会自动封装到 BindingResult 类型中,通过这个参数可以很方便的对错误的参数进行处理。hasErrors() 可以判断是否有参数校验错误,如果有,可以通过 getFieldsErr原创 2021-12-22 20:35:29 · 548 阅读 · 0 评论