سی ام اس نویسسی ام اس نویسیاد بگیر، سیستم خودتو بنویس
مجلهتماس با ما
سی ام اس نویسسی ام اس نویس

CMS نویس مرجعی برای آموزش برنامه نویسی وب و PHP، توسعه افزونه‌های اختصاصی وردپرس، طراحی ورک‌فلو و اتوماسیون با n8n و توسعه CMS های اختصاصی است. هدف ما ارائه آموزش‌های کاربردی و راهکارهای حرفه‌ای برای توسعه‌دهندگان، کسب‌وکارها و علاقه‌مندان به دنیای برنامه‌نویسی است.

پیوندهای سریع
محصولات فیزیکیمحصولات دیجیتالدوره‌های آموزشی
سی ام اس نویس
مجله سی ام اس نویستماس با ماپنل کاربری
سی ام اس نویس — تمامی حقوق برای سی ام اس نویس محفوظ است. © 1406 تماس با ما09307711941
Redis در Laravel چیست؟ آموزش کامل اتصال و استفاده از Redis

Redis در Laravel چیست؟ آموزش کامل اتصال و استفاده از Redis

ممدیر کل سیستم ۱۵ مهر ۱۴۰۵ ۲۰ دقیقه مطالعه ۴ بازدید
Redis در Laravel چیست؟ آموزش کامل اتصال و استفاده از Redis

اگر با Laravel کار کرده باشید، احتمالاً نام Redis را در موضوعاتی مثل Cache، Queue، Session و پردازش‌های پس‌زمینه دیده‌اید. اما Redis دقیقاً چیست و چرا در پروژه‌های Laravel استفاده می‌شود؟

Redis یک ذخیره‌ساز داده در حافظه (In-Memory Data Store) است که به دلیل سرعت بسیار بالا می‌تواند برای ذخیره موقت داده‌ها، کش، صف‌های پردازشی، شمارنده‌ها، Lockها و بعضی داده‌های سریع‌الوصول استفاده شود.

Laravel نیز به‌صورت داخلی امکانات مناسبی برای کار با Redis دارد و می‌توان آن را به‌عنوان یکی از اجزای اصلی زیرساخت یک پروژه Laravel استفاده کرد.

در این آموزش ابتدا با مفهوم Redis آشنا می‌شویم و سپس مرحله‌به‌مرحله نحوه اتصال Redis به Laravel و استفاده از آن را بررسی می‌کنیم.


Redis چیست؟

Redis یک سیستم ذخیره‌سازی داده بسیار سریع است که داده‌ها را عمدتاً در حافظه RAM نگهداری می‌کند.

برخلاف دیتابیس‌هایی مانند MySQL و PostgreSQL که معمولاً برای ذخیره دائمی داده‌های اصلی برنامه استفاده می‌شوند، Redis بیشتر برای داده‌هایی مناسب است که باید با سرعت بسیار بالا خوانده یا تغییر داده شوند.

برای مثال فرض کنید صفحه اصلی یک سایت Laravel برای نمایش تعداد زیادی محصول، اطلاعاتی را از دیتابیس دریافت می‌کند.

اگر این اطلاعات در هر درخواست دوباره از MySQL خوانده شوند، با افزایش تعداد کاربران فشار بیشتری به دیتابیس وارد می‌شود.

در این شرایط می‌توان نتیجه Query را در Redis ذخیره کرد و در درخواست‌های بعدی مستقیماً از Redis خواند.

به این ترتیب:


کاربر

  ↓

Laravel

  ↓

Redis

  ↓

اگر داده وجود داشت → استفاده از Cache

  ↓

اگر وجود نداشت

  ↓

MySQL

  ↓

ذخیره نتیجه در Redis

به همین دلیل Redis یکی از ابزارهای مهم برای افزایش Performance برنامه‌های Laravel محسوب می‌شود.


Redis چه کاربردی در Laravel دارد؟

Redis فقط برای Cache استفاده نمی‌شود و کاربردهای مختلفی در یک پروژه Laravel دارد.

