在接口開發工作中很常見的限時訪問功能,每個用戶每分鐘只允許調用一次接口。或者論壇中,每個用戶五分鐘之內只能提交一次評論。本章我們就來實現一個簡單的限時訪問,每個用戶每分鐘只允許調用一次接口。
在高并發的項目中,通常我們不會用業務層代碼來處理限時訪問,更常見的是用 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' => '每分鐘只允許調用一次'];
}
~~~