
Redis คือ In-memory Data Store ที่ทำงานเร็วมากเหมาะสำหรับ Object Caching ของ WordPress เมื่อเปิดใช้ Redis Object Cache WordPress จะเก็บผลลัพธ์ของ Database Query ไว้ใน Redis แทนการ Query Database ซ้ำทุกครั้ง ลดเวลาตอบสนองของหน้าเว็บได้อย่างเห็นผล
Redis Object Cache คืออะไร ทำงานอย่างไร
ปกติ WordPress Query Database ทุกครั้งที่ Load หน้า เมื่อ Traffic สูงจะทำให้ Database รับโหลดหนักและ Response ช้า Redis Object Cache ทำหน้าที่เก็บ Query Result ไว้ใน RAM เมื่อมี Request ซ้ำ WordPress ดึงจาก Redis แทน ทำให้ Database ต้องทำงานน้อยลงมาก
Redis vs Memcached: ทั้งสองเป็น In-memory Cache แต่ Redis รองรับ Data Structure ที่หลากหลายกว่า (List, Hash, Set, Sorted Set) มี Persistence และ Pub/Sub ในตัว สำหรับ WordPress ทั้งสองทำงานได้ดี แต่ Redis เป็นที่นิยมมากกว่าใน 2026
ติดตั้ง Redis บน Ubuntu 22.04
ขั้นที่ 1: ติดตั้ง Redis
sudo apt update
sudo apt install -y redis-server
# ตรวจสอบ version
redis-server --version
# เปิดใช้งานและ Start
sudo systemctl enable redis-server
sudo systemctl start redis-server
sudo systemctl status redis-server
ขั้นที่ 2: ตั้งค่า Redis ใน redis.conf
sudo nano /etc/redis/redis.conf
แก้ไขค่าต่อไปนี้:
# Bind เฉพาะ localhost (ห้าม expose ออก internet)
bind 127.0.0.1
# กำหนด maxmemory (แนะนำ 20-25% ของ RAM ทั้งหมด)
maxmemory 256mb
# Policy เมื่อ Memory เต็ม: ลบ key ที่หมดอายุก่อน แล้วค่อยลบ key เก่าสุด
maxmemory-policy allkeys-lru
# เพิ่มรหัสผ่าน (ถ้าต้องการ)
requirepass YourStrongRedisPassword
ขั้นที่ 3: Restart Redis
sudo systemctl restart redis-server
ขั้นที่ 4: ทดสอบ Redis
# เชื่อมต่อ Redis CLI
redis-cli
# ถ้ามีรหัสผ่าน
redis-cli -a YourStrongRedisPassword
# ทดสอบ SET/GET
SET testkey "hello redis"
GET testkey
# ผลลัพธ์: "hello redis"
# ดูข้อมูลสถิติ
INFO memory
INFO stats
Redis Object Cache ช่วยลดค่าใช้จ่าย VPS ได้อย่างไร
หลายคนมองว่าการติดตั้ง Redis เป็นเรื่องยากหรือไม่คุ้มค่า แต่ในความเป็นจริง Redis ช่วยประหยัดค่าใช้จ่าย VPS ได้อย่างมีนัยสำคัญ เมื่อ WordPress ไม่ต้อง Query Database ซ้ำๆ MySQL ใช้ CPU และ RAM น้อยลงมาก ทำให้ VPS ขนาดเล็กรองรับ Traffic ได้มากกว่าเดิมโดยไม่ต้องอัพเกรด Spec
ตัวอย่างเช่น ไซต์ WordPress ที่มี Plugin จำนวนมาก เช่น WooCommerce, Elementor, WPML หรือ Membership Plugin มักสร้าง Database Query หลักร้อยครั้งต่อการโหลดหน้าหนึ่งครั้ง เมื่อเปิด Redis Object Cache Query เหล่านั้นจะถูกตอบจาก RAM แทน ทำให้ Response Time ลดลงอย่างเห็นผล และ MySQL มีทรัพยากรเหลือสำหรับ Query ที่จำเป็นจริงๆ
เปรียบเทียบ Performance ก่อนและหลัง Redis
| ตัวชี้วัด | ก่อนใช้ Redis | หลังใช้ Redis |
|---|---|---|
| DB Queries ต่อหน้า | 50–200 ครั้ง | 5–20 ครั้ง (Query ใหม่เท่านั้น) |
| TTFB บน Dynamic Page | 300–800ms | 100–300ms |
| MySQL CPU Usage | สูง (spike บ่อย) | ต่ำ (คงที่) |
| รองรับ Concurrent Users | น้อยกว่า | สูงขึ้นอย่างเห็นผล |
Use Case ที่ได้ประโยชน์จาก Redis มากที่สุด
- WooCommerce Store: Product Query, Cart Session, และ Customer Data ถูก Cache ทำให้หน้า Shop โหลดเร็วขึ้นมาก
- Membership Site: ผู้ใช้ที่ Login อยู่ไม่ได้รับ Page Cache แต่ Redis Object Cache ช่วย Dynamic Content ได้โดยตรง
- Multisite WordPress: แต่ละ Site สามารถใช้ Redis Prefix ต่างกันบน Redis Instance เดียวกัน
- ไซต์ที่มี Plugin เยอะ: Plugin แต่ละตัวมักเพิ่ม DB Query Redis ลดผลกระทบของ Plugin หนักๆ
ความปลอดภัยของ Redis บน VPS
Redis ที่ Expose ออก Internet โดยไม่มีการป้องกันเป็นความเสี่ยงด้าน Security ที่ร้ายแรง ในปี 2026 ยังพบการโจมตี Redis ที่ไม่ได้ป้องกันเป็นประจำ ต้องตั้งค่าต่อไปนี้ให้ครบก่อน Deploy Production
ตรวจสอบ Firewall ด้วย UFW
# ตรวจสอบว่า Port 6379 ไม่ได้ถูก expose ออก internet
sudo ufw status
# ถ้ายังไม่ได้ตั้ง Firewall ให้รันคำสั่งเหล่านี้
sudo ufw allow ssh
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
# ไม่ต้อง allow Port 6379 เพราะ Redis ควร bind อยู่ที่ localhost เท่านั้น
sudo ufw enable
ตรวจสอบ Binding ของ Redis
# ตรวจสอบว่า Redis Listen บน localhost เท่านั้น
sudo ss -tlnp | grep 6379
# ควรเห็น: 127.0.0.1:6379 (ไม่ใช่ 0.0.0.0:6379)
# ถ้าเห็น 0.0.0.0:6379 ให้แก้ไข /etc/redis/redis.conf ทันที
# เพิ่มหรือแก้บรรทัดนี้:
# bind 127.0.0.1
ตั้งค่า Protected Mode
# ใน /etc/redis/redis.conf เพิ่มหรือตรวจสอบบรรทัดนี้
protected-mode yes
# ถ้าต้องการ Rename คำสั่งอันตราย เช่น FLUSHALL, CONFIG
# (เพื่อกัน Script Kiddie ที่ได้ access)
rename-command FLUSHALL ""
rename-command CONFIG "CONFIG_SECRET_CMD"
Security Checklist: ก่อน Deploy Production ตรวจสอบ 4 ข้อ: (1) bind 127.0.0.1 เท่านั้น (2) requirepass ตั้งแล้ว (3) UFW บล็อก Port 6379 จากภายนอก (4) protected-mode yes รัน redis-cli ping จากเครื่องภายนอกต้องได้ Connection Refused
ตั้งค่า Redis Persistence สำหรับ Data ที่สำคัญ
โดย Default Redis ใช้ RDB (Redis Database Backup) เซฟ Snapshot ลง Disk เป็นระยะ ถ้า VPS รีสตาร์ท Redis Object Cache จะสูญหายชั่วคราวแต่ WordPress จะ Query Database ตามปกติและสร้าง Cache ใหม่เอง สำหรับ Object Cache นั้นการสูญหายชั่วคราวไม่ใช่ปัญหา แต่ถ้าใช้ Redis เก็บ Session Data ควรพิจารณา Persistence
ตรวจสอบ RDB Snapshot Settings
# ใน /etc/redis/redis.conf ค่า default ของ RDB
save 3600 1 # บันทึกถ้ามี 1 key เปลี่ยนใน 1 ชม.
save 300 100 # บันทึกถ้ามี 100 key เปลี่ยนใน 5 นาที
save 60 10000 # บันทึกถ้ามี 10000 key เปลี่ยนใน 1 นาที
# สำหรับ Object Cache เท่านั้น สามารถปิด Persistence ได้เพื่อประสิทธิภาพ
# save ""
AOF (Append Only File) สำหรับ Data ที่ต้องการความปลอดภัยสูง
# เปิด AOF ใน redis.conf (เหมาะกับ Session Store ไม่ใช่ Object Cache)
appendonly yes
appendfsync everysec # บันทึกทุกวินาที (สมดุลระหว่าง Performance กับ Durability)
# ตรวจสอบขนาด AOF file
redis-cli -a YourPassword DEBUG JMAP
ls -lh /var/lib/redis/appendonly.aof
แนะนำสำหรับ WordPress: Object Cache ใช้ Redis แบบ In-memory ไม่ต้อง Persistence ตั้ง save "" ได้เพื่อประสิทธิภาพสูงสุด WordPress จะสร้าง Cache ใหม่เองหลัง Restart โดยอัตโนมัติ
ติดตั้ง PHP Redis Extension
# ติดตั้ง php-redis extension (เปลี่ยน 8.3 เป็น version ที่ใช้)
sudo apt install -y php8.3-redis
# หรือถ้าใช้ pecl
sudo pecl install redis
# Restart PHP-FPM
sudo systemctl restart php8.3-fpm
เชื่อมต่อ WordPress กับ Redis ด้วย WP Redis Plugin
ติดตั้ง Plugin
ไปที่ WordPress Admin → Plugins → Add New → ค้นหา "WP Redis" โดย Automattic → ติดตั้งและ Activate หรือติดตั้งผ่าน WP-CLI:
wp plugin install wp-redis --activate
แก้ไข wp-config.php
sudo nano /var/www/html/wp-config.php
เพิ่มบรรทัดนี้ก่อน /* That's all, stop editing! */:
// Redis Object Cache
define('WP_REDIS_HOST', '127.0.0.1');
define('WP_REDIS_PORT', 6379);
define('WP_REDIS_PASSWORD', 'YourStrongRedisPassword'); // ถ้าตั้ง password
define('WP_REDIS_DATABASE', 0);
define('WP_REDIS_PREFIX', 'wp_'); // ถ้ามี WordPress หลายตัวบน Redis เดียวกัน
Copy object-cache.php
cp /var/www/html/wp-content/plugins/wp-redis/object-cache.php \
/var/www/html/wp-content/object-cache.php
ตรวจสอบว่า Cache ทำงาน
ไปที่ WordPress Admin → Settings → WP Redis จะเห็นสถานะ "Connected" และจำนวน Cache Hits/Misses
# ตรวจสอบผ่าน redis-cli
redis-cli -a YourStrongRedisPassword INFO keyspace
# ควรเห็น db0: keys=XXX แสดงว่ามีข้อมูลถูก Cache แล้ว
ผลลัพธ์ที่ควรเห็น: หลังเปิด Redis Object Cache Time to First Byte (TTFB) ควรลดลงอย่างน้อย 30-50% ในหน้าที่มี Database Query หนัก เช่น หน้า Category, Search หรือ WooCommerce Shop
Monitor และ Tune Redis
# ดู real-time commands
redis-cli -a pass MONITOR
# ดูสถิติ cache hit rate
redis-cli -a pass INFO stats | grep -E "keyspace_hits|keyspace_misses"
# คำนวณ hit rate
# hit_rate = keyspace_hits / (keyspace_hits + keyspace_misses) * 100
# ควรสูงกว่า 90% ถ้าต่ำกว่าอาจต้องเพิ่ม maxmemory
การแก้ไขปัญหา Redis ที่พบบ่อยบน VPS
แม้ Redis จะมีชื่อเสียงด้านความเสถียร แต่ก็มีปัญหาที่พบได้บ้างโดยเฉพาะในสภาพแวดล้อม Production บน VPS ต่อไปนี้คือปัญหาที่พบบ่อยและวิธีแก้ไข
ปัญหาที่ 1: Redis ใช้ Memory เกิน maxmemory
เมื่อ Redis ถึง maxmemory ที่ตั้งไว้ จะเริ่มขับ Key ออกตาม Policy ที่กำหนด ถ้าขับ Key ที่กำลังใช้งานอยู่ออกบ่อยๆ Cache Hit Rate จะลดลง วิธีตรวจสอบ:
# ดูสถิติ Memory ของ Redis
redis-cli -a YourPassword INFO memory | grep -E "used_memory_human|maxmemory_human|mem_fragmentation_ratio"
# ดูว่า Redis ขับ Key ออกไปกี่ครั้งแล้ว
redis-cli -a YourPassword INFO stats | grep evicted_keys
# ถ้าตัวเลขสูงและเพิ่มขึ้นเรื่อยๆ ให้เพิ่ม maxmemory
ปัญหาที่ 2: WordPress ไม่เชื่อมต่อ Redis
ถ้า WordPress Admin แสดง "Disconnected" ใน WP Redis Settings ให้ตรวจสอบตามลำดับ:
# 1. ตรวจสอบว่า Redis กำลังทำงาน
sudo systemctl status redis-server
# 2. ทดสอบการเชื่อมต่อด้วย credential ที่ใช้ใน wp-config.php
redis-cli -h 127.0.0.1 -p 6379 -a YourStrongRedisPassword ping
# ควรได้: PONG
# 3. ตรวจสอบว่า PHP Redis Extension โหลดแล้ว
php -m | grep -i redis
# ถ้าไม่มีผลลัพธ์ ต้องติดตั้ง php-redis และ restart PHP-FPM
# 4. ตรวจสอบว่า object-cache.php มีอยู่
ls -la /var/www/html/wp-content/object-cache.php
ปัญหาที่ 3: Redis ใช้ CPU สูงผิดปกติ
# ดูคำสั่งที่กำลังรันอยู่ใน Redis
redis-cli -a YourPassword MONITOR
# กด Ctrl+C เพื่อหยุด
# ดู Slow Query Log
redis-cli -a YourPassword SLOWLOG GET 10
# ถ้ามี Query ช้า อาจเกิดจาก KEYS * หรือ SORT บน Large Dataset
ห้ามใช้ KEYS * บน Production: คำสั่ง KEYS * บน Redis ที่มีข้อมูลเยอะจะ Block Redis Server ทั้งหมดชั่วคราว ใช้ SCAN แทนเสมอสำหรับการ Search Key แบบ Pattern Matching บน Production
Redis กับ Cache Strategy ที่ครบวงจรบน VPS
Redis Object Cache เป็นเพียงส่วนหนึ่งของ Caching Stack ที่สมบูรณ์สำหรับ WordPress บน VPS การใช้ Redis ร่วมกับ Layer อื่นจะให้ผลลัพธ์ที่ดีที่สุด
| Cache Layer | Tool | ประโยชน์ |
|---|---|---|
| Object Cache | Redis + WP Redis | ลด DB Query ซ้ำ ช่วย Dynamic Content |
| Page Cache | WP Super Cache / W3 Total Cache | เซฟ HTML สำเร็จ ลด PHP Processing |
| Opcode Cache | PHP OPcache (built-in) | Cache PHP Bytecode ลด Compile Time |
| Nginx FastCGI Cache | Nginx fastcgi_cache | Cache ที่ Web Server Layer เร็วสุด |
ตรวจสอบ PHP OPcache ให้เปิดใช้งาน
# ตรวจสอบว่า OPcache เปิดอยู่
php -r "var_dump(function_exists('opcache_get_status'));"
# ดูสถิติ OPcache
php -r "print_r(opcache_get_status());"
# ถ้าต้องการเปิด OPcache ใน php.ini
# opcache.enable=1
# opcache.memory_consumption=128
# opcache.max_accelerated_files=10000
PHP OPcache กับ Redis ทำงานร่วมกันได้อย่างไร
PHP OPcache เก็บ Bytecode ของไฟล์ PHP ไว้ใน Memory หลังจาก Compile ครั้งแรก ในขณะที่ Redis Object Cache เก็บ Query Result ของ Database ทั้งสองทำงานคนละ Layer และไม่ขัดแย้งกัน การใช้ทั้งสองร่วมกันทำให้ Request แต่ละครั้งประหยัดทั้งเวลา Compile PHP และเวลา Query Database ซึ่งเป็นประโยชน์สูงสุดสำหรับ WordPress บน VPS ที่มี Traffic สูง
สำหรับ WordPress ที่ใช้ Nginx + PHP-FPM + Redis + OPcache พร้อมกัน แต่ละ Request จะผ่านขั้นตอน: Nginx รับ Request → PHP-FPM ประมวลผล (Bytecode มาจาก OPcache) → WordPress ดึง Data จาก Redis แทน MySQL → ส่ง Response กลับ ในกรณีที่ใช้ Nginx Page Cache ด้วย บางหน้าจะไม่ต้องผ่าน PHP เลย ทำให้ Response เร็วที่สุด
ตรวจสอบ Transient Cache ของ WordPress
# ตรวจสอบ Transient ที่ค้างอยู่ใน Database (ก่อนมี Redis)
# เมื่อใช้ Redis แล้ว Transient จะถูกเก็บใน Redis แทน DB อัตโนมัติ
redis-cli -a YourStrongRedisPassword KEYS "wp_transient_*" | wc -l
# ถ้าตัวเลขสูง แสดงว่า Plugin ใช้ Transient เยอะ — Redis ช่วยได้มาก
WordPress บน VPS เร็วกว่า Shared Hosting มาก
VPS Linux Ubuntu เริ่มต้น 500 บาท/เดือน Full Root Access ติดตั้ง Redis, Nginx, PHP-FPM และ WordPress Optimization Stack ได้เต็มรูปแบบ
ดูแพ็กเกจ VPS