افزونه وردپرس Redis Object Cache میتواند عملکرد وبسایت وردپرس را افزایش دهد، اما هر وبسایت کندی نمیتواند از آن بهره مند شود. در این مطلب بررسی خواهیم کرد که چه زمانی Redis برای وردپرس خوب است و چه زمانی خوب نیست، چگونه کار می کند و چگونه آن را در سایت های وردپرس خود نصب کنید.
Redis یک ذخیرهسازی key value متنباز است که میتواند هم بهعنوان ذخیرهسازی درون حافظه (in-memory store) و هم بهعنوان کش (cache) عمل کند. وردپرس از این آبجکت کش (Object Cache) برای صرفه جویی در زمان با ذخیره نتایج جستجوی دیتابیس در حافظه استفاده میکند. آبجکت کش با کش HTML تفاوت دارد. افزونههای وردپرس مانند WP-Super-Cache، WP-Rocket و غیره افزونههای کش HTML هستند، در حالی که Object Cache محتوای دیتابیس را ذخیره میکند. در حالی که افزونههای Page Cache روی کش کردن صفحه HTML کار میکنند تا در زمان PHP process صرفهجویی کنند، Object Cache دادههای کش را برای صرفهجویی در کوئریهای دیتابیس استفاده میکند.
چگونه Object Cache با وردپرس کار میکند؟
آبجکت کش نتایج جستجوی دیتابیس را که درخواست شدهاند ذخیره میکند. دفعه بعد که کاربر آنها را درخواست کرد، سریعتر به آنها سرویس میدهد. به این ترتیب، دیتابیس نیازی به کوئری مجدد ندارد.
وردپرس همچنین دارای Object Cache داخلی با کلاس WP_Object_Cache است. مشکل این است که این آبجکت کش در وردپرس به طور پیشفرض پایدار نیست؛ بدان معناکه آبجکت کش تنها تا زمانی که فرآیند تولید صفحه طول میکشد ذخیره میشوند که در عمل کاملا ناکارآمد است مگر اینکه مکانیسم ذخیره سازی دائمی مانند Redis Object Cache را نصب کنید.
آیا به Redis در وردپرس نیاز دارم؟
اگر یکی از شرایط زیر را داشته باشید، شما کاندیدای استفاده از Object Redis Cache هستید:
- اگر نمیتوانید محتوای سایت وردپرس خود را کش کنید زیرا بسته به کاربر تغییر میکند. در این موارد، افزونههای HTML cache نمیتوانند استفاده شوند.
- سایت به دلیل بارگذاری شدید در دیتابیس کند است. با Object Caching، دیتابیس را میتوان خیلی کمتر مورد پرس و جو و کوئری قرار داد. علاوه بر این، بازیابی محتوا از Redis بسیار سریعتر از ارسال کوئری به دیتابیس است.
- از منابع سرور نیز کارآمدتر استفاده میشود. اگر به دنبال افزایش مقیاس وبسایت وردپرس خود هستید، این یک فاکتور مهم است.
- دیتابیس به اندازه کافی سریع است، اما من در لحظات خاصی از کاربر همزمان زیادی دارم.
آیا Redis سرعت وردپرس را افزایش میدهد؟
نه همیشه! در ادامه لیستی از تمام الزامات مورد نیاز برای استفاده از Redis Object Cache آمده است:
- افزونه HTML static page cache نمیتواند استفاده شود یا تمام صفحات شما را پوشش نمیدهد. این امر زمانی رایج است که سایت وردپرس بسته به کاربر تعامل داشته باشد یا تغییر کند. مانند وبسایتهای فروشگاه آنلاین با استفاده از ووکامرس، سایتهای عضویت، وبسایتهای شبکههای اجتماعی یا انجمنهایی که از BBPress، BuddyPress و غیره استفاده میکنند.
- زمان تولید صفحه زیاد است (به عنوان مثال بیش از ۰.۵ ثانیه) یا میتواند به دلیل همزمانی کاربران زیاد باشد.
- زمان اختصاص داده شده به کوئریهای دیتابیس در مقایسه با زمان تولید صفحه زیاد است، یا مقدار جستجوها زیاد است (به عنوان مثال بیش از ۲۰۰ کوئری) بنابراین همزمانی نهایی کاربران میتواند بر عملکرد تاثیر بگذارد.
چگونه زمان تولید صفحه وردپرس را تجزیه و تحلیل کنیم
برای اینکه بتوانید Page Generation Time را در هر صفحه از سایت وردپرس خود تجزیه و تحلیل کنید و منابع مشکلات عملکرد را شناسایی کنید، افزونه رایگان Query Monitor توسط John Blackbourn را نصب کنید.
این افزونه علاوه بر زمان تولید صفحه نشان میدهد که چه تعداد کوئری دیتابیس برای تولید صفحه انجام و چقدر زمان صرف شده است.
در مثال زیر، میتوانیم معیارهای کلیدی را هنگام اجرا بدون Redis Object Cache شناسایی کنیم:
- زمان تولید صفحه: ۰.۲۹۲۶ ثانیه
- کوئریهای دیتابیس: مجموع: ۱۳۲
- آبجکت کش: افزونه نصب نشده است
آیا Redis Object Cache زمان ایجاد صفحه را کاهش میدهد؟
در این مورد ۱۳۲ کوئری دیتابیس داریم که به نظر زیاد است، اما زمان مورد نیاز سرور ما برای حل این کوئریها بسیار کم است: ۰.۰۱۹۳ ثانیه. در چنین حالتی Redis Cache تنها میتواند به ما در کاهش آن ۰.۰۱۹۳ ثانیه کمک کند. اگر همزمانی بالا نباشد ارزشش را ندارد.
اگر زمان کوئری دیتابیس کم باشد، Redis Object Cache تنها در موارد همزمانی بالا میتواند به ما کمک کند.
آیا Redis Object Cache در زمان ذخیره درخواست های دیتابیس صرفه جویی میکند
بیایید بگوییم که همزمانی بالایی داریم و میخواهیم کوئریها را از Redis ارائه دهیم، و از تنگناها در پایگاه داده خود اجتناب کنیم:
در ادامه اجازه دهید زمان تولید صفحه را هنگام اجرای Redis Object Cache بررسی کنیم.
نتایج با Redis Object Cache نشان داده شده در بالا به ما میگوید:
- زمان تولید صفحه: ۰.۲۷۳۶ ثانیه
- کوئریهای دیتابیس: مجموع: ۳۱
- آبجکت کش : ۹۹.۳ درصد بازدید
زمان تولید صفحه را به کمتر از ۲۰ میلی ثانیه کاهش دادهایم. این مقدار بسیار کم است که نمیتوان آن را در نظر گرفت، اما کوئریهای دیتابیس از ۱۳۲ به ۳۱ کاهش داده شده و این همان چیزی است که در صورت همزمانی بالا به ما کمک میکند.
در این مورد، Redis Object Cache تنها در صورت همزمانی کاربر به ما کمک میکند. تاثیر در Page Generation Time کم است، اما Redis Object Cache با کاهش بار دیتابیس به خوبی کار میکند.
با خرید هاست وردپرس کانفیگ حرفهای و نظارت بر سرور به صورت پیوسته توسط تیم فنی پارسدِو انجام خواهد شد.
چگونه کش Redis را در وردپرس پیاده سازی کنم؟
برای استفاده از Redis برای کش کردن اشیا در سایتهای وردپرس، باید با نصب و پیکربندی یک سرویس Redis شروع کنید. سپس باید افزونه PHP Redis و به دنبال آن افزونه Redis Object Cache را نصب کنید.
مراحل نصب گام به گام Redis Object Cache برای وردپرس
- سرویس Redis را نصب و پیکربندی کنید
اگر توزیع اوبونتو را اجرا می کنید این دستور را دنبال کنید:
sudo apt install redis
از طری مسیر /etc/redis/redis.conf ردیس (Redis) را پیکربندی کنید تا با فعال کردن اتصال سوکت، با بیشترین سرعت ممکن اجرا شود:
# Unix socket.
#
# Specify the path for the Unix socket that will be used to listen for
# incoming connections. There is no default, so Redis will not listen
# on a unix socket when not specified.
# unixsocket /var/run/redis/redis.sock unixsocketperm 777
همچنین memory limit ، خط مشی حافظه را تنظیم کنید و Redis را طوری پیکربندی کنید که در حافظه کار کند و روی دیسک ذخیره نشود (این کش است، ما نیازی به ماندگاری نداریم).
می توانید آن را ریستارت کنید تا اجازه دهید همه چیز با استفاده از آن پیکربندی شود
sudo systemctl restart redis.service
وضعیت Redis را با این دستور بررسی کنید:
sudo systemctl status redis
- ماژول PHP redis را نصب کنید
اگر یک توزیع اوبونتو یا دبیان را اجرا میکنید، میتوانید ماژول Redis را با یک نصب ساده apt-get نصب کنید.
apt-get update
apt-get install php7.4-redis
- پلاگین Object Cache را نصب کنید
وارد پیشخوان وردپرس خود شوید و یک افزونه جدید اضافه کنید. به عنوان مثال، Redis را جستجو کنید و این پلاگین Redis Object Cache خاص را انتخاب کنید.
افزونه را نصب و فعال کنید. سپس به تنظیمات Redis در منوی پیشخوان خود بروید.
اکنون باید روی دکمه Enable Object Cache کلیک کنید. این افزونه Redis را با استفاده از تنظیمات پیشفرض تنظیم میکند.
- برای عملکرد بهتر، اتصال سوکت به Redis را فعال کنید
اگر سرویس Redis خود را در سرور در کنار وردپرس خود اجرا میکنید، کارآمدترین روش اتصال سوکت یونیکس است.
برای پیکربندی افزونه Redis Object Cache برای اتصال از طریق سوکت، باید دو ثابت را در wp-config.php خود تعریف کنید.
define( 'WP_REDIS_PATH', '/var/run/redis/redis.sock' );
define( 'WP_REDIS_SCHEME', 'unix' );
توجه: مسیر WP_REDIS_PATH را تغییر دهید تا به سوکت redis واقعی شما اشاره کند.
استفاده از پلاگین Redis Object Cache
پلاگین Redis Object Cache توسط Till Krüss بسیار ساده است. از پنل مدیریت وردپرس خود، می توانید Metric stats را باز کنید:
این افزونه همچنین به شما این امکان را میدهد که کش را از قسمت نمای کلی پاک کنید:
توجه: اگر به دنبال یک پلاگین حافظه پنهان شی Redis کلاس تجاری هستید، یک نسخه Pro از این افزونه Object Cache Pro وجود دارد.
خالی کردن کش ردیس (Flush Cache)
معمولا ما نیازی به flush آبجکت کش Redis نداریم. با این حال، گاهی اوقات زمانی که عملیات Back-end به درستی کار نمیکند، مانند زمانی که یک افزونه وردپرس را فعال یا غیرفعال میکنید، این تنها گزینه است.
گزینه Flush Cache فقط برای آبجکت کش و تمرین خوبی برای Flush یا Purge تمام کشهای دیگر HTML مانند WP-Super-Cache است.
جمع بندی
آبجکت کش با Redis میتواند سرعت تولید صفحه سایت وردپرس شما را هنگامی که گلوگاه دیتابیس یا همزمانی کاربر بالا در صفحات داینامیک دارید، افزایش دهد.