مهم‌ترین کاربردها عبارت‌اند از:

کاربردتوضیح
Cacheذخیره موقت داده‌های پرتکرار
Queueپردازش Jobها در پس‌زمینه
Sessionذخیره Session کاربران
Lockایجاد قفل برای جلوگیری از اجرای همزمان عملیات
Counterشمارش سریع مقادیر
Rate Limitingمحدود کردن تعداد درخواست‌ها
Temporary Dataذخیره داده‌های موقت
Real-time Dataاستفاده در برخی معماری‌های بلادرنگ

در پروژه‌های بزرگ‌تر معمولاً Redis تنها یک ابزار جانبی نیست و به یکی از اجزای مهم معماری برنامه تبدیل می‌شود.


# چرا Redis سریع است؟

یکی از دلایل اصلی سرعت Redis این است که داده‌ها را در حافظه RAM نگهداری می‌کند.

خواندن اطلاعات از RAM معمولاً بسیار سریع‌تر از خواندن داده از Storage و انجام Queryهای پیچیده روی دیتابیس است.

البته این به معنی آن نیست که Redis باید جایگزین MySQL یا PostgreSQL شود.

این دو ابزار معمولاً نقش‌های متفاوتی دارند.

MySQL و PostgreSQL

برای مواردی مانند:

  • اطلاعات کاربران
  • سفارش‌ها
  • محصولات
  • تراکنش‌ها
  • اطلاعات مالی
  • داده‌های اصلی سیستم

مناسب هستند.

Redis

برای مواردی مانند:

  • Cache
  • Queue
  • Lock
  • Counter
  • Session
  • داده‌های موقت

مناسب‌تر است.

بنابراین در یک معماری معمول Laravel می‌توانیم داشته باشیم:


Laravel

   │

   ├── MySQL / PostgreSQL

   │      └── داده‌های اصلی

   │

   └── Redis

          ├── Cache

          ├── Queue

          ├── Session

          └── Lock


# آیا Redis جایگزین MySQL است؟

خیر.

این یکی از اشتباهات رایج در هنگام شروع کار با Redis است.

Redis و MySQL اهداف یکسانی ندارند.

فرض کنید اطلاعات یک سفارش در سیستم شما شامل این موارد باشد:


order_id

user_id

amount

status

created_at

این اطلاعات معمولاً باید در دیتابیس اصلی ذخیره شوند.

اما اگر بخواهید تعداد سفارش‌های امروز را برای مدت کوتاهی Cache کنید، Redis می‌تواند انتخاب بسیار مناسبی باشد.

بنابراین بهتر است Redis را در کنار دیتابیس اصلی استفاده کنید، نه به‌عنوان جایگزین آن.


# Redis چگونه در Laravel استفاده می‌شود؟

Laravel برای کار با Redis چند مسیر مختلف در اختیار شما قرار می‌دهد.

برای مثال می‌توانید از Redis برای Cache استفاده کنید:


Cache::put('site_name', 'CMSNevis', 3600);

یا مستقیماً با Redis کار کنید:


Redis::set('site_name', 'CMSNevis');



$name = Redis::get('site_name');

همچنین Laravel می‌تواند از Redis به‌عنوان Queue Driver استفاده کند.

مثلاً:


QUEUE_CONNECTION=redis

در این حالت Jobهای Laravel به Redis ارسال می‌شوند و Worker آنها را پردازش می‌کند.


# نصب Redis

برای استفاده از Redis در Laravel ابتدا باید یک Redis Server در محیط اجرای برنامه داشته باشید.

در سرورهای Ubuntu معمولاً می‌توانید Redis را با این دستورات نصب کنید:


sudo apt update

sudo apt install redis-server

بعد از نصب، وضعیت Redis را بررسی کنید:


sudo systemctl status redis-server

برای بررسی اینکه Redis واقعاً در حال پاسخ‌گویی است، از redis-cli استفاده کنید:


redis-cli ping

اگر Redis به‌درستی اجرا شده باشد، معمولاً نتیجه زیر را می‌بینید:


