`
hochiang
  • 浏览: 21401 次
  • 性别: 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%稳定,很容易丢,即使采用持久化的缓存,在高并发下有时也会出问题;一旦丢失数据,这样
               就导致数据库记录的奖品余额比实际真实存在的奖品余额要多,这个时候读数据库,就会导致奖品多发,也就
               是所谓的超卖!
分享到:
评论

相关推荐

    java高并发秒杀api源码

    在高并发环境下,秒杀API面临的主要挑战是如何避免超卖、控制请求流量以及优化性能。以下是一些关键的技术点: 1. **分布式锁**:为了防止多个用户同时扣减同一商品的库存,可以使用分布式锁(如Redis或Zookeeper)...

    Java高并发秒杀API

    为了应对高并发,可以采用预生成SQL、存储过程或者乐观锁悲观锁策略来控制并发。例如,使用行级锁避免多用户同时扣减同一商品库存,或者利用版本号实现乐观锁防止脏读。 Service层是业务逻辑的核心,这里需要处理...

    高并发秒杀案例

    1. **分布式锁**:在高并发下,秒杀商品的库存需要被正确管理。我们可以使用分布式锁(如Redis或Zookeeper)来确保同一时刻只有一个请求能成功执行减库存操作,防止超卖问题。 2. **缓存策略**:利用缓存(如Redis...

    高并发秒杀系统

    SSM(Spring、SpringMVC、MyBatis)是一个经典的Java后端开发框架组合,常用于构建此类高并发应用。在这个项目中,我们将深入探讨如何利用SSM实现一个高效、稳定的秒杀系统。 **一、Spring框架** Spring是Java企业...

    解决高并发环境下Redis连接超时与超卖问题

    这样,即使在高并发情况下,如果多个用户同时尝试购买同一商品,只有一个用户的请求能够成功完成交易,其余用户则会在检查库存时发现库存已减少,从而避免了超卖问题。 同时,为了应对连接超时,我们需要优化Redis...

    Java高并发秒杀API之业务分析与DAO层

    在IT行业中,尤其是在Java开发领域,高并发秒杀API的设计是相当重要的一项技术。它涉及到如何在短时间内处理大量用户请求,保证系统稳定性和性能。在这个主题下,我们主要讨论两个关键部分:业务分析和DAO(Data ...

    Java秒杀系统方案优化 高性能高并发实战

    2. **数据一致性保障**:在高并发场景下,如何确保库存数据的一致性是非常重要的问题。 3. **用户体验优化**:为了提升用户体验,秒杀系统还需要具备快速响应的能力。 4. **系统稳定性**:秒杀过程中,系统必须保持...

    SpringBoot开发的高并发限时抢购秒杀系统(含数据库文件).zip

    【标题】:基于SpringBoot的高并发限时抢购秒杀系统设计与实现 【描述】:这个项目是一个使用SpringBoot框架构建的高并发限时抢购(秒杀)系统,它涵盖了从后端服务到数据库的设计与实现。系统的核心目标是处理大量...

    高并发核心技术 - 订单与库存1

    在高并发环境中,确保订单与库存管理的安全性和准确性是一项至关重要的任务。这涉及到多个关键环节,包括下单、预占库存、支付、取消订单以及回退预占库存等。以下是对这些知识点的详细解释: 1. **下单与预占库存*...

    java高并发买秒杀完整代码

    在IT行业中,尤其是在互联网电商领域,秒杀活动是一种常见的促销手段,它考验着系统的高性能和高并发处理能力。本文将围绕“Java高并发秒杀完整代码”这一主题,结合描述中提到的技术栈,如Spring、SpringMVC、...

    数据库并发控制sqlserver2000

    通过合理地利用封锁机制和遵循相应的封锁协议,可以在保持数据库高并发的同时,避免因并发操作导致的数据不一致等问题。对于数据库管理员来说,了解并掌握这些机制是非常重要的,它们不仅能够帮助优化数据库的性能,...

    PHP秒杀系统 高并发高性能的极致挑战-

    3. **库存控制**:确保每个成功下单的用户都能获得商品,避免超卖情况的发生。 4. **订单生成**:快速生成订单并确认支付状态,完成交易过程。 #### 三、PHP秒杀系统的架构设计 ##### 3.1 系统架构概述 一个高...

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

    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 可回滚...

    Redis 高并发秒杀商品系统源代码 Spring MVC+bootstrap+redis+mybatis学习案例

    1. **库存存储**:Redis可以用来存储秒杀商品的实时库存,使用`INCR`命令实现减库存操作,并通过原子性确保在高并发下不会出现超卖问题。 2. **队列服务**:利用Redis的发布订阅(Pub/Sub)功能,将用户请求放入消息...

    (源码)基于Spring Boot的高并发秒杀系统.zip

    # 基于Spring Boot的高并发秒杀系统 ## 项目简介 本项目是一个基于Spring Boot框架的高并发秒杀系统,旨在处理大量用户同时参与的秒杀活动。系统通过Spring Boot进行快速开发和部署,结合Redis缓存和RabbitMQ消息...

    ssm高并发之秒杀系统.rar

    本项目以"ssm高并发之秒杀系统"为主题,旨在探讨如何利用SSM框架来设计和实现一个能够应对高并发场景的秒杀系统。 1. **Spring框架**:Spring作为基础架构框架,提供了依赖注入(DI)和面向切面编程(AOP)等功能,...

    Redis 高并发秒杀商品系统(Spring MVC+bootstrap+redis+mybatis)

    在设计这样的系统时,技术选型至关重要,本项目选择了Spring MVC、Bootstrap、Redis和MyBatis作为核心组件,构建了一个高并发的秒杀商品系统。接下来,我们将深入探讨这些技术如何协同工作以实现高效、稳定的秒杀...

Global site tag (gtag.js) - Google Analytics