بدون شک برای شما هم پیش آمده که از وبسرویسی استفاده میکنید که در هر دقیقه تنها تعداد محدودی درخواست مجاز است و موضوع «محدود کردن درخواستها» و مدیریت آن گاهی ساعتها زمان میبرد.
امدم توی این مقاله بهتون توضیح بدیم که چطوری میشه زیر ۱ دقیقه این فرایند رو مدیریت کرد 😁.
قبل از هرچیزی از نصب بودن Redis و پلاگین php اون مطمئن بشید و بعد بیاید باهم بررسی کنیم که چطوری میشه ازش استفاده کرد.
روی ابونتو راحت میشه با این ۲تا خط نصبشون کرد
sudo apt-get install redis
sudo apt install php{version}-redisCode language: JavaScript (javascript)
خب استفاده کردن ازشون خیلی ساده هست فقط کافیه اول .env رو تنظیم کنید
پورت پیشفرض redis روی 6379 تنظیم شده
REDIS_CLIENT=phpredis
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379Code language: JavaScript (javascript)
خب syntax کلی خیلی ساده است
\Illuminate\Support\Facades\Redis::throttle('uniq key for action')
->allow(3) // تعداد درخواست های مجاز
->every(60) // توی چه بازهای اون درخواست ها مجاز هستند
->block(2) // بعد از این که تعداد مجاز تموم شد چقدر صبر کنه
->then(function () {
// اگر مجاز بود این قسمت اجرا میشه
return 'working ...';
}, function () {
// ولی اگر درخواست مجاز نبود میاد توی این قسمت
return 'wait ...';
});Code language: PHP (php)
تفسیر کد بالا میشه: تعداد مجاز، ۳ درخواست در هر دقیقه هست و زمانی که درخواستهای مجاز تمام شد ۲ثانیه صبرکن و بعدا عملیات مربوط به عملیات غیرمجاز رو انجام بده.
دیدید چقدر ساده بود؟ 😂
میشه ازش توی Job ها هم استفاده کرد.
<?php
namespace App\Jobs;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Queue\Queueable;
use Illuminate\Support\Facades\Log;
class RedisJob implements ShouldQueue
{
use Queueable;
public int $tries = 100; // حواستون به این باشه وگرنه job ها به خطا میخورند
/**
* Create a new job instance.
*/
public function __construct()
{
}
/**
* Execute the job.
*/
public function handle(): void
{
\Illuminate\Support\Facades\Redis::throttle('redisjob')
->allow(3)
->every(60)
->block(0)
->then(function () {
Log::info('show :D');
}, function () {
$this->release(10);
});
}
}Code language: HTML, XML (xml)
امیدوارم از این آموزش خوشتون آمده باشه 😅

