有 30 个商品 ID,数据正常。
秒杀
接下来是关键的一步,使用的是 Redis 的 lpop
命令获取商品 ID,利用的是 Redis 的原子性。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
如上,简化了代码,购买之后,成功与否只是做记录。实际应用中,当然会更加复杂,但要注意的是,不要同步操作 Mysql。多说一句,Hash:make(now())
即使值相同,也不会生成相同的数据,参考这里。
测试
最后就是进行测试了,使用 ab 测试,执行 ab -c 300 -n 3000 http://localhost/buy/
,上述命令的意思是 300 并发,共请求 3000 次
执行完成,速度并不快,并且还有 794 个访问失败。来看下数据是否正确吧。在页面中打印 buy_success
值
30 个成功者。再来看下秒杀失败的数量
不是一个准确的数字,2165+30 是所有请求成功的数字,再加上失败的 794 ,总数是 2989,依然不足 3000。
结语
上述测试有不足的地方,相应速度慢、请求失败、失败计数不准确。看来有很多要优化的地方,不止是代码层。测试的时候忘记将访问记录入库关掉,应该是有些影响。
好的方面是秒杀成功的数量是准确的,没有超卖。【相关推荐:Redis教程】
以上就是Redis实现秒杀的方法介绍(附代码)的详细内容,更多文章请关注木庄网络博客!
相关阅读 >>
lnmp环境下升级phpRedis和Redis-server版本的方法
更多相关阅读请进入《Redis》频道 >>

数据库系统概念 第6版
本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。