`
hochiang
  • 浏览: 20134 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

高并发库存控制

 
阅读更多
1、在秒杀的情况下,肯定不能如此高频率的去读写数据库,会严重造成性能问题的
必须使用缓存,将需要秒杀的商品放入缓存中,并使用锁来处理其并发情况。当接到用户秒杀提交订单的情况下,先将商品数量递减(加锁/解锁)后再进行其他方面的处理,处理失败在将数据递增1(加锁/解锁),否则表示交易成功。
当商品数量递减到0时,表示商品秒杀完毕,拒绝其他用户的请求。

2、这个肯定不能直接操作数据库的,会挂的。直接读库写库对数据库压力太大,要用缓存。
把你要卖出的商品比如10个商品放到缓存中;然后在memcache里设置一个计数器来记录请求数,这个请求书你可以以你要秒杀卖出的商品数为基数,比如你想卖出10个商品,只允许100个请求进来。那当计数器达到100的时候,后面进来的就显示秒杀结束,这样可以减轻你的服务器的压力。然后根据这100个请求,先付款的先得后付款的提示商品以秒杀完。

3、首先,多用户并发修改同一条记录时,肯定是后提交的用户将覆盖掉前者提交的结果了。
这个直接可以使用加锁机制去解决,乐观锁或者悲观锁。
乐观锁,就是在数据库设计一个版本号的字段,每次修改都使其+1,这样在提交时比对提交前的版本号就知道是不是并发提交了,但是有个缺点就是只能是应用中控制,如果有跨应用修改同一条数据乐观锁就没办法了,这个时候可以考虑悲观锁。
悲观锁,就是直接在数据库层面将数据锁死,类似于oralce中使用select xxxxx from xxxx where xx=xx for update,这样其他线程将无法提交数据。
除了加锁的方式也可以使用接收锁定的方式,思路是在数据库中设计一个状态标识位,用户在对数据进行修改前,将状态标识位标识为正在编辑的状态,这样其他用户要编辑此条记录时系统将发现有其他用户正在编辑,则拒绝其编辑的请求,类似于你在操作系统中某文件正在执行,然后你要修改该文件时,系统会提醒你该文件不可编辑或删除。


4、不建议在数据库层面加锁,建议通过服务端的内存锁(锁主键)。当某个用户要修改某个id的数据时,把要修改的id存入memcache,若其他用户触发修改此id的数据时,读到memcache有这个id的值时,就阻止那个用户修改。



5、实际应用中,并不是让mysql去直面大并发读写,会借助“外力”,比如缓存、利用主从库实现读写分离、分表、使用队列写入等方法来降低并发读写。


当有多台服务器时,可以采用分流的形式实现
假设有m张票, 有n台产品服务器接收请求,有x个请求路由服务器随机转发
直接给每台产品服务器分配 m/n张票
每台产品服务器内存做计数器,比如允许m/n*(1+0.1)个人进来。
当内存计数器已满:
后面进的人, 直接跳到到转到活动结束的静态页面

应用中使用分布式缓存来存储当前时间段的奖品余额,有用户中奖则将此缓存中的余额减一,不需要查询和实时更新数据库,而是每隔自定义的一段时间将缓存中的余额异步更新至数据库中。
      优点:这种方式完全依赖于缓存,读写速度快,不需要实时更新数据库,降低了数据库相当大的压力;
      缺点:缓存不是100%稳定,很容易丢,即使采用持久化的缓存,在高并发下有时也会出问题;一旦丢失数据,这样
               就导致数据库记录的奖品余额比实际真实存在的奖品余额要多,这个时候读数据库,就会导致奖品多发,也就
               是所谓的超卖!
分享到:
评论

相关推荐

    开涛高可用高并发-亿级流量核心技术

    1.1 高并发原则 3 1.1.1 无状态 3 1.1.2 拆分 3 1.1.3 服务化 4 1.1.4 消息队列 4 1.1.5 数据异构 6 1.1.6 缓存银弹 7 1.1.7 并发化 9 1.2 高可用原则 10 1.2.1 降级 10 1.2.2 限流 11 1.2.3 切流量 12 1.2.4 可回滚...

    简单实现Java高并发之秒杀系统

    秒杀系统是一种针对高并发场景下的抢购活动设计的系统,旨在克服大量用户同时访问和购买同一商品的挑战。以下是秒杀系统的概念描述: 1. **限流与并发控制**:秒杀系统需要通过限制每秒钟的请求数量或者设置并发...

    php处理抢购类功能的高并发请求

    介绍如何在高并发状况下确保数据正确。 在高并发请求下容易参数两个问题 1.数据出错,导致产品超卖。 2.频繁操作数据库,导致性能下降。 测试环境 Windows7 apache2.4.9 php5.5.12 php框架 yii2.0 工具 ...

    queueSwoole:基于swoole的微型框架,适合于高并发场景下的抢购/秒杀业务场景

    基于swoole实现排队抢购系统,适用于高并发场景 对性能要求极高,qps至少同配置php-fpm一倍以上 ##难点 库存控制 排队公平性 稳定性 ##设计文档 ##启动 chmod u+x server.sh ./server.sh start|stop ##压测 ##感谢

    SpringBoot项目基于Spring Boot的库存管理系统.zip

    SpringBoot项目基于Spring Boot的库存管理系统是一个为企业设计的库存控制和优化平台。它利用Spring Boot的快速开发特性,结合了商品入库、出库管理、库存监控、需求预测、报表生成以及供应商管理等功能,旨在帮助...

    redis令牌机制实现秒杀系统

    间有限的情况下导致的一个高并发以及高并发所带来的库存超卖的问题。 秒杀需要解决的问题: 1) 库存超卖 解决方案: 1) 悲观锁:synchronize 、 Lock 2) 乐观锁:数据库乐观锁版本号控制 2) 高并发情况下系统压力...

    高性能电商秒杀解决方案

    • 整个系统关键在于支撑短时间内的高并发,降低数据库压力,业务和普通商品购买区别不大 秒杀系统性能瓶颈在于数据库无法处理并发访问 性能优化的关键在于数据库 思路: • 加缓存,减少数据库访问 • 消息排队,...

    Java实现秒杀系统实现

    高并发优化:使用缓存技术,如Redis缓存库存信息,减少数据库查询次数;使用分布式锁确保订单操作的原子性;使用消息队列异步处理订单,减少数据库压力。 订单处理流程:用户点击抢购按钮后,系统根据用户ID和商品...

    xmljava系统源码-seckill::triangular_flag:使用SSM实现高并发秒杀

    Java高并发秒杀系统API 秒杀优化难点 这个项目中核心就是怎么样处理可能会发生高并发的地方,比如详情页、系统时间、地址暴露接口、用户执行秒杀操作。将商品详情页放在CDN中。用Redis去优化地址暴露接口和利用...

    seckill-master-lkk.zip

    - 整个系统关键在于支撑短时间内的高并发,降低数据库压力,业务和普通商品购买区别不大 秒杀系统性能瓶颈在于数据库无法处理并发访问 性能优化的关键在于数据库 思路: - 加缓存,减少数据库访问 - ...

    计算机毕业设计: 基于ssm mysql-中小型超市管理系统 (数据库+程序+论文),保证可靠运行,附赠计算机答辩PPT 

    中小型超市管理系统是一个基于SSM框架和MySQL数据库的综合性管理系统,旨在提升超市日常运营的效率,优化商品管理、库存控制和销售统计等关键环节。 在数据库设计方面,我们针对超市管理的实际需求,构建了包含商品...

    SpringBoot项目基于SpringBoot的秒杀系统设计与实现.zip

    5. 高并发处理:采用高效的并发控制策略,如乐观锁、队列等,处理大量用户的抢购请求。 6. 订单处理:支持用户快速下单,并在后台进行订单的校验和状态更新。 7. 防止恶意抢单:实施验证码验证、限制同一用户的...

    SpringBoot项目基于Java web的药店管理系统的设计与实现.zip

    2. **库存控制与预警**:实时监控药品库存量,自动提示库存不足或超期药品,便于及时补货或清理。 3. **销售与结算系统**:提供快速的商品销售、退换货处理和多种支付方式的结算功能。 4. **财务管理**:自动记录...

    SpringBoot项目基于Spring Boot智能无人仓库管理.zip

    系统的架构设计注重性能、可用性和可维护性,以支持高并发的数据访问和动态的数据更新。其模块化的设计也便于未来根据物流和仓储技术的发展增加新功能或升级现有功能,确保软件的长期适用性和技术前瞻性。

    SpringBoot项目基于springboot的医药管理系统.zip

    2. **库存控制与追踪**:实时监控药品库存量,自动提示库存不足并支持采购订单生成。 3. **处方审核与处理**:验证医生开具的处方,确保药物配发的正确性与安全性。 4. **销售与分发记录**:记录药品的销售和分发...

    SpringBoot项目基于springboot物流管理系统.zip

    它利用Spring Boot的快速开发特性,结合了货物追踪、订单管理、库存控制、运输调度、客户关系管理以及财务报告等功能,旨在提高物流操作的效率,减少运输过程中的错误和延误,并提供实时数据分析来支持决策制定。...

    web课程设计仓库管理应用网站系统(1).doc

    仓库管理系统主要用于库存管理,以入库、出库、查询为主要应用类型建立相应的事 务处理,让货物库存数量控制在最佳状态。系统可以根据每种货物设定的最低库存量和 最高库存量显示出库存信息,即哪些货物需要采购,...

    web课程设计仓库管理应用网站系统.doc

    仓库管理系统主要用于库存管理,以入库、出库、查询为主要应用类型建立相应的事 务处理,让货物库存数量控制在最佳状态。系统可以根据每种货物设定的最低库存量和 最高库存量显示出库存信息,即哪些货物需要采购,...

    SpringBoot项目华府便利店信息管理系统.zip

    2. **智能库存控制**:实时监控商品库存量,自动提示库存不足或过剩,优化补货计划。 3. **销售数据分析**:收集销售数据,分析顾客购买行为,生成销售报告,辅助决策制定。 4. **会员管理与营销**:建立会员...

Global site tag (gtag.js) - Google Analytics