
گاهی سایت وردپرسی از نظر ظاهر مشکلی ندارد، اما باز شدن پیشخوان، جستوجوی محصولات یا نمایش بعضی صفحات بیشتر از حد انتظار طول میکشد. یکی از علتهای احتمالی این کندی، مراجعه مکرر وردپرس و افزونهها به پایگاه داده است. در چنین شرایطی استفاده از Redis در وردپرس میتواند به کاهش بخشی از پردازشهای تکراری کمک کند.
البته Redis راهحل تمام مشکلات سرعت سایت نیست و قرار هم نیست جای پایگاه داده اصلی وردپرس را بگیرد. در این مقاله به زبان ساده توضیح میدهیم Redis چیست، کش اشیا چگونه کار میکند، چه تفاوتی با کش معمول صفحات دارد و در چه شرایطی استفاده از آن برای یک سایت یا فروشگاه ووکامرسی منطقی است.
Redis چیست و چگونه کار میکند
Redis یک سامانه سریع برای نگهداری و بازیابی دادههاست که در کاربردهای رایج، اطلاعات را در حافظه موقت سرور یا همان رم نگه میدارد. فرض کنید وردپرس برای نمایش بخشی از سایت باید اطلاعاتی را از پایگاه داده دریافت کند. اگر آن اطلاعات مرتب موردنیاز باشد، میتوان نتیجه را برای مدتی در Redis نگه داشت تا درخواست بعدی سریعتر به همان اطلاعات دسترسی پیدا کند.
برای تصور سادهتر، پایگاه داده اصلی را مانند بایگانی کامل یک اداره در نظر بگیرید و Redis را مانند کشوی کنار دست کارمند. اطلاعات اصلی در بایگانی قرار دارند، اما موارد پرتکرار موقتاً در کشوی نزدیک نگهداری میشوند تا لازم نباشد برای هر بار استفاده سراغ بایگانی برویم.
Redis معمولاً اطلاعات را همراه با یک شناسه مشخص ذخیره میکند. وردپرس در درخواست بعدی آن شناسه را بررسی میکند. اگر داده هنوز در حافظه موجود و معتبر باشد، از همان نسخه استفاده میشود. در غیر این صورت اطلاعات دوباره از منبع اصلی خوانده و در صورت نیاز در حافظه ذخیره میشوند.
نکته مهم این است که Redis در نقش کش، محل اصلی نگهداری نوشتهها، سفارشها و اطلاعات کاربران نیست. این دادهها همچنان در پایگاه داده اصلی سایت قرار دارند. Redis صرفاً میتواند نگهداری موقت بعضی نتایج را بر عهده بگیرد.
کاربرد Redis در وردپرس و ارتباط آن با کش اشیا
مهمترین استفاده Redis در بیشتر سایتهای وردپرسی، کش اشیا است. کش اشیا یعنی نگهداری موقت اطلاعاتی که وردپرس قبلاً محاسبه یا دریافت کرده است تا در درخواستهای بعدی دوباره همان کار تکرار نشود.
خود وردپرس از ابتدا قابلیتی برای کش اشیا دارد، اما این کش در حالت پیشفرض معمولاً فقط تا پایان همان درخواست باقی میماند. یعنی وقتی بارگذاری صفحه تمام شد، اطلاعات ذخیرهشده برای درخواست بعدی حفظ نمیشوند. اگر کش اشیای ماندگار فعال شود، بخشی از دادههای مناسب میتوانند بین درخواستهای مختلف هم باقی بمانند. Redis یکی از ابزارهایی است که برای این نوع کش استفاده میشود.
Redis چگونه فشار روی پایگاه داده را کمتر میکند؟
فرض کنید افزونهای برای نمایش فهرست محصولات پرفروش، هر بار اطلاعات مشابهی را از پایگاه داده میخواند. بدون کش مناسب، این پردازش ممکن است در هر بار بارگذاری دوباره انجام شود. اما اگر نتیجهای که افزونه و وردپرس برای کش کردن آن طراحی شدهاند در Redis وجود داشته باشد، بخشی از درخواستهای بعدی بدون مراجعه دوباره به پایگاه داده پاسخ داده میشوند.
به این ترتیب، تعداد بعضی پرسوجوهای تکراری کاهش پیدا میکند و سرور فرصت بیشتری برای پردازش درخواستهای تازه دارد. میزان این صرفهجویی به نوع قالب، افزونهها، اطلاعات قابل کش و تعداد بازدیدکنندگان بستگی دارد. هر پرسوجوی پایگاه داده الزاماً کش نمیشود و برای نتیجه گرفتن، خود وردپرس و افزونهها هم باید از سازوکار کش بهدرستی استفاده کنند.
کش اشیای ماندگار یعنی چه؟
ماندگار بودن در اینجا به این معنی نیست که دادهها برای همیشه در Redis باقی میمانند. منظور این است که اطلاعات کششده میتوانند بعد از پایان یک درخواست نیز برای درخواستهای بعدی قابل استفاده باشند. اگر اعتبار آنها تمام شود، سرور ریاستارت شود یا دادهها برای آزاد کردن حافظه کنار گذاشته شوند، وردپرس میتواند در صورت نیاز اطلاعات را دوباره از منبع اصلی دریافت کند.
به همین دلیل فعالسازی کش اشیا معمولاً به معنی تغییر دائمی اطلاعات سایت نیست. با این حال تنظیمات اشتباه، ناسازگاری یک افزونه یا مشکل ارتباط با Redis میتواند اختلال ایجاد کند؛ پس باید آن را با نظارت و آزمایش فعال کرد.
تفاوت Redis با کش صفحات و کش مرورگر
یکی از اشتباههای رایج این است که Redis را با هر نوع کش وردپرس یکسان بدانیم. درحالیکه اطلاعاتی که هر روش نگه میدارد و بخشی از سایت که تحت تأثیر قرار میدهد متفاوت است.
کش صفحات نسخه آماده یک صفحه را ذخیره میکند تا برای بازدیدکننده بعدی نیازی به ساخت دوباره تمام صفحه نباشد. این روش برای نوشتههای عمومی و صفحات کمتغییر معمولاً بسیار مؤثر است. کش مرورگر هم فایلهایی مانند تصاویر، فونتها و بعضی فایلهای سایت را روی دستگاه کاربر نگه میدارد تا در مراجعه بعدی دوباره دانلود نشوند.
در مقابل، Redis در نقش کش اشیا معمولاً دادههای موردنیاز وردپرس و افزونهها را در سمت سرور نگه میدارد. این نوع کش بهویژه زمانی مفید است که ساخت صفحه باید برای هر کاربر انجام شود و نمیتوان یک نسخه آماده از کل صفحه را به همه نشان داد.
| نوع کش | چه چیزی را نگه میدارد؟ | کاربرد اصلی |
|---|---|---|
| کش اشیا با Redis | بعضی اطلاعات و نتایج پردازشهای تکراری | کمک به کاهش بار پایگاه داده و پردازش سمت سرور |
| کش صفحات | نسخه آماده صفحات قابل کش | تحویل سریعتر صفحات عمومی به بازدیدکنندگان |
| کش مرورگر | تصاویر و فایلهای قابل ذخیره روی دستگاه کاربر | کاهش دانلود دوباره فایلها در بازدیدهای بعدی |
این سه روش رقیب یکدیگر نیستند و در یک سایت میتوانند مکمل هم باشند. برای مثال، ممکن است صفحه یک مقاله عمومی از کش صفحات نمایش داده شود، اما وقتی مدیر سایت وارد پیشخوان میشود و اطلاعات اختصاصی لازم دارد، کش اشیا به پردازش سریعتر بعضی درخواستها کمک کند.
تأثیر Redis بر سرعت پیشخوان و صفحات سایت
بخش مدیریت وردپرس از قسمتهایی است که معمولاً نمیتوان آن را مانند یک صفحه عمومی بهطور کامل کش کرد. هر مدیر ممکن است اطلاعات متفاوتی ببیند و بسیاری از بخشهای پیشخوان مدام بروزرسانی میشوند. به همین دلیل اگر کندی پیشخوان واقعاً به پردازشهای تکراری پایگاه داده مربوط باشد، Redis میتواند در بعضی صفحات مدیریتی کمککننده باشد.
برای نمونه، در سایتی با تعداد زیادی نوشته، کاربر یا سفارش، افزونهها ممکن است مرتب اطلاعات مربوط به فهرستها، تنظیمات یا محاسبات مختلف را بخوانند. ذخیره موقت نتایج قابل کش میتواند زمان بعضی عملیات را کاهش دهد. البته اگر مشکل از یک افزونه معیوب، مصرف زیاد پردازنده، درخواست کند به سرویس خارجی یا کمبود منابع هاست باشد، Redis لزوماً مشکل را برطرف نمیکند.
در بخش عمومی سایت هم نتیجه به نوع صفحه وابسته است. اگر صفحه از قبل بهصورت کامل کش شده باشد، Redis ممکن است تأثیر کمتری روی همان بازدید داشته باشد؛ چون بخش بزرگی از پردازش وردپرس اصلاً اجرا نمیشود. اما در صفحاتی که باید محتوای تازه یا اطلاعات مخصوص کاربر را آماده کنند، نقش کش اشیا میتواند بیشتر باشد.
پس از فعالسازی، بهتر است زمان پاسخ بخشهای مشابه را قبل و بعد از تغییر مقایسه کنید و فقط به احساس سریعتر شدن اکتفا نکنید. اگر علاوه بر سرعت سمت سرور، میخواهید وضعیت سرعت صفحات را از نگاه بازدیدکننده هم بررسی کنید، در آموزش کار با ابزارهای گوگل در وردپرس توضیح دادهایم چگونه از گزارشهای عملکرد برای پیدا کردن مشکلات صفحات استفاده کنید.
Redis در فروشگاههای ووکامرسی چه کاربردی دارد
فروشگاه ووکامرسی معمولاً بخشهای پویای بیشتری نسبت به یک سایت محتوایی ساده دارد. فهرست سفارشها، اطلاعات محصولات، کاربران و بعضی گزارشها ممکن است مدام تغییر کنند. Redis میتواند در ذخیره موقت اطلاعاتی که ووکامرس و افزونههای سازگار برای کش در نظر گرفتهاند کمک کند و تعداد بعضی مراجعههای تکراری به دیتابیس را کاهش دهد.
این موضوع برای فروشگاههایی که سفارشها یا محصولات زیادی دارند اهمیت بیشتری پیدا میکند. برای مثال، مدیر فروشگاه ممکن است مرتب بین فهرست سفارشها، صفحه ویرایش محصول و گزارشهای مدیریتی جابهجا شود. اگر بخشی از اطلاعات پرتکرار در کش اشیا موجود باشد، لازم نیست در هر درخواست همان پردازش دوباره انجام شود.
بااینحال، کش اشیا را نباید با ذخیره کردن نسخه کامل سبد خرید یا صفحه تسویهحساب اشتباه گرفت. سبد خرید، تسویهحساب و حساب کاربری اطلاعات مخصوص هر مشتری را نشان میدهند. در تنظیمات کش صفحات باید این بخشها و دادههای وابسته به نشست کاربران درست مدیریت یا از کش عمومی مستثنا شوند تا اطلاعات یک مشتری به دیگری نمایش داده نشود. این موضوع در مستندات رسمی ووکامرس نیز تأکید شده است.
اگر فروشگاه فعال دارید، بعد از هر تغییر در تنظیمات کش، ثبت سفارش آزمایشی، تغییر تعداد محصولات سبد خرید، اعمال کد تخفیف و بازگشت از درگاه پرداخت را کنترل کنید. برای آشنایی با روند پرداخت و تشخیص نتیجه سفارش، راهنمای تنظیم درگاه پرداخت ووکامرس هم میتواند مفید باشد.
تفاوت Redis با افزونههای کش وردپرس
افزونه کش وردپرس و Redis لزوماً جای یکدیگر را نمیگیرند. Redis یک سرویس نگهداری داده است، اما افزونه کش ابزاری در وردپرس است که ممکن است کارهای متفاوتی انجام دهد؛ از ذخیره نسخه آماده صفحات گرفته تا مدیریت کش مرورگر، بهینهسازی فایلها یا اتصال سایت به سرویس کش اشیا.
به همین دلیل ممکن است یک افزونه کش همزمان از Redis برای کش اشیا استفاده کند. بعضی سرویسهای میزبانی نیز این اتصال را بدون نیاز به نصب یک افزونه جداگانه در اختیار کاربران قرار میدهند.
افزونهای مانند Redis Object Cache از مخزن رسمی وردپرس، امکان اتصال کش اشیای وردپرس به سرور Redis را فراهم میکند. اما نصب خود این افزونه به معنی راهاندازی سرور Redis نیست. اگر سرویس Redis روی هاست فعال نباشد یا اطلاعات اتصال درست نباشند، افزونه بهتنهایی نمیتواند کش اشیای ماندگار ایجاد کند.
نکته دیگر اینکه چند افزونه مختلف نباید بدون بررسی، برای مدیریت یک کش اشیا با هم رقابت کنند. در وردپرس معمولاً اتصال کش اشیای ماندگار از طریق فایل ویژهای به نام object-cache.php انجام میشود. اگر هاست یا افزونه فعلی شما از قبل این اتصال را ایجاد کرده است، پیش از نصب ابزار دیگر وضعیت آن را بررسی کنید.
چه سایتهایی به Redis نیاز دارند
Redis برای همه سایتها یک ضرورت نیست. یک وبلاگ کوچک با تعداد بازدید کم، چند افزونه سبک و کش صفحات درست ممکن است بدون Redis هم عملکرد مناسبی داشته باشد. در مقابل، سایتی که درخواستهای زیادی به پایگاه داده میفرستد یا صفحات اختصاصی فراوانی دارد، ممکن است از کش اشیای ماندگار سود بیشتری ببرد.
برای تصمیمگیری، نوع فعالیت سایت را در نظر بگیرید:
- فروشگاههای ووکامرسی متوسط و بزرگ: بهویژه اگر تعداد محصولات، سفارشها و عملیات مدیریتی زیاد باشد.
- سایتهای عضویت و آموزش آنلاین: چون بخش زیادی از صفحات برای کاربران واردشده ساخته میشوند و امکان استفاده از کش کامل صفحات محدودتر است.
- سایتهایی با بازدید همزمان زیاد: اگر گزارشها نشان دهد بخش قابلتوجهی از فشار سرور مربوط به درخواستهای تکراری پایگاه داده است.
- سایتهای دارای افزونههای سنگین: در صورتی که بررسی فنی نشان دهد این افزونهها از کش اشیا استفاده میکنند و امکان کاهش پردازش وجود دارد.
اگر در بخش ابزارها ← سلامت سایت وردپرس، پیشنهادی برای استفاده از کش اشیای ماندگار میبینید، آن را بهعنوان یک سرنخ بررسی کنید. این پیشنهاد به معنی آن نیست که حتماً باید Redis نصب کنید؛ راهکار مناسب به شرایط هاست و حجم دادههای سایت وابسته است.
پیشنیازهای استفاده از Redis در وردپرس
پیش از نصب افزونه یا تغییر تنظیمات سایت، ابتدا از شرکت هاستینگ بپرسید آیا سرور Redis برای سرویس شما فراهم است یا نه. بعضی هاستها آن را از قبل فعال کردهاند، بعضی با درخواست پشتیبانی ارائه میدهند و بعضی پلنها اصلاً امکان استفاده از آن را ندارند.
فعال بودن سرویس Redis در هاست
مهمترین پیشنیاز این است که خود سرویس Redis در دسترس باشد. اگر هاست اشتراکی دارید، ممکن است تنظیمات سرور فقط از طریق پشتیبانی قابل انجام باشد. اطلاعات اتصال مانند نشانی سرور، شیوه ارتباط و احراز هویت نیز باید از منبع معتبر دریافت شوند؛ مقدارهای پیشنهادی اینترنتی لزوماً با هاست شما یکسان نیستند.
سازگاری محیط PHP و افزونه اتصال
وردپرس برای استفاده از Redis به یک اتصال سازگار نیاز دارد. بسته به افزونه و تنظیمات سرور، این ارتباط ممکن است با افزونه PHP مربوط به Redis یا یک کتابخانه نرمافزاری انجام شود. نصب یک افزونه وردپرسی بدون بررسی این پیشنیازها کافی نیست.
بررسی کش اشیای فعال در سایت
قبل از فعال کردن ابزار جدید، مشخص کنید آیا شرکت هاست یا افزونه فعلی شما کش اشیای ماندگار را فعال کرده است یا خیر. وجود فایل wp-content/object-cache.php میتواند نشانه یکی از پیادهسازیهای کش اشیا باشد، اما برای تشخیص اینکه دقیقاً کدام سرویس فعال است، باید تنظیمات و وضعیت اتصال را هم بررسی کنید. اگر چند سایت روی یک سرور از Redis استفاده میکنند، تفکیک کلیدهای کش هر سایت نیز اهمیت دارد.
پشتیبانگیری و آزمایش عملکرد
پیش از تغییرات مهم، از سایت و پایگاه داده نسخه پشتیبان تهیه کنید و اگر امکانش وجود دارد، اتصال را ابتدا روی محیط آزمایشی بررسی کنید. پس از فعالسازی باید از صفحه وضعیت افزونه یا تنظیمات هاست مطمئن شوید Redis متصل است. سپس چند صفحه عمومی، پیشخوان و در صورت استفاده از ووکامرس، روند ثبت سفارش را آزمایش کنید.
در بررسی نتیجه، به تعداد درخواستهای پایگاه داده، زمان پاسخ بخشهای مدیریتی، میزان استفاده از حافظه و خطاهای اتصال توجه کنید. اگر مشکل تازهای ایجاد شد، ابتدا آن را با غیرفعال کردن امن اتصال کش اشیا و بررسی گزارشها تشخیص دهید. دستورهای پاکسازی کلی Redis را بدون اطلاع از تنظیمات هاست اجرا نکنید؛ ممکن است چند سایت یا سرویس از همان Redis استفاده کنند.
محدودیتهای Redis و مشکلاتی که حل نمیکند
Redis ابزار مفیدی است، اما کاربرد آن محدود و مشخص است. اگر تصاویر سایت سنگین هستند، فایلهای جاوااسکریپت اجرای طولانی دارند یا قالب درخواستهای غیرضروری زیادی به سرور میفرستد، راهکار اصلی باید در همان بخشها جستوجو شود. Redis فایلهای تصویری را فشرده نمیکند، کدهای قالب را اصلاح نمیکند و بهتنهایی مشکلات تجربه کاربری را برطرف نمیسازد.
همچنین Redis به حافظه سرور نیاز دارد. اگر منابع هاست محدود باشد یا تنظیمات نگهداری دادهها درست انتخاب نشوند، ممکن است اطلاعات کش مرتب حذف شوند و دوباره از پایگاه داده ساخته شوند. در چنین وضعیتی سود مورد انتظار کمتر میشود یا فشار اضافی به سرور وارد میشود.
از طرف دیگر، قطع ارتباط با Redis یا تنظیم اشتباه کش میتواند باعث خطا در بارگذاری بخشهایی از سایت شود. وضعیت کش باید قابل بررسی باشد و روش بازگشت امن به تنظیمات قبلی مشخص شود. از نظر امنیتی نیز سرویس Redis باید فقط برای برنامهها و سرورهای مجاز در دسترس باشد و نباید بدون کنترل دسترسی به اینترنت عمومی باز شود.
فعالسازی Redis بهتنهایی تضمینکننده افزایش رتبه گوگل نیست. اگر بهبود سرعت سمت سرور باعث بهتر شدن تجربه کاربر شود، میتواند بخشی از بهینهسازی فنی سایت باشد؛ اما برای ارزیابی واقعی باید عملکرد سایت را اندازهگیری کرد و مشکلات دیگر را نیز جداگانه برطرف کرد.
