关于抢京东券高并发的问题?

之前在一个微信公众号上做了一个抢京东券的功能, 50 张京东券,面额 50 、 100 不等,存在一张 card 表中,四个字段, id , number , money , is_taken 。

因为之前没有这种高并发处理的经验,所以使用了一种最传统的方式来实现:

方案一:来一个人我就从数据库中取一张京东券出来给他,并将该京东券标记为已使用(即更新 is_taken 字段),并将该用户插入到 winner 表中

这个方案最终导致的悲剧是,有一张京东券被两个人领取到了。

我所理解会出现这个问题的原因是获取未被占用的京东券数据( select )和更新该条京东券数据( update )是两个独立的操作,在这两个操作之间存在时间间隔,例如 A 用户刚得到了一张 100 元的京东券,还未来得及更新, B 用户涌入查询到这张京东券未被使用,所以 B 用户也获得了这张京东券。

问题一:我这个理解是正确的吗?还是有更深入的原因?

出了这个问题后,我在网上查找关于高并发相关的资料,几乎都提到了队列和锁。就我个人了解队列可以使用 redis 或者 memcacheq(这个没用过,不熟悉),所以自己想了第二种方案。

方案二:事先将京东券 id 数据压入到 redis 的 list 中,每过来一个有效的用户,就 pop 一个 id 给他(当 pop 出来的数据为空时说明京东券已经被抢光),并将用户 id 与京东券 id 的对应关系存储到 redis 的 set 当中去,然后根据这个 id 来查找京东券数据,显示给用户京东券的面额,并将 set 中的数据存储到数据库当中去。

个人觉得这种方案会比第一种方案要好的多。但是没有真正意义上去实践过,只是个人思考的一个结果。

问题二:第二种方案是否可行?是否还有更优方案?或者说方案二是否有可以优化的地方?

问题三:在高并发时很多文章中说到的锁是一个怎样的概念呢?我的理解是这个锁就像是数据库的一个大门,一次只放一个人进去,是这样吗?具体该如何设计和使用?

问题四:在应对大流量高并发的情况时,在服务器层面要做哪些工作?

问题五:我所举得这个例子与平常类似网上商城中的秒杀功能有哪些相同和相异之处呢?是否可以按照方案二的设计思路进行设计呢?

相关阅读:

求问,windows安装babel出错

可耻的求lamp兄弟连 JavaScript资源的课件.

art-template的{{}}循环如何支持条件索引。

node.js对于es6的支持报错

html5 定义buuton typepassword value密码把值显示出来

一个cloudkit的实例

iOS支付安全

通过鼠标悬浮在a元素上,使图像透明度改变,为何在网页上没有变化,图像没有显示?

有哪些轻量级的ajax库

PHP的图表扩展

android 平台搭建

json对象的值赋给php数组,然后数组的健值,存到mysql内对应字段名下。

输入法弹起导致浏览器视窗被压缩

javascript Uncaught TypeError: undefined is not a function

Nginx 的虚拟主机为何只识别最上面的 server ?

请问下这个什么url结构的跳转。我实在分不出来,求解?编码解码 加密 还是不行

gulp的插件在哪里寻找?

XCODE 下安装gmp大数库?

flask-mongoalchemy 配置遇到问题

这是什么字体

