【Go语言实战】 (13) 商品秒杀的本质以及Golang实现解决方案

本文介绍了使用Go语言解决商品秒杀场景中的高并发问题,从单机模式到分布式模式的各种解决方案。通过加锁、数据库事务、乐观锁、悲观锁、Redis分布式锁、ETCD分布式锁、Redis List队列、Redis原子递减等方式,避免数据竞争和超卖现象。同时提到了流量削峰、Nginx负载均衡、读写分离等优化措施。
摘要由CSDN通过智能技术生成

写在前面

这是一篇关于Go语言实现商城秒杀的解决方案。
其实商城的秒杀就是高并发问题,那高并发下我们主要解决的就是数据竞争问题

源码:https://github.com/CocaineCong/Go-SecKill

当两个或多个协程同时访问同一个内存地址,并且至少有一个是在写时,就会发生数据竞争。比如A线程修改完之后,线程B读的是线程A之前的值(初始值),所以不知道A是否修改,所以会导致线程B也把自己修改的值放到这个内存地址中,就会导致本次修改无意义。

在这里插入图片描述
常用的方法就是加锁了,当这个进程已经执行了,就为该进程进行加锁,防止其他进程对这个数据进行修改,所以这个数据进行修改之后,再释放这个锁。

关于加锁,我们有两种锁机制,悲观锁乐观锁

  • 悲观锁,就是什么时候都保持悲观状态,认为任何地点都会发生这种情况<
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小生凡一

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

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

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

打赏作者

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

抵扣说明:

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

余额充值