项目心得体会

  1. 原子性:一组操作要么都执行成功,要么都执行失败,不会出现部分成功,部分失败的情况,而且这一组操作之间不能插入别人的操作。
  2. 在使用Redis时,如果遇到非原子性操作,比如:购买商品的业务中,会先给用户生成一个确认订单(也就是待完善信息的订单,还需要用户填写比如地址、电话等信息提交后才会生成整个订单),此确认订单在生成时被分配了一个唯一id,并存入Redis,当用户填完个人信息后生成订单时需要判断“重复生成订单”,判断前端传过来的订单id在Redis中是否存在,若存在则删除后正常进行,不存在则说明重复提交订单了,不在生成订单,业务结束。在这个过程中,判断是否存在删除此订单id是两个操作,是非原子性的,可能判断存在后,还没来得及删除,又来了个重复请求,然后也判断id存在,等于两个请求都判断订单id在Redis中存在,从而重复生成订单导致错误。这时就需要将“判断是否存在”和“删除此订单id”编写在一个Lua脚本里,Lua脚本被Redis当做一个命令来执行,由于Redis是单线程先来后到执行的,所以Lua脚本里的两个操作之间不会被加入第三个操作,从而保证了原子性。(也可以用分布式锁,Redisson提供的分布式锁底层源码里也是用的Lua脚本)
  3. Redis使用Lua脚本的原因是:Lua脚本可将多条Redis命令一块发给Redis来执行,由于Redis单线程执行命令的原因,Lua里的命令会被一起执行完后才会处理其他的请求,保证了“原子性”,同时也体现了自定义命令、批处理的特点
  4. 实际项目中一般Nginx配合SpringCloud Gateway使用,Nginx用来对后端服务器进行反向代理,前端请求发送至Nginx,由Nginx转发请求到后端的网关服务,以此解决跨域。后端网关通过url里/api/后的服务名进行负载均衡到某个服务的某个具体实例上。
  5. 前端发送请求到Nginx时会在请求头传一个Host,Nginx在指定端口号监听到请求后通过此Host的值取和server块的server_name进行匹配,匹配到就处理,所以server_name不是随便起的。
  6. 。。。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值