ajax前端访问miaoshaserver的域名,niginx通过动态的反向代理请求,访问不同的服务器
H5(STATIC)若访问miaoshaserver/resources的域名,nginx会直接从本地磁盘中获得静态资源
4-7:
1. 通过upstream server添加对应的服务器,weight表示权重
反向代理:客户端将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器,获取数据后再返回给客户端。对外暴露的是反向代理服务器地址,隐藏了真实服务器 IP 地址。反向代理“代理”的是目标服务器
将静态资源部署在Nginx上,当一个请求来的时候,如果是静态资源的请求,就直接到nginx配置的静态资源目录下面获取资源,如果是动态资源的请求,nginx利用反向代理的原理,把请求转发给后台应用去处理,从而实现动静分离。
redis:集中式缓存中间件
先存入redis,返回给前端
前端获取token再发送给后端
后端的获取对应的token,根据token从redis里获取对应的用户
第五章:本地热点缓存(JVM的缓存–堆栈信息)
5-4:Redis集中式缓存商品详情页,
利用redis在controller层的时候,之间从redis中获取,减少对数据库的依赖
5-7:开启本地缓存接口:cacheService
本地缓存用的就是tomcat的堆内缓存
利用Guava cache 实现
先去本地缓存(不存在)–再取redist(不存在)-- 最后再去数据库,最后记得反向SET到对应的库中
5-11:nginx 本地缓存 – 语言:nginx lua
1.在nginx openresty-- redis
openresty对redis脚本的编写,(连接上面的redis slave)
==分级理解:==前端访问,先从redis slave读数据,没有 ,就去本地缓存读数据,再没有,就去redis中读数据,再没有才回去数据库中读数据。
1.将库存放入缓存中(这里是在cintroller方法调用下面serverce,使得库存进入缓存)
2.减去对应的Redis库存
课程中通过redis的原子性,先减库存判断剩余数量是否大于0来防止超卖。本项目中只要控制住redis 就不会超卖 redis挂了就不可交易 因此不会超卖
会出现数据库记录不一致的问题
事务型:保证数据库数据提交了,对应的消息必定会发送成功的。数据库事务回滚,消息必定不会发送成功
1.上述首先往消息队列中投递消息,消息被维护在broker 中间件上面 2. 再去执行executelocalTransaction方法
在prepare的状态下会去执行executeLocalTransaction方法
引入库存流水,
订单入库成功之后,
后面需要重写一下executelocalTransaction和check方法
少卖不可超卖
在业务层生成token,并且设置时间为五分钟
在ordercontroller判断前端送来的token是否与redis中一致
问题*
参考1:
参考2:
库存售罄的时候,是通过Redis来读出库存数量,如果大于0,那就将库存扣减掉,然后当为0时,就在redis中打入售罄标识
在ordercontroller中,先判断redis中是否存在售罄表示
通过redis的原子性,先减库存判断剩余数量是否大于0来防止超卖。
因为同一个redis,两个不同的服务,同时执行incre和decre,同一个redis,两个不同的服务,同时执行incre和decre,