在接口开发工作中很常见的限时访问功能,每个用户每分钟只允许调用一次接口。或者论坛中,每个用户五分钟之内只能提交一次评论。本章我们就来实现一个简单的限时访问,每个用户每分钟只允许调用一次接口。
在高并发的项目中,通常我们不会用业务层代码来处理限时访问,更常见的是用 Nginx + Lua + Redis 来实现限时访问。
## 每分钟只允许调用一次接口
~~~
public function somthing($user_id)
{
$redis = new \Redis();
$redis->connect('127.0.0.1', 6379);
// 锁不存在,就执行业务代码
if (!$redis->exists("lock:{$user_id}")) {
// ==========
// do somthing
// ==========
// 在 Redis 中存一个有效期60秒的缓存锁
$redis->set('lock:{$user_id}', 1, 60);
return ['code' => 200, 'message' => '操作成功', 'data' => 'somthing'];
}
return ['code' => 422, 'message' => '每分钟只允许调用一次'];
}
~~~