PONG

این یعنی Redis آماده دریافت درخواست است.


# پورت پیش‌فرض Redis چیست؟

Redis به‌صورت معمول روی پورت زیر اجرا می‌شود:


6379

بنابراین اگر Redis روی همان سروری اجرا شود که Laravel قرار دارد، تنظیمات معمول می‌تواند به شکل زیر باشد:


REDIS_HOST=127.0.0.1

REDIS_PORT=6379

اگر Redis روی سرور دیگری قرار داشته باشد، باید Host مربوط به همان سرور را تنظیم کنید.

البته در محیط Production نباید Redis را بدون تنظیمات امنیتی مناسب مستقیماً روی اینترنت عمومی قرار دهید.


# اتصال Laravel به Redis

Laravel تنظیمات Redis را از فایل .env و Configurationهای پروژه دریافت می‌کند.

نمونه تنظیمات رایج:


REDIS_CLIENT=phpredis



REDIS_HOST=127.0.0.1

REDIS_PASSWORD=null

REDIS_PORT=6379

در اینجا:

  • REDIS_CLIENT مشخص می‌کند Laravel از چه Clientای استفاده کند.
  • REDIS_HOST آدرس Redis Server است.
  • REDIS_PASSWORD رمز Redis است.
  • REDIS_PORT پورت Redis است.

پس از تغییر .env، اگر Configuration پروژه Cache شده باشد، باید آن را مجدداً بارگذاری کنید:


php artisan config:clear

یا در محیط Production:


php artisan config:cache


# PhpRedis چیست؟

یکی از Clientهای معروف Redis در PHP، افزونه PhpRedis است.

اگر از PhpRedis استفاده کنید، مقدار زیر را در .env قرار می‌دهید:


REDIS_CLIENT=phpredis

برای بررسی فعال بودن افزونه در PHP می‌توانید اجرا کنید:


php -m | grep redis

اگر redis در خروجی نمایش داده شود، افزونه PHP Redis فعال است.

این نکته مهم است؛ چون ممکن است Redis Server روی سرور نصب و فعال باشد، اما PHP پروژه افزونه Redis را نداشته باشد.

در چنین شرایطی Redis از طریق redis-cli کار می‌کند، اما Laravel نمی‌تواند به آن متصل شود.


# PhpRedis یا Predis؟

Laravel امکان استفاده از Clientهای مختلف Redis را فراهم می‌کند.

دو نامی که بیشتر با آنها مواجه می‌شوید:

  • PhpRedis
  • Predis

PhpRedis

PhpRedis یک Extension برای PHP است.

مزیت مهم آن این است که در سطح PHP به‌صورت Native Extension اجرا می‌شود.

Predis

Predis یک کتابخانه PHP برای ارتباط با Redis است که بدون نیاز به Extension مخصوص PHP قابل استفاده است.

در پروژه‌هایی که کنترل کاملی روی سرور دارید، استفاده از PhpRedis معمولاً انتخاب مناسبی است؛ مخصوصاً زمانی که می‌توانید Extension موردنیاز PHP را نصب کنید.


# تست اتصال Laravel به Redis

بعد از تنظیم Redis بهتر است اتصال Laravel را تست کنید.

یک روش ساده، استفاده از Tinker است:


php artisan tinker

سپس:


Redis::set('test_key', 'hello');

و بعد:


Redis::get('test_key');

اگر نتیجه زیر را دریافت کردید:


"hello"

یعنی Laravel توانسته با Redis ارتباط برقرار کند.


# کار با Redis در Laravel

Laravel امکان کار مستقیم با Redis را نیز فراهم کرده است.

برای مثال:


use Illuminate\Support\Facades\Redis;



Redis::set('username', 'saeed');

برای دریافت مقدار:


$username = Redis::get('username');

خروجی:


saeed


# ذخیره اطلاعات با Expiration

یکی از قابلیت‌های مهم Redis امکان تعیین زمان انقضا برای داده‌ها است.

برای مثال:


Redis::setex('verification_code', 120, '123456');

