我理解是防止超卖的一个场景,由于这块是高并发的场景下,频繁操作数据库,会造成性能问题,这块分两部分处理,一部分是从业务层控制冻结库存,从理财货架选择商品点击申购后,跳到收银台提交支付,在提交支付的动作里面进行剩余份额确认,当前我们是进行缓存查询,查询当前的剩余份额>申购份额时,则把这部分份额进行冻结处理,然后首先保证前端显示的剩余库存已被减掉,防止超卖。等支付成功之后,再把真实份额减掉,如果支付失败则释放冻结的份额。
另外一部分是底层数据库操作扣减库存逻辑,首先采用事务控制,我们通常会采用try, catch(rollback), commit模式在一个事物里面,在真实更新数据库的库存时,要先进行一个update操作得到真实的扣完剩余库存,再判断该值是否大于0,如果小于0则抛异常进行catch回滚,更新库存失败,保证在高并发下不会导致库存为负数。
beginTranse(开启事务) try{ //quantity为请求减掉的库存数量 $dbca->query('update s_store set amount = amount - quantity where postID = 12345'); $result = $dbca->query('select amount from s_store where postID = 12345'); if(result->amount < 0){ throw new Exception('库存不足'); } }catch($e Exception){ rollBack(回滚) } commit(提交事务)
另外,更简洁的方法:
beginTranse(开启事务) try{ //quantity为请求减掉的库存数量 $dbca->query('update s_store set amount = amount - quantity where amount>=quantity and postID = 12345'); }catch($e Exception){ rollBack(回滚) } commit(提交事务)
我们在数据库层也会采用加锁机制(乐观锁,时间戳或者version)去控制并发修改统一记录的情况。
或者通过服务端的内存锁(锁主键)。当某个用户要修改某个id的数据时,把要修改的id存入memcache,若其他用户触发修改此id的数据时,读到memcache有这个id的值时,就阻止那个用户修改
尽量去减少数据库的大并发读写压力,通过缓存或队列方式降低读写操作。
或者针对产品名称+uid为唯一索引,控制并发。
相关推荐
Java高并发秒杀API是一个典型的企业级应用场景,主要用于处理大量用户在同一时间抢购限量商品的情况。在设计这样的系统时,我们需要关注多个关键知识点,包括但不限于数据库操作、并发控制、性能优化以及分布式协调...
Redis是一个内存数据库,读写速度非常快,适合处理高并发场景。我们可以将商品的库存信息存储在Redis中,当用户发起抢购请求时,先在Redis中进行库存检查和扣减,而不是直接访问数据库。 常规的PHP代码在判断库存...
该项目旨在实现一个高性能、高并发的秒杀系统,可以应对大量用户在短时间内抢购限量商品的场景。 技术栈: SpringBoot:作为整个项目的核心框架,简化了开发过程,提高了开发效率。 MyBatis:作为持久层框架,负责...
在高并发场景下,传统的一次性加载所有商品信息的方式会导致数据库压力过大。采用“懒加载”策略,只在用户请求时加载商品详情,可以有效缓解这个问题。此外,可以采用预热机制,提前加载部分热门商品,减少高峰期的...
- 使用分布式锁(如Redis Lock或Zookeeper分布式锁)来保证同一时刻只有一个请求能执行库存扣减操作。 - 高并发下,可采用限流、降级、熔断等策略保护系统,防止雪崩效应。 总结,该秒杀场景涉及到了服务拆分、...
2. 微服务化:为了应对高并发场景,美团点评可能会将秒杀系统拆分为多个微服务,如库存服务、订单服务、支付服务等,每个服务独立扩展,降低耦合度。 二、流量控制 1. 防止超卖:在秒杀开始时,系统需要快速判断...
首先,高并发请求可能会导致两个主要问题:一是数据出错,比如产品超卖,二是频繁操作数据库,从而降低系统性能。在测试环境中,使用Windows7、Apache2.4.9和PHP5.5.12搭建环境,配合Apache Bench工具模拟高并发请求...
尤其是在高并发场景下,对于多个键的操作往往需要具备原子性,即要么全部成功,要么全部失败。本文将探讨在单机Redis集群环境下实现原子操作的两种主要方式:`Watch+Multi`机制和`Lua脚本`。 #### 二、Watch+Multi...
在中国大学生服务外包创新创业大赛中,参赛者可能需要设计并实现这样一个系统,以增强银行产品的销售效率和用户体验。秒杀系统的核心在于能够在短时间内处理大量用户请求,保证交易的公平性和系统的稳定性。 1. **...
开发人员需要深入理解这些概念,以便在设计和实现系统时做出正确的决策,特别是在面对高并发场景时。通过合理利用事务特性、选择合适的隔离级别以及优化锁的使用,可以有效地防止库存超卖和其他数据一致性问题,保证...