当前位置: 首页 > news >正文

诚信网站认证必需做吗html教程 pdf

诚信网站认证必需做吗,html教程 pdf,临清网站推广,公司网站更换域名流程什么是超卖问题? 想象一个场景: 黑马点评搞秒杀活动,某商品库存 100 件。活动开始后,15 个用户同时下单,最后系统显示卖出了 101 件,库存变成了 - 1 —— 这就是超卖。超卖本质:多线程环境下&am…

什么是超卖问题?

想象一个场景:
黑马点评搞秒杀活动,某商品库存 100 件。活动开始后,15 个用户同时下单,最后系统显示卖出了 101 件,库存变成了 - 1 —— 这就是超卖。
在这里插入图片描述
超卖本质多线程环境下,库存扣减操作未正确同步,导致 实际销量 > 库存量的严重业务错误。针对这一问题常见解决方案就是加锁

为什么会超卖?
用代码模拟一下问题:

// 错误的扣减库存方式
public boolean seckill(Long voucherId) {// 1. 查询库存SeckillVoucher voucher = seckillVoucherService.getById(voucherId);int stock = voucher.getStock();// 2. 判断库存是否充足if (stock > 0) {// 3. 扣减库存(stock=stock-1)voucher.setStock(stock - 1);seckillVoucherService.updateById(voucher);}
}

问题出在 “查询→判断→扣减” 这三步不是原子操作:

  • 线程 1 查询到库存 = 1,还没扣减;
  • 线程 2 也查询到库存 = 1,也进入扣减逻辑;
  • 最后库存变成 - 1,超卖了。

解决方案

解决方案对比:悲观锁 vs 乐观锁

