开源项目miaosha学习(二)

上一章程序走到了商品列表的位置,
补充两点,一是debug的时候最好把缓存关闭,不然可能会因为页面缓存有意想不到的惊喜 ????
关闭方法:Chrome浏览器F12 NetWork Disable Cache
开源项目miaosha学习(二)

二是在程序启动的时候,其实会将商品与秒杀有关的信息传入redis中,后续会用redis中的库存进行限流
开源项目miaosha学习(二)
在goods_list.html中可以看到通过点击"详情"会进入goods_detail.htm页面
开源项目miaosha学习(二)
这里注意下不是html是htm页面哈,在static包里,一开始找错了,注意下
开源项目miaosha学习(二)
我们翻到页面最下面可以看到一个自启动函数会实现getDetail()方法
开源项目miaosha学习(二)
开源项目miaosha学习(二)
可以明显看到这里会有一个ajax请求会去访问/goods/to_detail
开源项目miaosha学习(二)
这里方法其实没什么好说的,就是把商品信息传入罢了,比较重要的是上面的注解@UserCheckAndLimit,这是作者提供的注解,会在AccessInterceptor拦截器中用到
开源项目miaosha学习(二)
大致意思就是通过redis实现一个对某一个用户的某一个确定请求的一段时间的限流,通过key值为request.url+user.nicknamel来实现,value是对应的请求次数
这里其实会有并发问题,例如:maxCount=1,已经访问0次,两个线程同时拿到count,redis中的值会为2,不过这只是为了防无线刷新页面所设置的基础限流,不在乎用户是否真的多访问一两次,所以影响不大

访问结束后页面会渲染,并触发countDown函数
开源项目miaosha学习(二)
countDown函数主要是判断是否开始秒杀,可以的话会进入下面的函数
开源项目miaosha学习(二)
这里会ajax访问miaosha/path方法
开源项目miaosha学习(二)
开源项目miaosha学习(二)
getMiaoShaPath函数的任务是核实验证码是否正确,然后创建秒杀路径

程序会为被验证的验证码图片在redis中存储对应的正确数字,然后进行比较即可
开源项目miaosha学习(二)
开源项目miaosha学习(二)
秒杀路径会存在redis中key为用户名和商品ID的组合,val为新创建的uuid的md5
在html页面中我们可以看到之后会访问/{path}/confirm,也是项目的重点
开源项目miaosha学习(二)