RAJESTARY DIGITAL TECH • SECURITY • EDUCATION
دانش • فناوری • امنیت

دنیای تکنولوژی
از یادگیری شروع می‌شود

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

LEARN BUILD SECURE CREATE

کار با Redis و Caching؛ افزایش چشمگیر سرعت سایت

کار با Redis و Caching؛ افزایش چشمگیر سرعت سایت

⚡ درس ششم: کار با Redis و Caching؛ افزایش چشمگیر سرعت سایت

👋

سلام مهمان عزیز!

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

🎯 هدف این درس: آشنایی با مفهوم کشینگ (Caching)، نصب و پیکربندی Redis در PHP، ذخیره‌سازی داده‌های پرتکرار در حافظه رم و کاهش بار دیتابیس برای افزایش سرعت پاسخ‌دهی سایت.

مهمان عزیز! 👋
تا اینجا یاد گرفتی چطور کدهای تمیز بنویسی و آن‌ها را تست کنی. اما وقتی ترافیک سایت بالا می‌رود، حتی بهترین کدها هم ممکن است کند شوند. دلیل اصلی؟ دیتابیس!

هر بار که کاربری صفحه‌ای را باز می‌کند، اجرای کوئری‌های SQL زمان‌بر است. راه حل حرفه‌ای این است که نتایج پرتکرار را به جای خواندن از دیسک (دیتابیس)، در حافظه رم (RAM) نگه داریم. اینجاست که Redis وارد میدان می‌شود.

💡 چرا Redis؟

Redis یک پایگاه داده Key-Value در حافظه است که سرعت خواندن/نوشتن آن هزاران برابر سریع‌تر از MySQL است. استفاده صحیح از آن می‌تواند زمان پاسخ‌دهی API یا صفحات سایت را از چند صد میلی‌ثانیه به چند میلی‌ثانیه کاهش دهد.


1️⃣ اتصال به Redis در PHP

برای کار با Redis در PHP، باید اکستنشن php-redis روی سرور نصب باشد. سپس می‌توانیم به سادگی به آن متصل شویم.



🔌
redis_connect.php

PHP
8.x



<?php

$redis = new Redis();

try {
    // اتصال به سرور Redis (پیش‌فرض پورت 6379)
    $redis->connect('127.0.0.1', 6379);
    
    // بررسی وضعیت اتصال
    echo "✅ متصل به Redis: " . $redis->ping();
} catch (RedisException $e) {
    die("❌ خطا در اتصال: " . $e->getMessage());
}

2️⃣ الگوی Cache-Aside (کش کردن داده‌های دیتابیس)

رایج‌ترین الگو این است: اول چک کن داده در کش هست؟ اگر بود برگردان. اگر نبود، از دیتابیس بگیر، در کش ذخیره کن و بعد برگردان.




cached_query.php

PHP
8.x



<?php
$cacheKey = 'user_profile_100';

// ۱. تلاش برای دریافت از کش
$cachedData = $redis->get($cacheKey);

if ($cachedData) {
    $user = json_decode($cachedData, true);
    echo "🟢 داده از کش خوانده شد";
} else {
    // ۲. دریافت از دیتابیس (شبیه‌سازی)
    $user = ['id' => 100, 'name' => 'Younes'];
    
    // ۳. ذخیره در کش به مدت ۱ ساعت (3600 ثانیه)
    $redis->setex($cacheKey, 3600, json_encode($user));
    echo "🔴 داده از دیتابیس خوانده و کش شد";
}

3️⃣ مدیریت انقضای کش (TTL) و حذف دستی

همیشه برای داده‌های کش TTL (زمان انقضا) تعیین کن تا حافظه پر نشود. همچنین وقتی داده‌ای در دیتابیس آپدیت می‌شود، حتماً کش مربوط به آن را پاک کن.



🗑️
invalidate_cache.php

PHP
8.x



<?php
// وقتی پروفایل کاربر ۱۰۰ آپدیت شد:
$userId = 100;

// آپدیت در دیتابیس...

// حذف کش قدیمی تا درخواست بعدی داده جدید را بگیرد
$redis->del("user_profile_$userId");

echo "✅ کش کاربر $userId با موفقیت پاک شد.";

❌ خطاهای رایج در استفاده از Redis

🚫 اشتباه مرگبار:

ذخیره داده‌های حساس مثل رمز عبور یا توکن‌های بانکی در Redis بدون رمزنگاری. Redis به صورت پیش‌فرض داده‌ها را رمزنگاری نمی‌کند.

  • فراموش کردن Invalidation: اگر وقتی داده عوض می‌شود کش را پاک نکنی، کاربران داده‌های قدیمی می‌بینند.
  • کلیدهای نامشخص: از کلیدهایی مثل user:100:profile استفاده کن نه فقط user. ساختاردهی کلیدها حیاتی است.
  • عدم تعیین TTL: داده‌های بدون انقضا به مرور حافظه سرور را پر کرده و باعث کرش سرویس می‌شوند.

🏁 جمع‌بندی درس ششم

مهمان عزیز، در این درس یاد گرفتی:

  • ✅ تفاوت کشینگ در حافظه (Redis) و دیتابیس سنتی.
  • ✅ نحوه اتصال به Redis و انجام عملیات پایه (Get/Set).
  • ✅ پیاده‌سازی الگوی Cache-Aside برای کوئری‌های سنگین.
  • ✅ اهمیت تعیین TTL و استراتژی پاکسازی کش.

🎓 تمرین عملی درس ششم

یک اسکریپت بنویس که لیست ۱۰ محصول پرفروش را از دیتابیس بگیرد و به مدت ۵ دقیقه در Redis کش کند. سپس یک دکمه “بروزرسانی محصولات” بساز که با کلیک روی آن، کش مربوطه پاک شود.


🗺️ نقشه راه دوره: شما اینجا هستید!

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

درس عنوان درس آنچه یاد می‌گیرید
۱ اصول SOLID در PHP تک‌مسئولیتی، باز/بسته، جایگزینی لیسکوف، جداسازی رابط، وارونگی وابستگی
۲ الگوهای طراحی (Design Patterns) Singleton, Factory, Strategy, Observer, MVC پیشرفته
۳ برنامه‌نویسی تابعی در PHP توابع ناشناس (Closures)، Arrow Functions، Map/Filter/Reduce
۴ مدیریت وابستگی با Composer نصب پکیج‌ها، مدیریت نسخه‌ها، Autoloading (PSR-4)
۵ تست‌نویسی حرفه‌ای (TDD) آشنایی با PHPUnit، نوشتن Unit Test، Mocking
۶ کار با Redis و Caching کش کردن داده‌ها، Session Handler با Redis
۷ پردازش‌های پس‌زمینه (Queue & Jobs) استفاده از صف‌ها برای ایمیل‌زنی یا پردازش سنگین
۸ API نویسی حرفه‌ای (RESTful) استانداردهای REST، احراز هویت با JWT، Rate Limiting
۹ امنیت سایبری پیشرفته تحلیل حملات پیچیده، Secure Headers، CSP
۱۰ پروژه نهایی پیشرفته ساخت یک CMS ماژولار با قابلیت نصب پلاگین و تم

🔗 لینک‌های مرتبط

👤
نویسنده یونس رجستری
📅
تاریخ انتشار 28 مرداد 1405
🔄
آخرین بروزرسانی 28 مرداد 1405
ارسال دیدگاه

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

⚠️

هشدار مهم!

برای اتصال به درگاه پرداخت و انجام تراکنش، لطفاً VPN یا فیلترشکن خود را خاموش کنید.

⏳ ادامه در
5
ثانیه