赞
踩
如前端页面使用的是Thymeleaf这类模板引擎,可以直接在服务器渲染,然后把整个html页面当作string返回放入redis中进行缓存,把高并发的页面进行缓存(如秒杀商品列表,秒杀的商品信息),像这种页面的话缓存的时间不能设置太长,否则数据库修改后不能及时展示。
把需要用到的对象放到redis中进行缓存,如秒杀用户,秒杀的商品信息。
把静态页面放到静态资源里面,前端使用ajax来请求需要的数据。
多次访问页面的时候页面返回的状态会变为304,不在是200,并且会向服务端传入下图的参数,服务端收到这个参数后会检查这个接口的返回数据是否有发生改变,如果没有的话就会给客户端返回304,表示浏览器可以直接使用缓存的数据。
这个请求的方式还是会向服务端发生请求,如果不需要向服务器请求直接使用的话可以参考springboot的官方文档
https://docs.spring.io/spring-boot/docs/2.1.13.BUILD-SNAPSHOT/reference/htmlsingle/
#static
spring.resources.add-mappings=true
spring.resources.cache-period= 3600
spring.resources.chain.cache=true
spring.resources.chain.enabled=true
spring.resources.chain.gzipped=true
spring.resources.chain.html-application-cache=true
spring.resources.static-locations=classpath:/static/
1.系统初始化,把商品库存数量加载到Redis
2.收到请求,Redis预减库存,库存不足,直接返回,否则进入3
3.请求入队,立即返回排队中
4.请求出队,生成订单,减少库存
5.客户端轮询,是否秒杀成功
在项目中引入消息队列如RabbitMq,kafka等,在秒杀过程中分为两部分,消息入队前的操作和消息入队后的操作,入队前需要使用到的数据都从redis中取,入队后消费才正常的对数据库进行减库存,生成订单等操作。
项目初始化
消费端消费信息
前端页面处理
还可以使用nginx进行负载均衡配置
思路:秒杀开始之前,先去请求接口获取秒杀地址
可以使用拦截器或者aop来实现减少对业务代码的侵入
使用注解的方式来设置时间,最大访问次数等
在需要控制的接口上面使用注解,获取接口路径的时候把用户、商品id、路径作为key,并设置初始次数。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。