เร่ง WordPress ด้วย Redis Object Cache
WordPress เรียกข้อมูลชุดเดิมจากฐานข้อมูลซ้ำหลายครั้งในคำขอเดียว เช่น ค่าตั้งค่า ข้อมูลผู้ใช้ และเมนู โดยปกติมันเก็บผลไว้ในหน่วยความจำเฉพาะคำขอนั้นแล้วทิ้ง คำขอถัดไปจึงต้องถามฐานข้อมูลใหม่ทั้งหมด
Object Cache เก็บผลเหล่านั้นไว้ข้ามคำขอ ทำให้จำนวน Query ต่อหน้าลดลงได้มาก โดยเฉพาะบนเว็บที่มีปลั๊กอินเยอะหรือใช้ WooCommerce ซึ่งเห็นผลชัดเจนที่สุด
สิ่งที่ต้องเตรียม
- สิทธิ์ SSH บนเซิร์ฟเวอร์ หรือโฮสติ้งที่มี Redis ให้แล้ว
- สิทธิ์แก้ไฟล์
wp-config.php - หน่วยความจำว่างอย่างน้อย 256 MB สำหรับ Redis
ขั้นตอนที่ 1: วัดสถานะก่อน
ติดตั้ง Query Monitor แล้วเปิดหน้าแรก จดตัวเลขสองอย่างไว้เปรียบเทียบ จำนวน Query ทั้งหมด และเวลาที่ใช้กับฐานข้อมูล
wp eval 'global $wpdb; echo $wpdb->num_queries;'
ขั้นตอนที่ 2: ติดตั้ง Redis
sudo apt update
sudo apt install -y redis-server
sudo systemctl enable --now redis-server
redis-cli ping
ตั้งค่าให้เหมาะกับการเป็นแคช
sudo nano /etc/redis/redis.conf
bind 127.0.0.1 ::1
port 6379
maxmemory 512mb
maxmemory-policy allkeys-lru
# แคชไม่จำเป็นต้องคงทน ปิดเพื่อลดภาระดิสก์
save ""
appendonly no
sudo systemctl restart redis-server
redis-cli CONFIG GET maxmemory-policy
นโยบาย allkeys-lru สำคัญ มันทำให้ Redis ลบข้อมูลที่ไม่ได้ใช้นานที่สุดเมื่อหน่วยความจำเต็ม แทนที่จะปฏิเสธการเขียนซึ่งจะทำให้เว็บพัง
ขั้นตอนที่ 3: ติดตั้งส่วนขยายของ PHP
sudo apt install -y php8.3-redis
sudo systemctl restart php8.3-fpm
php -m | grep redis
ต้องเป็นเวอร์ชันที่ตรงกับ PHP ที่เว็บใช้จริง ตรวจด้วย php -v หากมีหลายเวอร์ชันบนเครื่องเดียวกัน
ขั้นตอนที่ 4: ตั้งค่าใน wp-config.php
nano /var/www/example.com/wp-config.php
เพิ่มก่อนบรรทัด /* That's all, stop editing! */
define('WP_REDIS_HOST', '127.0.0.1');
define('WP_REDIS_PORT', 6379);
define('WP_REDIS_TIMEOUT', 1);
define('WP_REDIS_READ_TIMEOUT', 1);
define('WP_REDIS_DATABASE', 0);
// สำคัญมากเมื่อมีหลายเว็บใช้ Redis เครื่องเดียวกัน
define('WP_CACHE_KEY_SALT', 'example.com:');
// เปิด Object Cache
define('WP_CACHE', true);
WP_CACHE_KEY_SALT คือสิ่งที่ห้ามลืม หากมีสองเว็บใช้ Redis เดียวกันโดยไม่ตั้งค่านี้ ข้อมูลจะปนกัน และผู้ใช้เว็บหนึ่งอาจเห็นเนื้อหาของอีกเว็บ
ทางเลือกที่ปลอดภัยกว่าคือแยกฐานข้อมูลของ Redis ให้แต่ละเว็บ
// เว็บที่ 1
define('WP_REDIS_DATABASE', 0);
// เว็บที่ 2
define('WP_REDIS_DATABASE', 1);
ขั้นตอนที่ 5: ติดตั้งปลั๊กอินและเปิดใช้งาน
wp plugin install redis-cache --activate
wp redis enable
wp redis status
ผลลัพธ์ควรแสดง Status: Connected หากเป็น Not connected ให้ดูขั้นตอนแก้ปัญหาท้ายคู่มือ
ตรวจว่ามีไฟล์ object-cache.php ถูกสร้างขึ้นใน wp-content/ ซึ่งเป็นตัวที่ทำให้ WordPress ใช้ Redis จริง
ls -l /var/www/example.com/wp-content/object-cache.php
ขั้นตอนที่ 6: วัดผล
# ดูสถิติของ Redis
redis-cli INFO stats | grep -E 'keyspace_hits|keyspace_misses'
redis-cli INFO memory | grep used_memory_human
redis-cli DBSIZE
คำนวณอัตราการใช้แคชสำเร็จ = hits หารด้วย (hits + misses) ค่าที่ดีคือสูงกว่า 90%
เปรียบเทียบจำนวน Query ในหน้าเดิมกับที่จดไว้ในขั้นตอนที่ 1 เว็บทั่วไปมักลดลง 30-50% และเว็บที่มีปลั๊กอินเยอะลดได้มากกว่านั้น
# ดูคีย์ที่ถูกสร้าง
redis-cli --scan --pattern 'example.com:*' | head -20
ขั้นตอนที่ 7: ล้างแคชเมื่อจำเป็น
# ล้างของเว็บนี้ผ่านปลั๊กอิน
wp cache flush
# ล้างทั้งหมดใน Redis ระวังกระทบเว็บอื่นที่ใช้ร่วมกัน
redis-cli FLUSHALL
# ล้างเฉพาะฐานข้อมูลที่เว็บนี้ใช้
redis-cli -n 0 FLUSHDB
ตั้งให้ล้างอัตโนมัติเมื่อปรับใช้โค้ดใหม่ โดยเพิ่ม wp cache flush เข้าไปในสคริปต์ปรับใช้
ขั้นตอนที่ 8: เฝ้าดูและปรับ
redis-cli INFO memory | grep -E 'used_memory_human|maxmemory_human|evicted_keys'
ค่า evicted_keys ที่สูงและเพิ่มขึ้นเรื่อย ๆ แปลว่าหน่วยความจำไม่พอ แคชจึงถูกลบก่อนที่จะได้ใช้ เพิ่ม maxmemory หรือลดจำนวนเว็บที่ใช้ร่วมกัน
redis-cli --stat
ปัญหาที่พบบ่อย
wp redis status ขึ้น Not connected
ไล่ตรวจตามลำดับ Redis ทำงานอยู่ด้วย redis-cli ping ส่วนขยาย PHP ติดตั้งแล้วด้วย php -m | grep redis และรีสตาร์ต PHP-FPM แล้วหรือยัง ขั้นตอนสุดท้ายนี้คือที่ลืมกันบ่อยที่สุด
เว็บขาวหลังเปิดใช้งาน
ลบไฟล์ object-cache.php ทิ้ง เว็บจะกลับมาทำงานทันที แล้วค่อยไล่หาสาเหตุ
rm /var/www/example.com/wp-content/object-cache.php
เห็นข้อมูลของเว็บอื่น
ไม่ได้ตั้ง WP_CACHE_KEY_SALT หรือใช้ฐานข้อมูล Redis เดียวกัน แก้ตามขั้นตอนที่ 4 แล้วล้างแคชทั้งหมด
แก้เนื้อหาแล้วหน้าเว็บยังเป็นของเดิม
Object Cache ต่างจาก Page Cache หากยังเห็นของเก่าให้ล้างทั้งสองชั้น ทั้ง wp cache flush และแคชของหน้าเว็บที่ปลั๊กอินหรือ Nginx ทำไว้
Redis กินหน่วยความจำจนเครื่องเต็ม
ตั้ง maxmemory ให้ชัดเจนตามขั้นตอนที่ 2 อย่าปล่อยว่างไว้ เพราะค่าเริ่มต้นคือไม่จำกัด
ต้องการโฮสติ้งที่มี Redis พร้อมใช้งานและปรับจูนมาให้แล้ว ติดต่อ THAI DATA CLOUD ได้ที่ https://thaidata.cloud/contact/
- Categories:
- Cloud
- Tags:
- Cloud
- Cloud Server
Related Posts
หมวดหมู่ที่น่าสนใจ
- Account Settings
- AD Server
- AI
- Alibaba Cloud
- Anti-Spam Gateway
- AWS Amazon Web Services
- Campaign
- CentOS/AlmaLinux
- Cloud
- Cloud Backup
- Cloud Communication
- Cloud Migration
- Cloud Security
- Cloud Server Management
- Cloud Solution
- Cloud Solution for Government
- Cloud Solutions by Industry
- Cloud Storage
- Cloud VPS App Plus +
- Cloud VPS DirectAdmin
- Cloud VPS Plesk
- CSR
- Cyber Security
- Cybersecurity
- Data Sovereignty
- Database Server
- DDoS
- Digital Tranformation
- Digital Transformation
- Direct Mail
- Directadmin
- Domainname
- Ecommerce
- ERP
- Generative AI
- Getting Started
- Google Cloud
- Google G Suite
- Huawei Cloud
- IT News
- Linux Server
- Managed Cloud Services
- Managed Service Provider
- Manual
- Microsoft
- Microsoft 365
- Microsoft Azure
- News
- On-premise
- Private Mail Server
- Promotion
- Recommend Solution (Enterprise)
- Server
- Sovereign Cloud
- THAI DATA CLOUD Platform
- Ubuntu
- Ubuntu
- Uncategorized
- VMware
- VPS Server
- Web Design
- Web Hosting
- Web Hosting (DirectAdmin)
- Web Hosting (Plesk)
- Web Technologies
- Windows Server
- Wordpress
- Zimbra
- เรื่องราวความประทับใจ
- โซลูชันสำหรับธุรกิจการผลิตและยานยนต์
- โซลูชันสำหรับธุรกิจการศึกษา
- โซลูชันสำหรับธุรกิจการเงิน
- โซลูชันสำหรับธุรกิจขนส่งและกระจายสินค้า
- โซลูชันสำหรับธุรกิจค้าปลีก
- โซลูชันสำหรับธุรกิจท่องเที่ยว
- โซลูชันสำหรับธุรกิจบริการสุขภาพและโรงพยาบาล
- โซลูชันสำหรับธุรกิจประกันภัย
- โซลูชันสำหรับธุรกิจพลังงานและสาธารณูปโภค
- โซลูชันสำหรับธุรกิจสื่อสารมวลชนและเอ็นเตอร์เทนเมนท์
- โซลูชันสำหรับธุรกิจอสังหาริมทรัพย์
- โซลูชันสำหรับธุรกิจเทคโนโลยี








