怎么用redis做秒杀支撑的demo初始化秒杀


本篇内容介绍了“怎么用redis做秒杀支撑的demo”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!用redis做秒杀的库存扣除, 限制每个账号只能抢购一次, 这个简单的demo使用了string, hash, list三种基本类型.用string类型的int值来存储剩余库存, 并在抢购成功后 香港云主机减1用hash来存储”已抢购到”的会员的id(可以确保用户id作为field的唯一性). 注意: 这个hash的field对应的uid不一定抢购成功用list来保存真正抢购成功的会员id的列表, 作为后续处理订单的队列第一次写的时候, 尝试过使用string的bitmap来保存该会员是否抢购成功过, 但是这个在高并发时会出问题, 所以后来换成了唯一field的hash2个文件:init.php: 初始化库存, 统计数据, 抢购成功的会员列表等buy.php: 抢购ini.php:执行本文件, 初始化数量.redis-cli 下执行 “mget rush_stock rush_fail rush_success rush_got_uid” 确认初始化数据判断的逻辑:
库存是否为0, 库存>0则进入抢购队列
抢购队列数据(hash)写入成功, 则准备扣减库存
库存扣减成功(余数>=0)则抢购成功, 进入订单处理队列(list)
目前是用string int存储库存, 也可以用list的item的个数来计数, 但是初始化时没有string类型来得简单.buy.php上面的代码中的hash保存的会员uid, 只是进入抢购队列的会员uid, 不一定抢购成功了, 那些根本没有进入抢购队列的, 也不会在这个hash中, 直接因为库存为0而被拒绝了.AB压力测试: 做一个简单的500个并发并总计尝试2000次的请求(测试时, win10下600个并发Nginx就挂机了)redis-cli下执行 “mget rush_stock rush_fail rush_success rush_got_uid” 确认结果, 通过 rush_stock 的值查看可能的超发的数量执行 “hvals rush_queue_h”可查看进入抢购队列的用户id, 这个数量 >= 抢购成功的用户数量对于list队列的数据操作, 可以使用BLPOP命令, 这样可以实现FIFO的数据处理顺序.“怎么用redis做秒杀支撑的demo”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注开发云网站,小编将为大家输出更多高质量的实用文章!

相关推荐: 电脑蓝屏代码0x0000007B如何处理

这篇“电脑蓝屏代码0x0000007B如何处理”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“电脑蓝屏代码0x0000007B如何处理”文章吧。具…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

Like (0)
Donate 微信扫一扫 微信扫一扫
Previous 07/14 12:48
Next 07/14 12:48

相关推荐