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": {}
}