ติดตั้งและตั้งค่า Redis Cache บน VPS เพิ่มความเร็วเว็บ
Redis เป็น in-memory data store ที่เร็วที่สุดตัวหนึ่ง ใช้เป็น cache ลด database query, เก็บ session, queue หรือ pub/sub ได้ทุกแอป ติดตั้งง่ายบน VPS และเห็นผลทันทีในแง่ความเร็ว
ติดตั้ง Redis
apt update
apt install redis-server -y
ตั้งค่า Redis (/etc/redis/redis.conf)
ผูก Redis กับ Localhost เท่านั้น
bind 127.0.0.1 ::1
ไม่ควร expose Redis ออก internet โดยตรงเด็ดขาด
ตั้ง maxmemory และ Eviction Policy
maxmemory 256mb
maxmemory-policy allkeys-lru
allkeys-lru คือ Least Recently Used — ลบ key ที่ไม่ค่อยใช้ออกเมื่อ memory เต็ม เหมาะสำหรับ cache
ตั้ง Password
requirepass YourStrongPasswordHere
เลือก Persistence Mode
# สำหรับ cache ล้วนๆ ปิด persistence เพื่อประหยัด disk I/O
save ""
# ถ้าต้องการ persistence ใช้ AOF
appendonly yes
Restart และ Enable
systemctl restart redis-server
systemctl enable redis-server
ทดสอบ Redis
redis-cli -a YourStrongPasswordHere ping
# ตอบ: PONG
redis-cli -a YourStrongPasswordHere
127.0.0.1:6379> SET testkey "hello"
127.0.0.1:6379> GET testkey
# ตอบ: "hello"
ใช้ Redis กับ WordPress
ติดตั้ง plugin Redis Object Cache แล้วเพิ่มใน wp-config.php:
define('WP_REDIS_HOST', '127.0.0.1');
define('WP_REDIS_PORT', 6379);
define('WP_REDIS_PASSWORD', 'YourStrongPasswordHere');
define('WP_REDIS_DATABASE', 0);
ใช้ Redis เป็น PHP Session Store
# ติดตั้ง PHP Redis extension
apt install php-redis -y
# แก้ใน php.ini
session.save_handler = redis
session.save_path = "tcp://127.0.0.1:6379?auth=YourStrongPasswordHere"
Monitor Redis
# ดู stats
redis-cli -a password INFO stats
# ดู key จำนวนและ memory
redis-cli -a password INFO keyspace
redis-cli -a password INFO memory
# Monitor command realtime (debug)
redis-cli -a password MONITOR
used_memory_human และ maxmemory_human ใน INFO memory ถ้า hit rate ต่ำกว่า 80% แสดงว่า TTL สั้นเกินไปหรือ cache ไม่ match pattern การใช้งานสรุป
Redis ติดตั้งไม่เกิน 5 นาที แต่เพิ่ม performance ให้แอปได้อย่างมีนัยสำคัญ โดยเฉพาะเว็บที่มี database query ซ้ำๆ ในทุก request
ตรวจสอบว่า Redis ทำงานถูกต้อง
# ตรวจสถานะ service
systemctl status redis-server
# ทดสอบ connection
redis-cli -a YourPassword ping
# ต้องได้ PONG
# ดู hit rate ของ cache
redis-cli -a YourPassword INFO stats | grep -E "keyspace_hits|keyspace_misses"
# hit_rate = hits / (hits + misses) * 100 — ควรสูงกว่า 80%
# ดู memory usage
redis-cli -a YourPassword INFO memory | grep used_memory_human
แก้ปัญหาที่พบบ่อย
Error: "NOAUTH Authentication required"
ตั้ง password ใน redis.conf แล้ว แต่ลืมส่ง auth ใน command หรือใน app config:
# WordPress: ตรวจ wp-config.php มี WP_REDIS_PASSWORD ครบไหม
grep WP_REDIS /var/www/html/wp-config.php
# ส่ง password กับ redis-cli
redis-cli -a YourStrongPassword ping
Error: "OOM command not allowed when used memory > 'maxmemory'"
Redis memory เต็ม eviction policy ไม่ได้ตั้งหรือตั้งเป็น noeviction:
# ตรวจ policy ปัจจุบัน
redis-cli -a password CONFIG GET maxmemory-policy
# เปลี่ยนโดยไม่ต้อง restart
redis-cli -a password CONFIG SET maxmemory-policy allkeys-lru
# เพิ่ม maxmemory ถ้า RAM เหลือ
redis-cli -a password CONFIG SET maxmemory 512mb
Redis service start ไม่ขึ้น
# ดู error log
journalctl -u redis-server --no-pager -n 30
cat /var/log/redis/redis-server.log
# ปัญหาบ่อยคือ /run/redis permission ผิด
mkdir -p /run/redis
chown redis:redis /run/redis
systemctl start redis-server
WordPress ไม่ใช้ Redis cache แม้จะ connect สำเร็จ
object-cache.php drop-in ยังไม่ถูก install:
# ผ่าน WP-CLI
wp redis enable --path=/var/www/html
# หรือใน WordPress admin: Settings → Redis → Enable Object Cache
ต้องการ flush cache ทั้งหมด
# Flush ทุก key (ใช้ระวัง)
redis-cli -a password FLUSHALL
# Flush เฉพาะ database 0
redis-cli -a password -n 0 FLUSHDB
คำถามที่พบบ่อย
Redis กับ Memcached ต่างกันอย่างไร ควรใช้ตัวไหน?
Redis รองรับ data structure หลากหลาย (string, hash, list, set, sorted set) มี persistence option และ pub/sub ส่วน Memcached เร็วกว่าเล็กน้อยสำหรับ pure key-value cache ปัจจุบัน Redis เป็นตัวเลือกหลักสำหรับ use case ส่วนใหญ่
ควรตั้ง maxmemory เท่าไร?
แนะนำไม่เกิน 25–30% ของ RAM ทั้งหมด เช่น VPS 4 GB ตั้ง maxmemory 1 GB เหลือ RAM ให้ OS, database และ application ทำงานได้สบาย
Redis ปลอดภัยไหมถ้า bind กับ 0.0.0.0?
ไม่ควรทำเด็ดขาด Redis ไม่ได้ออกแบบมาให้ expose ออก internet โดยตรง ให้ bind กับ 127.0.0.1 เท่านั้น ถ้าต้องการ access จาก server อื่นใช้ SSH tunnel หรือ private network