در این مثال مقدار 123456 برای 120 ثانیه ذخیره می‌شود.

پس از پایان این زمان، Redis آن مقدار را منقضی می‌کند.

این قابلیت برای مواردی مانند:

  • کد تأیید
  • Token موقت
  • Cache
  • داده‌های موقت
  • محدودیت درخواست

بسیار کاربردی است.


# استفاده از Redis برای Cache در Laravel

یکی از مهم‌ترین کاربردهای Redis در Laravel، Cache است.

برای مثال:


use Illuminate\Support\Facades\Cache;



Cache::put('site_name', 'CMSNevis', 3600);

در این مثال مقدار CMSNevis به مدت 3600 ثانیه در Cache ذخیره می‌شود.

برای دریافت:


$siteName = Cache::get('site_name');


# تنظیم Redis به عنوان Cache Store

برای اینکه Laravel از Redis برای Cache استفاده کند، می‌توانید Store مربوط به Cache را روی Redis قرار دهید.

در نسخه‌های جدید Laravel، بسته به ساختار پروژه، تنظیم Cache Store در .env می‌تواند به شکل زیر باشد:


CACHE_STORE=redis

پس از آن:


Cache::put('products', $products, 3600);

می‌تواند داده را در Redis ذخیره کند.


# استفاده از Cache::remember

یکی از کاربردی‌ترین روش‌های Cache در Laravel، استفاده از remember است.

فرض کنید لیست محصولات را از دیتابیس دریافت می‌کنید:


$products = Cache::remember('products', 3600, function () {

    return Product::latest()->get();

});

Laravel ابتدا بررسی می‌کند که آیا کلید products در Cache وجود دارد یا خیر.

اگر وجود داشته باشد:


Redis

 ↓

products

 ↓

Return

اگر وجود نداشته باشد:


Redis

 ↓

داده وجود ندارد

 ↓

MySQL

 ↓

Product::latest()->get()

 ↓

Redis

 ↓

Return

این الگو در پروژه‌های واقعی بسیار پرکاربرد است.


# حذف داده از Redis Cache

برای حذف یک Cache می‌توانید از forget استفاده کنید:


Cache::forget('products');

مثلاً بعد از تغییر محصولات:


Product::create($data);



Cache::forget('products');

به این ترتیب Cache قبلی حذف می‌شود تا در درخواست بعدی اطلاعات جدید از دیتابیس دریافت شود.


# Redis برای Queue در Laravel

یکی دیگر از کاربردهای بسیار مهم Redis، استفاده به‌عنوان Queue Driver است.

در مقاله قبلی درباره Queue توضیح دادیم که Laravel می‌تواند Jobها را به صف ارسال کند و Worker آنها را در پس‌زمینه پردازش کند.

Redis یکی از گزینه‌های بسیار مناسب برای این کار است.

برای استفاده:


QUEUE_CONNECTION=redis

در این حالت معماری کلی می‌تواند به شکل زیر باشد:


Laravel

   ↓

Dispatch Job

   ↓

Redis

   ↓

Queue Worker

   ↓

Execute Job

برای اجرای Worker:


php artisan queue:work

این روش برای پروژه‌هایی که تعداد Jobهای زیادی دارند بسیار کاربردی است.

اگر می‌خواهید با مفهوم Queue و Job در Laravel به‌صورت کامل آشنا شوید، مقاله «Queue در Laravel» در همین کلاستر مکمل این آموزش است.


# Redis برای Session

Laravel می‌تواند Sessionهای کاربران را نیز در Redis ذخیره کند.

این قابلیت در پروژه‌هایی که چند Server یا چند Application Instance دارند می‌تواند بسیار مفید باشد.

به‌عنوان مثال:


              Load Balancer

                    │

          ┌─────────┴─────────┐

          ↓                   ↓

     Laravel Server 1    Laravel Server 2

          │                   │

          └─────────┬─────────┘

                    ↓

                  Redis

در چنین معماری‌ای، Session می‌تواند در یک محل مشترک قرار داشته باشد و Application Serverهای مختلف به آن دسترسی داشته باشند.


