mysql事务解读,共享锁测试结果记录,为何要用redis取代排他锁 相比rabbitmq,redis优势在哪?

未加锁时:

事务之间互不影响,都是在初始值基础上,进行数据修改,产生问题比较严重,取决于先来后到,不会抛异常;

共享锁:

1,不同时间,A先开启,B后开启,A执行10s,B执行15s,A写入之后,B不能写入

2,不同时间,A先开启,B后开启,A执行15s,B执行5s,B先写入,A不能写入

 

结论:

1,跟先后开启事务时间无关,谁先写入提交,数据就是谁的,其他的线程统统都抛错误;

 

排他锁(队列锁):

1,A先开启,B后开启,A执行15s,B执行5s,B仍然等待15s之后,才能执行,中间不会抛出异常,除非链接中断;

 

结论:

排它锁就是队列,严格按照排队时间来处理

 

为何要用redis取代排他锁

排他锁是作用在表层面,如果一个逻辑要修改多个表,我们就要同时锁住一堆表,再此期间,其他用户都不能再访问这几个表了,如果当前排队用户比较多,那么前端接口也被阻塞了,整个系统都不能正常访问,只有等待订单处理完成之后才能访问,这是不合理的,如果使用共享锁,又会导致下单用户失败率增多,因此采用redis解决了以上所有问题

redis锁,可以在线程级别进行阻挡,保证同一时间段内,只有一个线程在执行,类似于排队,保证了不锁表的情况下,前端用户正常访问,又使得下单用户正常排队,不会造成大量用户下单请求报错,相比数据库层面处理,redis处理的更完美

相比rabbitmq,redis优势在哪?

rabbitmq适用场景和redis还是有点小区别的,rabbitmq往往用来处理一些耗时但又必需排队的任务,又或者处理一些要一次性开多线程处理任务的场景,例如说发短信;相比rabbitmq,redis更轻量级一些;

此外rabbitmq的进程和下单进程是不在同一个主进程中,因此rabbitmq在传统的php-fpm中,是无法给前端返回实时结果的,除非使用hyperf这种自带服务的框架,并且借助websocket,或者用ajax的方式来轮询结果,而这无疑加重了开发者的负担。所以一般来说轻量级秒杀大家不用rabbitmq

而为何大流量情况下又要采用rabbitmq了呢?因为rabbitmq自带限流能力,满了之后,就开始拒绝了,这样保证服务器不至于被无限的请求阻塞到崩溃

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

森叶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值