百分百源码网-让建站变得如此简单! 登录 注册 签到领金币!

主页 | 如何升级VIP | TAG标签

当前位置: 主页>网站教程>数据库> Redis实现秒杀的办法介绍(附代码)
分享文章到:

Redis实现秒杀的办法介绍(附代码)

发布时间:08/01 来源:未知 浏览: 关键词:
本篇文章给大家带来的内容是对于Redis实现秒杀的办法介绍(附代码),有一定的参照 价值,有需要的伴侣可以参照 一下,但愿对你有所帮忙。

本篇文章给大家带来的内容是对于Redis实现秒杀的办法介绍(附代码),有一定的参照 价值,有需要的伴侣可以参照 一下,但愿对你有所帮忙。

导语:秒杀想必大家都理解,在短工夫内要求拜访会激增,同时要保障不会超卖和数据的正确,关于技术方面还是有些考验的。惋惜的是,不断没有时机在项目中实现。再看了一些材料后,打算实验下。下列代码仅为测试所用,环境比拼简略,请依据现实状况进行修改。

新建秒杀队列

在开端秒杀以前,先将商品放入队列中,如下

/**
     * 新建秒杀列表
     */
    public function createList()
    {
        $count = 30;
        $redisKey = 'goods_list';

        for ($i = 1; $i <= $count; $i++) {

            // 测试用,防止数据错误
            if (Redis::llen($redisKey) >= $count) {
                break;
            }

            Redis::rpush($redisKey, $i);
        }
    }

施行完后,在 Redis 中看下

有 30 个商品 ID,数据正常。

秒杀

接下来是关键的一步,运用的是 Redis 的 lpop 下令猎取商品 ID,应用的是 Redis 的原子性。

/**
     * 秒杀
     */
    public function buy()
    {
        // 随机会员名,无心义,仅做标志
        $username = Hash::make(now());

        if ($goodsId = Redis::lpop('goods_list')) {
            // 购置成功
            Redis::hset('buy_success', $goodsId, $username);
        } else {
            // 购置失败
            Redis::incr('buy_fail');
        }
    }

如上,简化了代码,购置之后,成功与否只是做记载。现实利用中,固然会更加复杂,但要注意的是,不要同步操纵 Mysql。多说一句,Hash:make(now()) 即便值雷同,也不会生成雷同的数据,参照 这里。

测试

最后就是进行测试了,运用 ab 测试,施行 ab -c 300 -n 3000 http://localhost/buy/ ,上述下令的意思是 300 并发,共要求 3000 次

好的方面是秒杀成功的数目是正确的,没有超卖。【

打赏

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

百分百源码网 建议打赏1~10元,土豪随意,感谢您的阅读!

共有150人阅读,期待你的评论!发表评论
昵称: 网址: 验证码: 点击我更换图片
最新评论

本文标签

广告赞助

能出一分力是一分吧!

订阅获得更多模板

本文标签

广告赞助

订阅获得更多模板