方案实现原理适用场景性能影响实现复杂度
悲观锁“先锁定再操作”(如synchronized高冲突场景,数据强一致性要求高较高(串行执行)
乐观锁“先操作再验证”(版本号/条件判断)低冲突场景,读多写少低(并行执行)
分布式锁Redis/ZooKeeper,全局锁控制分布式系统,高并发秒杀中(网络开销)

悲观锁实战

public synchronized boolean seckill(Long voucherId)  {// 同上:查询→判断→扣减
}

优点:简单,绝对不会超卖。
缺点:并发高时,大家都在等锁,响应慢,像排队结账排成长龙。

乐观锁实战:黑马点评解决方案

核心代码实现

public boolean seckill(Long voucherId) {// 1. 查询优惠券库存SeckillVoucher voucher = seckillVoucherService.getById(voucherId);// 2. 判断秒杀是否开始/结束if (voucher.getBeginTime().isAfter(LocalDateTime.now())) {throw new RuntimeException("秒杀尚未开始!");}if (voucher.getEndTime().isBefore(LocalDateTime.now())) {throw new RuntimeException("秒杀已结束!");}// 3. 库存不足直接返回if (voucher.getStock() < 1) {return false;}// 4. 乐观锁扣减库存boolean success = seckillVoucherService.update().setSql("stock = stock - 1")  // SET stock = stock - 1.eq("voucher_id", voucherId)  // WHERE voucher_id = #{voucherId}.gt("stock", 0)               // AND stock > 0.update();return success;
}

方案优势

  • 无锁竞争:避免线程阻塞,提高并发能力
  • 轻量级:数据库级别实现,无需额外组件
  • 简单有效:SQL条件天然保证库存安全

潜在问题:高并发下的低成功率
当100线程同时抢10个商品时:

  • 乐观锁成功率 ≈ 10%
  • 90%请求失败需重试或放弃

进阶方案:Redis分布式锁

实现原理
在这里插入图片描述
核心代码:

public boolean seckillWithRedisLock(Long voucherId) {// 1. 获取分布式锁String lockKey = "lock:voucher:" + voucherId;String clientId = UUID.randomUUID().toString();try {// 尝试获取锁(设置10秒超时)Boolean locked = redisTemplate.opsForValue().setIfAbsent(lockKey, clientId, 10, TimeUnit.SECONDS);if (!Boolean.TRUE.equals(locked)) {return false; // 获取锁失败}// 2. 执行库存扣减return doSeckill(voucherId);} finally {// 3. 释放锁(Lua脚本保证原子性)String script = "if redis.call('get', KEYS[1]) == ARGV[1] " +"then return redis.call('del', KEYS[1]) " +"else return 0 end";redisTemplate.execute(new DefaultRedisScript<>(script, Long.class),Collections.singletonList(lockKey),clientId);}
}

性能优化:库存预减方案

架构设计
在这里插入图片描述

实现步骤
1. 预热库存到Redis:

redisTemplate.opsForValue().set("stock:voucher:"+voucherId, 100);

2. 预减库存:

Long stock = redisTemplate.opsForValue().decrement("stock:voucher:"+voucherId);
if (stock < 0) {// 库存不足,回滚redisTemplate.opsForValue().increment("stock:voucher:"+voucherId);return false;
}

3. 异步落库:

@Async
public void asyncUpdateStock(Long voucherId) {seckillVoucherService.update().setSql("stock = stock - 1").eq("voucher_id", voucherId).update();
}

方案选型指南

场景推荐方案QPS支持注意事项
低并发(<1000QPS)乐观锁1k-5k控制重试次数
中并发(5k-10kQPS)Redis分布式锁5k-10k设置锁超时
高并发(>10kQPS)库存预减+异步10k+保证最终一致性
超高并发Redis+Lua脚本50k+监控Redis负载

最佳实践总结
1. 多层防护:

  • 前端:按钮防重、验证码
  • 网关:请求限流
  • 服务:库存预减
  • 数据库:最终一致性
    2. 监控指标:
// 监控关键指标
meterRegistry.counter("seckill.requests").increment();
meterRegistry.counter("seckill.success").increment();
meterRegistry.counter("seckill.failures").increment();

3. 回退机制:

// 库存回补
if (updateFailed) {redisTemplate.opsForValue().increment("stock:voucher:"+voucherId);
}

超卖问题本质是并发控制的艺术,选择合适方案需平衡性能、一致性和复杂度。建议从乐观锁起步,随业务增长逐步升级到分布式方案!

http://www.dtcms.com/a/459109.html

相关文章:

  • 建设房地产公司网站的费用湛江哪家公司建网站最好
  • 合肥专业做网站wordpress上传视频人50
  • 网站的元素有哪些如何优化好一个网站
  • 上海建设房屋网站永久免费国外vps无需信用卡
  • wordpress 双语站点腾讯企业邮箱登录入口免费
  • 智能化网站建设淄博网站制作平台形象
  • 聚财的公司名字大全企业seo关键字优化
  • PKMS核心分析(一)
  • 手机网站和app的区别淄博网站制作优化推广
  • 制作网站的登录界面怎么做保定专业做网站公司
  • 徐州免费网站建设模板网络公司业务
  • 广东seo网站设计价格前端网页设计样例
  • 什么是网站栏目标题网站校园推广案例
  • 引用网站信息怎么做备注北京网址是什么
  • 欧美网站欣赏WordPress谁在用
  • 在线制作图网站网站关键词优化seo
  • 网站建设销售好做嘛揭阳建设局网站
  • 成交型网站培训网站平台怎样做
  • 做电商网站货源郑州哪里有做平台网站的
  • 网站规划内容杭州做网站哪家好
  • 无锡建设主管部门网站wordpress 图片显示不了
  • 做海报挣钱的网站怎么使用电脑是做网站
  • 购物网站建设情况汇报四级作文模板万能
  • 秸秆还田下土壤有机质的激发效应
  • 个人做电子商务网站.net网站吃内存
  • 盐城那里做网站好点能做wordpress的网站
  • C# 泛型(Generic)
  • 从winlogon!SignalManagerWaitForSignal来看神秘的状态机的状态数组结构
  • 海门建设局网站能查个人信息的网站
  • 西安企业网站建设公司创办个人网站