# Redis Lock در Laravel چیست؟

یکی از قابلیت‌های مهم Laravel، ایجاد Lock است.

فرض کنید یک Job یا درخواست نباید به‌صورت همزمان توسط دو Worker اجرا شود.

می‌توانید از Lock استفاده کنید:


$lock = Cache::lock('process-order', 10);



if ($lock->get()) {

    try {

        // عملیات

    } finally {

        $lock->release();

    }

}

در این حالت تا زمانی که Lock فعال است، پردازش دیگری نمی‌تواند همان Lock را به دست بگیرد.

این قابلیت برای مواردی مانند:

  • جلوگیری از اجرای دوباره یک عملیات
  • پردازش سفارش
  • Cronهای حساس
  • عملیات مالی
  • جلوگیری از Duplicate Processing

بسیار کاربردی است.


# Redis برای Counter

Redis برای شمارنده‌ها نیز بسیار مناسب است.

برای مثال:


Redis::incr('page_views');

هر بار که این دستور اجرا شود مقدار یک واحد افزایش پیدا می‌کند.

برای کاهش:


Redis::decr('page_views');

این قابلیت می‌تواند برای مواردی مانند:

  • تعداد بازدید
  • تعداد درخواست
  • شمارنده‌های موقت
  • آمار لحظه‌ای

استفاده شود.


# Redis و Rate Limiting

Redis به دلیل سرعت بالا و قابلیت عملیات Atomic می‌تواند در سیستم‌های Rate Limiting نیز بسیار مفید باشد.

برای مثال می‌توانید تعداد درخواست‌های یک کاربر یا IP را در یک بازه زمانی کنترل کنید.

معماری کلی:


Request

   ↓

Laravel

   ↓

Redis Counter

   ↓

بررسی تعداد درخواست

   ↓

Allow / Block

این موضوع در APIها، سیستم‌های Login و Endpointهای حساس اهمیت زیادی دارد.


# Redis چه تفاوتی با Cache معمولی دارد؟

گاهی تصور می‌شود Redis خودش همان Cache است.

در واقع Redis یک Data Store است و Cache فقط یکی از کاربردهای آن است.

یعنی:


Redis

├── Cache

├── Queue

├── Session

├── Lock

├── Counter

└── Temporary Data

بنابراین وقتی می‌گوییم:

> Laravel از Redis برای Cache استفاده می‌کند

منظور این نیست که Redis فقط برای Cache ساخته شده است.


# Redis در معماری یک پروژه Laravel

در یک پروژه متوسط یا بزرگ ممکن است معماری زیر را داشته باشیم:


                   Users

                     │

                     ↓

                  Laravel

                     │

       ┌─────────────┼─────────────┐

       ↓             ↓             ↓

    MySQL          Redis          Storage

       │             │

       │       ┌─────┼─────┐

       │       ↓     ↓     ↓

       │     Cache Queue Session

       │             │

       │             ↓

       │          Workers

       │

       ↓

  Permanent Data

این معماری باعث می‌شود هر ابزار مسئولیت مناسب خودش را داشته باشد.


# Redis و Database چه زمانی باید استفاده شوند؟

یک قانون ساده می‌تواند این باشد:

اگر داده اصلی و دائمی است:

از دیتابیس استفاده کنید.

مثلاً:


users

orders

products

transactions

invoices

اگر داده موقت یا بسیار پرتکرار است:

Redis می‌تواند گزینه مناسبی باشد.

مثلاً:


cache

counters

locks

temporary tokens

queue

sessions

البته انتخاب نهایی همیشه به معماری پروژه بستگی دارد.


# نکات مهم استفاده از Redis در Production

استفاده از Redis در محیط Production نیازمند توجه به چند نکته مهم است.

Redis را روی اینترنت عمومی باز نکنید

یکی از اشتباهات خطرناک این است که پورت Redis یعنی 6379 بدون محدودیت روی Internet باز شود.

