目录
百战程序员,全站22050+开发课程+文档 ,学习精选优质好课快人一步!观看视频 快捷键ALT+N

JAVA全系列 教程

3762个小节阅读:7089.3k

收藏
全部开发者教程

C语言快速入门

JAVA全系列 教程

面向对象的程序设计语言

Python全系列 教程

Python3.x版本,未来主流的版本

人工智能 教程

顺势而为,AI创新未来

大厂算法 教程

算法,程序员自我提升必经之路

C++ 教程

一门通用计算机编程语言

微服务 教程

目前业界流行的框架组合

web前端全系列 教程

通向WEB技术世界的钥匙

大数据全系列 教程

站在云端操控万千数据

AIGC全能工具班

A

A A

White Night

阅读(382)
赞(0)

22、华为面试必刷---秒杀三问题: 高并发, 少卖, 超卖. 问题描述和解决方法

高并发:秒杀环境下,流量比平时高出几个数量级,如果不采取任何措施,会给服务器带来很大的压力,可能导致系统崩溃。针对秒杀应用,应使用限流工具,如sentinel,超出的流量使用降级、熔断等保护措施,使系统负载处于极限值以内;

超卖:在高并发下,多个线程并发更新库存,导致库存为负的情况;可以使用以下几种方法防止这种情况发生;

  • 字段设置为:unsigned+无符号整数

    把库存字段改为unsigned,这样可以保证库存不为负数,如果并发情况下被扣为负数的时候会报错,这个时候try catch然后返回库存不足就可以了

  • sql语句上进行判断,是否库存大于0,例如:

  • 数据库乐观锁----version版本号

    在数据表中加一个version字段来表示版本号,修改库存时先获取当前版本号,然后修改时就传入该版本号并且对当前版本号+1,这种相较于第一种就更科学,在性能上更优越,而且对于流量较大的秒杀场景而言容错率更高。

少卖:预扣库存的流程为【请求----redis减库存----创建订单----支付】,若redis库存减了,但下单过程中创建订单失败怎么办?解决办法:失败后就应该让Redis的库存再加上1;

 

北京市昌平区回龙观镇南店村综合商业楼2楼226室

©2014-2023 百战卓越(北京)科技有限公司 All Rights Reserved.

京ICP备14032124号-2