JAVA全系列 教程
3762个小节阅读:7089.3k
目录
C语言快速入门
JAVA全系列 教程
面向对象的程序设计语言
Python全系列 教程
Python3.x版本,未来主流的版本
人工智能 教程
顺势而为,AI创新未来
大厂算法 教程
算法,程序员自我提升必经之路
C++ 教程
一门通用计算机编程语言
微服务 教程
目前业界流行的框架组合
web前端全系列 教程
通向WEB技术世界的钥匙
大数据全系列 教程
站在云端操控万千数据
AIGC全能工具班
A A
White Night
高并发:秒杀环境下,流量比平时高出几个数量级,如果不采取任何措施,会给服务器带来很大的压力,可能导致系统崩溃。针对秒杀应用,应使用限流工具,如sentinel,超出的流量使用降级、熔断等保护措施,使系统负载处于极限值以内;
超卖:在高并发下,多个线程并发更新库存,导致库存为负的情况;可以使用以下几种方法防止这种情况发生;
字段设置为:unsigned+无符号整数
把库存字段改为unsigned,这样可以保证库存不为负数,如果并发情况下被扣为负数的时候会报错,这个时候try catch然后返回库存不足就可以了
sql语句上进行判断,是否库存大于0,例如:
xxxxxxxxxx
update test_db set count = case when count >=1 then count-1 else count end
数据库乐观锁----version版本号
在数据表中加一个version字段来表示版本号,修改库存时先获取当前版本号,然后修改时就传入该版本号并且对当前版本号+1,这种相较于第一种就更科学,在性能上更优越,而且对于流量较大的秒杀场景而言容错率更高。
少卖:预扣库存的流程为【请求----redis减库存----创建订单----支付】,若redis库存减了,但下单过程中创建订单失败怎么办?解决办法:失败后就应该让Redis的库存再加上1;