اگر Laravel و Redis روی یک سرور هستند، معمولاً می‌توانید Redis را روی:


127.0.0.1

در دسترس نگه دارید.

اگر Redis روی سرور جداگانه قرار دارد، دسترسی را تا حد امکان به IP سرور Application محدود کنید.


مصرف RAM را کنترل کنید

از آنجا که Redis عمدتاً با RAM کار می‌کند، باید مصرف حافظه آن را کنترل کنید.

در Production مخصوصاً اگر Redis برای Cache، Queue و Session به‌صورت همزمان استفاده شود، نظارت روی مصرف حافظه اهمیت زیادی دارد.


Cache را با داده اصلی اشتباه نگیرید

اطلاعات مهم و دائمی را فقط به این دلیل که Redis سریع است در Redis ذخیره نکنید.

مثلاً موجودی حساب کاربر یا تراکنش مالی نباید صرفاً در Redis نگهداری شود و دیتابیس اصلی کنار گذاشته شود.

برای چنین اطلاعاتی باید دیتابیس اصلی منبع حقیقت باشد.


# خطاهای رایج Redis در Laravel

خطای Connection refused

اگر Laravel نتواند به Redis متصل شود، ممکن است با خطایی شبیه این مواجه شوید:


Connection refused

در این حالت ابتدا وضعیت Redis را بررسی کنید:


sudo systemctl status redis-server

و سپس:


redis-cli ping


Redis Server اجرا نیست

اگر این دستور:


redis-cli ping

پاسخ مناسبی ندهد، ممکن است Redis اجرا نشده باشد.

می‌توانید آن را راه‌اندازی کنید:


sudo systemctl start redis-server

و برای اجرای خودکار هنگام Boot:


sudo systemctl enable redis-server


افزونه Redis برای PHP نصب نیست

ممکن است Redis Server کاملاً سالم باشد ولی PHP Extension مربوط به Redis نصب نشده باشد.

بررسی:


php -m | grep redis

اگر چیزی نمایش داده نشد، باید Extension مناسب PHP را نصب و فعال کنید.

نکته مهم این است که Extension باید برای همان نسخه PHP مورد استفاده Laravel فعال شده باشد.


تغییر .env اما Laravel هنوز تنظیمات قبلی را دارد

اگر Configuration Cache شده باشد، تغییر .env همیشه بلافاصله در Application دیده نمی‌شود.

برای پاک کردن Configuration Cache:


php artisan config:clear

و برای ساخت مجدد Configuration Cache در Production:


php artisan config:cache


# Redis یا Database برای Cache؟

هر دو می‌توانند برای Cache استفاده شوند، اما Redis معمولاً برای پروژه‌هایی که نیاز به سرعت بالا و عملیات Cache بیشتر دارند گزینه قدرتمندتری است.

ویژگیDatabase CacheRedis
سرعتخوببسیار بالا
نیاز به RAMکمتربیشتر
نصب جداگانهمعمولاً ندارددارد
مناسب پروژه بزرگبسته به شرایطبسیار مناسب
Queueمحدودتربسیار مناسب
Counterمعمولیبسیار مناسب
Lockقابل استفادهبسیار مناسب

انتخاب مناسب به حجم پروژه و معماری آن بستگی دارد.


# آیا هر پروژه Laravel به Redis نیاز دارد؟

خیر.

برای یک پروژه کوچک ممکن است استفاده از Redis اصلاً ضروری نباشد.

مثلاً اگر یک سایت ساده با تعداد کاربران کم دارید، استفاده از Redis ممکن است پیچیدگی غیرضروری ایجاد کند.

اما وقتی پروژه به سمت موارد زیر می‌رود:

  • کاربران زیاد
  • درخواست‌های زیاد
  • Cache سنگین
  • Queue
  • Jobهای زیاد
  • چند Application Server
  • Session مشترک
  • Rate Limiting
  • پردازش‌های همزمان

استفاده از Redis ارزش بیشتری پیدا می‌کند.


# Redis در پروژه‌های Laravel چه زمانی واقعاً ارزشمند می‌شود؟

