1000并发 3个奖品 保证秒杀稳定进行,并且中奖者和奖品数量不要出问题
这个问题怎么处理 ,mysql的 希望各位有经验的同学分享下经验以及解决方案,谢谢,在先等
回复内容:
1000并发 3个奖品 保证秒杀稳定进行,并且中奖者和奖品数量不要出问题
这个问题怎么处理 ,mysql的 希望各位有经验的同学分享下经验以及解决方案,谢谢,在先等
Redis 队列
Redis 可以应对高并发场景,是因为它的读写请求均是单线程机制,不存在并发问题。而且 Redis 是基于内存的,读写速度也比 MySQL 快得多
因为奖品只有三个,所以无论多少个请求过来,最多只能有三个请求可以正确获得奖品,所以可以将大部分的请求不做任何处理,直接返回秒杀失败,剩下很小的请求进入到下环节,此时并发很小,所以接下来的处理几乎可以不再考虑并发问题。
当然此方案仅因为奖品数很少,如果奖品本身很多,即使抛弃大部分的请求,系统也承受较大并发冲击,此时需要考虑其它方案。
请用缓存把奖品全部加入到里面。然后全部从缓存里秒,秒到了才更新数据库
看你描述你的秒杀场景感觉比我们的稍微简单一些,如果不考虑非常严谨的扩展性,只考虑当下,我感居然可以如下方式简单实现:
假设你优化下mysql或升级下硬件,1000并发全部查询mysql数据库是否还有库存,可以顶得住的话,那么只需要一个队列服务,把所有并发秒杀用户全部进入到队列逐条同步筛选出3个中奖用户,然后在生成订单的时候扣掉mysql里面的库存,并且响应给前端页面检测是否秒杀成功的进程即可,其他的997个用户全部响应给前端进程秒杀失败提醒
假设顶不住或者没钱升级?那就用redis之类的服务把1000个奖品信息存入缓存,秒杀成功生成订单的时候同步更新mysql和redis里面的库存数量
因为题主声明了只使用MySQL,我认为可以这样做:
1.将3个奖品放入一张表中;
2.到点后系统进入高并发状态,然后你们的奖品随机算法使用户中奖并删除记录;
3.检测表中是否还有数据;
也可以这样:
1.建立一张中奖专用计数表;
2.到点后系统进入高并发状态,然后你们的奖品随机算法使用户中奖并增加计数;
至于优化方案(暂时能想到的,希望大神补充):
1.存储引擎使用
MEMORY
;
2.可以在程序入口处设置一个过期时间,3个奖品的话,10秒钟足够了,过期后入口关闭或跳转;
最简单的方法是把1000并发用队列拉成线性的就行了,当某个请求发现库存没了,以后的所有请求全部返回秒杀失败。
才1000的并发/数据,为啥要用数据库。数据库的速度还是很慢很慢的。
服务器直接为每个请求保存一个时间戳,然后排序就好了。反正用户1-2秒之后获得结果也不会有什么特别的感觉。
将请求保存到队列,只取队列的前三个值,后面的全部返回已售完。
需要一个队列服务,把所有的并发秒杀用户,全部进入到队列逐条同步筛选出3个中奖用户,然后在生成订单的时候扣掉mysql里面的库存,并且响应给前端页面检测是否秒杀成功的进程即可,其他的997个用户全部响应给前端进程秒杀失败提醒
用 mysql 内存表。先用 hash user_id等方法随机丢掉一部分请求
然后直接 update 内存表,例:
``
update award set user_id=xxx where id=1 and user_id=0
``

php把负数转为正整数的方法:1、使用abs()函数将负数转为正数,使用intval()函数对正数取整,转为正整数,语法“intval(abs($number))”;2、利用“~”位运算符将负数取反加一,语法“~$number + 1”。

实现方法:1、使用“sleep(延迟秒数)”语句,可延迟执行函数若干秒;2、使用“time_nanosleep(延迟秒数,延迟纳秒数)”语句,可延迟执行函数若干秒和纳秒;3、使用“time_sleep_until(time()+7)”语句。

php除以100保留两位小数的方法:1、利用“/”运算符进行除法运算,语法“数值 / 100”;2、使用“number_format(除法结果, 2)”或“sprintf("%.2f",除法结果)”语句进行四舍五入的处理值,并保留两位小数。

php字符串有下标。在PHP中,下标不仅可以应用于数组和对象,还可应用于字符串,利用字符串的下标和中括号“[]”可以访问指定索引位置的字符,并对该字符进行读写,语法“字符串名[下标值]”;字符串的下标值(索引值)只能是整数类型,起始值为0。

判断方法:1、使用“strtotime("年-月-日")”语句将给定的年月日转换为时间戳格式;2、用“date("z",时间戳)+1”语句计算指定时间戳是一年的第几天。date()返回的天数是从0开始计算的,因此真实天数需要在此基础上加1。

在php中,可以使用substr()函数来读取字符串后几个字符,只需要将该函数的第二个参数设置为负值,第三个参数省略即可;语法为“substr(字符串,-n)”,表示读取从字符串结尾处向前数第n个字符开始,直到字符串结尾的全部字符。

方法:1、用“str_replace(" ","其他字符",$str)”语句,可将nbsp符替换为其他字符;2、用“preg_replace("/(\s|\ \;||\xc2\xa0)/","其他字符",$str)”语句。

php判断有没有小数点的方法:1、使用“strpos(数字字符串,'.')”语法,如果返回小数点在字符串中第一次出现的位置,则有小数点;2、使用“strrpos(数字字符串,'.')”语句,如果返回小数点在字符串中最后一次出现的位置,则有。


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

EditPlus Chinese cracked version
Small size, syntax highlighting, does not support code prompt function

Safe Exam Browser
Safe Exam Browser is a secure browser environment for taking online exams securely. This software turns any computer into a secure workstation. It controls access to any utility and prevents students from using unauthorized resources.

Dreamweaver CS6
Visual web development tools

SublimeText3 Linux new version
SublimeText3 Linux latest version

mPDF
mPDF is a PHP library that can generate PDF files from UTF-8 encoded HTML. The original author, Ian Back, wrote mPDF to output PDF files "on the fly" from his website and handle different languages. It is slower than original scripts like HTML2FPDF and produces larger files when using Unicode fonts, but supports CSS styles etc. and has a lot of enhancements. Supports almost all languages, including RTL (Arabic and Hebrew) and CJK (Chinese, Japanese and Korean). Supports nested block-level elements (such as P, DIV),