php京东秒杀,php,高并发_关于抢京东券高并发的问题?,php,高并发,秒杀 - phpStudy...相关推荐

  1. 用php写京东抢购,关于抢京东券高并发的问题?

    之前在一个微信公众号上做了一个抢京东券的功能, 50 张京东券,面额 50 . 100 不等,存在一张 card 表中,四个字段, id , number , money , is_taken . 因 ...

  2. solr 高并发_精妙绝伦!阿里资深架构师撰写这份:并发编程,可谓“独具匠心”...

    写在前面 并发编程是Java程序员最重要的技能之一,也是最难掌握的一种技能.现在几乎100%的公司不但面试都必须问到并发编程,而且在日常工作和开发当中更是需要并发编程的使用,尤其是在互联网公司,它要求 ...

  3. swoole mysql 并发_如何用Swoole测试MySQL在特定SQL下的并发性能

    场景描述 从全文检索或者缓存中获取ID,根据ID查询数据库获取基础信息,进行页面展示 SQL:select * from table where id in(id1,id2,id3...id40) 此 ...

  4. 一个springboot能支持多少并发_吃透这篇,你也能搭建出一个高并发和高性能的系统...

    " 什么是高并发?高并发是互联网分布式系统架构的性能指标之一,它通常是指单位时间内系统能够同时处理的请求数,简单点说,就是 QPS(Queries Per Second). 那么我们在谈论高 ...

  5. python 多线程并发_寻找python大神!!!python如何多线程并发?

    不是大神.尝试回答一下. 首先解释下什么叫做线程,什么叫做进程,在解释这两个概念前,我们还需要明白什么叫做GIL全局解释器锁.GIL 全局解释器锁: GIL(全局解释器锁,GIL 只有cpython有 ...

  6. python访问数据库如何解决高并发_怎样解决数据库高并发的问题

    怎样解决数据库高并发的问题?解决数据库高并发使用缓存式的Web应用程序架构.增加Redis缓存数据库.增加数据库索引.页面静态化.使用存储过程.MySQL主从读写分离.分表分库.负载均衡集群. 解决数 ...

  7. mysql每秒支持多少并发_如何设计一个高并发系统?

    面试题 如何设计一个高并发系统? 面试官心理分析 说实话,如果面试官问你这个题目,那么你必须要使出全身吃奶劲了.为啥?因为你没看到现在很多公司招聘的 JD 里都是说啥,有高并发就经验者优先. 如果你确 ...

  8. oom 如何避免 高并发_【面试题】如何设计一个高并发系统?

    面试题 如何设计一个高并发系统? 原文链接:https://github.com/doocs/advanced-java/blob/master/docs/high-concurrency/high- ...

  9. jvm高并发_在JVM上对高并发HTTP服务器进行基准测试

    jvm高并发 在第一篇关于HTTP客户端的文章 (我将您重定向到JVM上的高效HTTP的介绍)之后,现在让我们来谈谈HTTP 服务器 . 有一些关于HTTP服务器的基准测试,但通常受到诸如以下缺点的阻 ...

最新文章

  1. MIT 6.824 Lab2A (raft) -- Leader Election
  2. JAVA字符串格式化-String.format()使用
  3. 1/5 MySQL入门总结:下载安装
  4. 网管光纤收发器产品硬件功能及网管收发器优点介绍
  5. 简单的后台管理系统vue-cli3.0+element-ui
  6. python魔术方法str_python 魔术方法(三)对象的打印 -- __repr__ 与 __str__
  7. JQUERY--图片轮换superslide(
  8. Lua-泛型for循环 pairs和ipairs的区别
  9. 在QT中CXDVA视频组件的例子
  10. 剑指offer——面试题41-2:和为S的两个数字
  11. Django-天天生鲜项目
  12. Image.fromarray的用法
  13. PS小技巧----1寸、2存照片制作
  14. 《数论概论》读书笔记 第三章勾股数组与单位圆
  15. 关于构建与优化数据仓库架构与模型设计
  16. java去除字母_java 字符串中去除 数字 字母 符号amp;amp;N*1*senten.Length=gt;M*M
  17. 如何回复SCI审稿人评审意见(response letter)
  18. 学习臧圩人Java面试题解惑系列总结
  19. 每日面试1题-如何防止CDN防护被绕过
  20. 如何优雅的使用markdown写博客--微博图床使用说明

热门文章

  1. 图解人工智能知识架构(从系统角度告诉你人工智能到底学些啥)
  2. 了解 Pos、Pow 和Staking
  3. kerberos的as tgs cs认证基本原理
  4. ssm+微信小程序基于微信小程序的社区老人健康管理服务系统的设计与实现毕业设计源码011513
  5. 影像组学特征的生物学意义
  6. MySQL 唯一索引,并发插入导致死锁
  7. 浙大开源:5 笔涂出一只 3D 猫咪模型,可跑可跳无需手动绑定骨骼
  8. 2022 Mac上安装Android SDK
  9. 埃隆·马斯克的2条规则:如何更快的学习任何知识
  10. Maven的工作流程和原理