فرض کنید یک فروشگاه اینترنتی دارید و صفحه محصولات در هر دقیقه هزاران بار مشاهده می‌شود.

بدون Cache:


1000 Request

       ↓

1000 Query

       ↓

MySQL

با Redis Cache:


1000 Request

       ↓

Redis

       ↓

اکثر درخواست‌ها بدون Query

       ↓

MySQL فقط هنگام نیاز

در این شرایط Redis می‌تواند فشار روی دیتابیس را به‌شکل قابل توجهی کاهش دهد.

البته Cache کردن بدون طراحی درست می‌تواند باعث نمایش داده قدیمی شود؛ بنابراین Cache Invalidation نیز بخش مهمی از طراحی سیستم است.


# نکات مهم در طراحی Redis در Laravel

هنگام استفاده از Redis بهتر است چند اصل را رعایت کنید.

1. کلیدهای Cache را منظم انتخاب کنید

مثلاً:


products:latest

products:category:12

user:25:profile

settings:site

این کار مدیریت Cache را ساده‌تر می‌کند.

2. برای داده‌های موقت TTL تعیین کنید

به‌جای نگهداری بی‌نهایت داده:


Cache::put('temporary_data', $data, 600);

3. Cache را بعد از تغییر داده Invalidate کنید

مثلاً بعد از تغییر محصول:


Cache::forget('products:latest');

4. Redis را جایگزین دیتابیس اصلی نکنید

Redis باید در معماری مناسب خودش استفاده شود.

5. Redis را از اینترنت عمومی محافظت کنید

پورت 6379 را بدون نیاز و محدودیت در معرض اینترنت قرار ندهید.


# Redis و Laravel Horizon

اگر از Redis برای Queue در Laravel استفاده می‌کنید، ابزار مهم دیگری به نام Laravel Horizon وجود دارد.

Horizon برای مدیریت و مانیتور کردن Queueهای Redis در Laravel طراحی شده است.

با Horizon می‌توانید اطلاعاتی مانند:

  • وضعیت Workerها
  • Jobهای پردازش‌شده
  • Jobهای Failed
  • تعداد Jobها
  • زمان پردازش
  • Queueهای مختلف

را بهتر مشاهده و مدیریت کنید.

بنابراین در پروژه‌هایی که Queue و Redis نقش جدی دارند، Horizon می‌تواند ابزار بسیار ارزشمندی باشد.


# یک مثال واقعی: Cache محصولات

فرض کنیم یک فروشگاه Laravel داریم.

می‌خواهیم آخرین محصولات را Cache کنیم:


use App\Models\Product;

use Illuminate\Support\Facades\Cache;



$products = Cache::remember(

    'products:latest',

    3600,

    fn () => Product::latest()->take(20)->get()

);

بار اول:


Laravel

   ↓

Cache

   ↓

وجود ندارد

   ↓

Database

   ↓

Products

   ↓

Redis

در درخواست‌های بعدی:


Laravel

   ↓

Redis

   ↓

Products

اگر محصول جدیدی اضافه کنیم، می‌توانیم Cache را پاک کنیم:


Cache::forget('products:latest');

در درخواست بعدی، Laravel دوباره اطلاعات جدید را از دیتابیس دریافت و Cache می‌کند.


# آیا Redis فقط برای پروژه‌های خیلی بزرگ است؟

خیر.

Redis می‌تواند در پروژه‌های کوچک هم استفاده شود، اما سؤال اصلی این است که آیا ارزش پیچیدگی اضافه‌شده را دارد یا نه.

برای یک پروژه ساده:


Laravel + MySQL

ممکن است کاملاً کافی باشد.

برای یک پروژه متوسط:


Laravel + MySQL + Redis

می‌تواند انتخاب بسیار خوبی باشد.

برای یک سیستم بزرگ:


Load Balancer

      ↓

Laravel Servers

      ↓

MySQL

      ↓

Redis

      ↓

Queue Workers

      ↓

Horizon

می‌توان Redis را به بخش مهمی از معماری تبدیل کرد.


