Laravel中利用redis对用户下单进行限流

Laravel中利用redis对用户下单进行限流

需求是: 用户每分钟最多只能下5单, 避免用户大量刷单, 这类思路也适合用于用户注册限流

public function test()
{
    $member_id = 100; # 用户id
    # 限流下单, 1分钟最多5单...start
    $key = 'pay_order_' . $member_id;
    # use Illuminate\Support\Facades\Redis;
    $order_count = Redis::get($key);
    if ($order_count) {
        if ($order_count > 4) {
            $this->error('同一时间下单人数过多, 请稍后再试');
        }
        $ttl = Redis::ttl($key);
        Redis::setex($key, $ttl, (int)$order_count + 1);
    } else {
        Redis::setex($key, 60, 1);
    }
    # 限流结束
    var_dump('继续下单业务流程');
}

上面的示例, 如果1分钟内, 第6次下单, 就会提示

{
    "code": 422,
    "msg": "同一时间下单人数过多, 请稍后再试",
    "data": {}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值