记录一次简单的秒杀场景

简介: 记录一次简单的秒杀场景

背景 商品秒杀

  • 条件: 限定用户在活动期间只能参加一次, 不能超卖
  • 环境: springBoot

处理方法

service方法上加了事务和锁

加锁是因为,并发下多个线程同时进行操作有可能导致超卖

service

public void doKill(){
    if(! condition) {
      return;
    }
    try{
      Lock.lock(); // 这个锁可能是个全局的锁
      if(! condition) {
        return;
      }
      doSomeThing(); // thows BusinessException
    }finally {
      Lock.unock();
    }
}
@Transectional
public void doSomeThing(){
}

注意:

假如在事务的service调用另外一个事务方法, 那么事务是不会生效的

可以在serviceImpl 里面再注入自己

注意假如doKill方法上加事务,可能会出现问题, 因为锁释放了事务还没提交

所以一定要保证事务结束后才释放锁

目录
相关文章
|
6月前
|
NoSQL Redis
Redis系列学习文章分享---第五篇(Redis实战篇--优惠券秒杀,全局唯一id 添加优惠券 实现秒杀下单 库存超卖问题分析 乐观锁解决超卖 实现一人一单功能 集群下的线程并发安全问题)
Redis系列学习文章分享---第五篇(Redis实战篇--优惠券秒杀,全局唯一id 添加优惠券 实现秒杀下单 库存超卖问题分析 乐观锁解决超卖 实现一人一单功能 集群下的线程并发安全问题)
130 0
|
7月前
|
安全 NoSQL Java
10万条记录生成兑换码的实战方案
【5月更文挑战第27天】项目实战,介绍一次生成10万条记录兑换码的功能,由于公司需要生成大批量的兑换码,单次生成的兑换码超过10条记录。本文用于介绍相关设计方案:
303 2
|
7月前
|
消息中间件 存储 NoSQL
面试题解析:如何解决分布式秒杀系统中的库存超卖问题?
面试题解析:如何解决分布式秒杀系统中的库存超卖问题?
384 0
|
SQL 缓存 NoSQL
商品秒杀情况下使用商品id做Redis缓存
商品秒杀情况下使用商品id做Redis缓存
80 0
|
数据库
.商品秒杀-超卖
.商品秒杀-超卖问题
90 0
|
消息中间件 缓存 NoSQL
redis缓存一致性问题 & 秒杀场景下的实战分析
本篇文章讲述了在高并发场景下 redis缓存一致性问题 & 秒杀场景下的实战分析, 数据库缓存不一致解决方案, 缓存与数据库双写一致以及秒杀场景下缓存一致性问题的实战解决方案
603 0
|
缓存 监控 NoSQL
秒杀系统
秒杀能够以极小的经费撬动巨大的流量,虽然会带来一定的口碑损失,但因为极具性价比,所以经常被运营同学使用。本文介绍如何设计一款能够支撑60W QPS的秒杀系统,希望能够帮助到大家。
|
消息中间件 RocketMQ 开发者
更新优惠卷|学习笔记
快速学习更新优惠卷
110 0
更新优惠卷|学习笔记
|
存储 缓存 NoSQL
Redis 如何实现库存扣减操作?如何防止商品被超卖?
基于数据库单库存 基于数据库多库存 基于redis 基于redis实现扣减库存的具体实现 初始化库存回调函数(IStockCallback) 扣减库存服务(StockService)。
935 0
Redis 如何实现库存扣减操作?如何防止商品被超卖?
|
存储 缓存 NoSQL
京东一面:Redis 如何实现库存扣减操作?如何防止商品被超卖?
京东一面:Redis 如何实现库存扣减操作?如何防止商品被超卖?
521 0
京东一面:Redis 如何实现库存扣减操作?如何防止商品被超卖?