# جمع‌بندی

Redis یک ذخیره‌ساز داده بسیار سریع است که می‌تواند در کنار Laravel برای کاربردهای مختلفی استفاده شود.

مهم‌ترین کاربردهای Redis در Laravel عبارت‌اند از:

  • Cache
  • Queue
  • Session
  • Lock
  • Counter
  • Rate Limiting
  • داده‌های موقت

نکته مهم این است که Redis قرار نیست جای MySQL یا PostgreSQL را بگیرد.

دیتابیس اصلی باید مسئول نگهداری داده‌های دائمی و مهم باشد و Redis می‌تواند برای دسترسی سریع، پردازش پس‌زمینه و داده‌های موقت در کنار آن قرار بگیرد.

اگر پروژه Laravel شما در حال رشد است، یادگیری Redis یکی از مهارت‌های مهم برای ورود به مباحث Performance، Queue و معماری حرفه‌ای Laravel خواهد بود.


# سوالات متداول

Redis در Laravel چیست؟

Redis یک Data Store سریع و مبتنی بر حافظه است که Laravel می‌تواند از آن برای Cache، Queue، Session، Lock و کاربردهای دیگر استفاده کند.

آیا Redis جایگزین MySQL است؟

خیر. Redis و MySQL معمولاً نقش متفاوتی دارند. MySQL برای داده‌های اصلی و دائمی و Redis بیشتر برای داده‌های سریع، موقت و پردازش‌های خاص استفاده می‌شود.

آیا برای استفاده از Redis باید آن را روی سرور نصب کنیم؟

بله، برای استفاده واقعی از Redis باید یک Redis Server در محیط اجرای پروژه در دسترس باشد؛ مگر اینکه از یک سرویس Redis مدیریت‌شده استفاده کنید.

پورت پیش‌فرض Redis چیست؟

پورت پیش‌فرض Redis معمولاً 6379 است.

PhpRedis چیست؟

PhpRedis یک Extension برای PHP است که امکان ارتباط PHP با Redis را فراهم می‌کند.

آیا Laravel بدون Redis کار می‌کند؟

بله. Redis برای همه پروژه‌های Laravel ضروری نیست و Laravel می‌تواند بدون آن نیز به‌خوبی اجرا شود.

Redis در Laravel بیشتر برای چه کاری استفاده می‌شود؟

دو مورد بسیار رایج، Cache و Queue هستند. علاوه بر این، Redis برای Session، Lock، Counter و Rate Limiting نیز کاربرد دارد.

آیا Redis امن است؟

Redis می‌تواند به‌شکل امن استفاده شود، اما نباید بدون تنظیمات امنیتی مناسب مستقیماً روی اینترنت عمومی قرار گیرد. مخصوصاً باید دسترسی به پورت Redis محدود شود.

نظرات (0)

نظرات پس از تأیید مدیر نمایش داده می‌شوند

هنوز نظری ثبت نشده است؛ اولین نفر باشید!

مقالات مرتبط

ساخت CMS با Laravel 12؛ آموزش ساخت سیستم مدیریت محتوا از صفر

ساخت CMS با Laravel 12؛ آموزش ساخت سیستم مدیریت محتوا از صفر

۲۴ دقیقه
ساخت فروشگاه اینترنتی با Laravel 12؛ آموزش پروژه‌محور از صفر تا طراحی هسته فروشگاه

ساخت فروشگاه اینترنتی با Laravel 12؛ آموزش پروژه‌محور از صفر تا طراحی هسته فروشگاه

۲۲ دقیقه
ساخت Marketplace با Laravel؛ آموزش طراحی فروشگاه چندفروشندگی

ساخت Marketplace با Laravel؛ آموزش طراحی فروشگاه چندفروشندگی

۲۲ دقیقه
مدیریت Queueهای سنگین در Laravel؛ آموزش پردازش کارهای طولانی

مدیریت Queueهای سنگین در Laravel؛ آموزش پردازش کارهای طولانی

۲۲ دقیقه