Redis คืออะไร ทำให้เว็บเร็วขึ้นยังไง (cache, session, คิวงาน)

Redis ช่วยให้เว็บเร็วขึ้นได้ 3 แบบ: cache, session และคิวงาน บทความนี้อธิบายว่าเมื่อไรควรใช้ เพิ่มบน BrewInTH ยังไง พร้อม prompt และข้อควรระวัง
เว็บที่ AI ทำให้ใช้งานได้ดีตอนมีคนเข้าไม่กี่คน แต่พอแชร์ลงกลุ่มแล้วคนเข้าพร้อมกัน หน้าแรกเริ่มโหลดช้า หน้าสินค้าค้าง หรือกดส่งฟอร์มแล้วต้องรอหลายวินาทีเพราะแอปกำลังส่งอีเมลอยู่ คุณถาม AI ว่าทำยังไงให้เร็วขึ้น แล้วได้คำตอบว่า "ใช้ Redis สิ"
Redis คืออะไร ต่างจากฐานข้อมูลที่มีอยู่ยังไง และจำเป็นจริงไหม บทความนี้อธิบายแบบไม่ต้องรู้เทคนิคลึก พร้อมวิธีเพิ่ม Redis ให้โปรเจกต์บน BrewInTH และ prompt ที่สั่ง AI ให้ใช้ Redis ได้ถูกงาน
สรุปสั้นก่อนอ่าน
⚡ Redis คือที่เก็บข้อมูลในหน่วยความจำ อ่านเขียนเร็วมาก ใช้ "ช่วย" ฐานข้อมูลหลัก ไม่ใช่ "แทน"
⚡ ใช้ได้ 3 งานหลัก: cache จำผลลัพธ์ที่คำนวณช้า, session เก็บสถานะการล็อกอิน, คิวงาน ย้ายงานช้าไปทำเบื้องหลัง
⚡ บน BrewInTH เพิ่มได้โปรเจกต์ละ 1 ตัว ไม่นับโควตาฐานข้อมูลของแพ็กเกจ และระบบใส่REDIS_URLให้แอปเอง
⚡ Redis ไม่มีการสำรองข้อมูล ข้อมูลที่หายไม่ได้ต้องอยู่ในฐานหลักเสมอ
⚡ ใช้เป็นคิวงาน ต้องให้ AI สร้าง Redis แบบ "ไม่ลบ key" ตั้งแต่ตอนสร้าง
Redis คืออะไร
ลองนึกถึงร้านกาแฟ ฐานข้อมูลหลัก (PostgreSQL หรือ MySQL) เหมือนสมุดบัญชีในตู้หลังร้าน ข้อมูลครบ ถูกต้อง เก็บถาวร แต่ต้องเดินไปเปิดทุกครั้ง ส่วน Redis เหมือนกระดานหน้าเคาน์เตอร์ จดสิ่งที่ถูกถามบ่อยไว้ให้เห็นทันที ลบแล้วเขียนใหม่ได้ตลอด
Redis เก็บข้อมูลในหน่วยความจำ (RAM) แทนดิสก์ จึงตอบได้เร็วมาก แต่พื้นที่น้อยกว่าและไม่ได้ออกแบบมาให้เป็นที่เก็บข้อมูลสำคัญ งานของมันคือ ลดงานซ้ำ ให้ฐานข้อมูลหลักและแอป
3 งานที่ Redis ทำให้เว็บเร็วขึ้น

1. Cache: จำคำตอบที่คำนวณช้า
หน้าแรกที่ต้องดึงสินค้าขายดี 20 รายการ นับยอดรีวิว และคำนวณราคาโปรโมชัน อาจใช้เวลาหลายร้อยมิลลิวินาทีต่อครั้ง ถ้ามีคนเปิด 1,000 ครั้ง ฐานข้อมูลก็ทำงานเดิม 1,000 รอบ
Cache คือคำนวณครั้งเดียวแล้วเก็บผลไว้ใน Redis พร้อมอายุ (TTL) เช่น 60 วินาที คนที่เปิดในช่วงนั้นได้คำตอบจาก Redis ทันที พอหมดอายุก็คำนวณใหม่ ข้อมูลที่แสดงอาจช้ากว่าความจริงไม่เกินอายุที่ตั้งไว้ จึงเหมาะกับข้อมูลที่ไม่ต้องตรงทุกวินาที
2. Session: สถานะการล็อกอิน
แอปที่เก็บ session ไว้ในหน่วยความจำของตัวเอง จะทำให้ทุกคนหลุดออกจากระบบทุกครั้งที่นำขึ้นเวอร์ชันใหม่หรือแอปรีสตาร์ต การเก็บ session ใน Redis ทำให้สถานะการล็อกอินอยู่แยกจากตัวแอป และอ่านได้เร็วในทุกคำขอ
3. คิวงาน: ไม่ให้ผู้ใช้รอ
ส่งอีเมลยืนยัน ย่อรูป สร้าง PDF เรียก API ภายนอก งานพวกนี้ใช้เวลาหลายวินาที ถ้าทำในคำขอเดียวกับที่ผู้ใช้กดปุ่ม ผู้ใช้ต้องนั่งรอ คิวงานคือแอปจดงานลง Redis แล้วตอบผู้ใช้ทันที ส่วนตัวทำงานเบื้องหลัง (worker) ค่อยหยิบงานไปทำ ไลบรารีที่นิยม เช่น BullMQ (Node.js), Celery หรือ rq (Python), Sidekiq (Ruby)
เว็บของคุณต้องใช้ Redis ไหม
ส่วนใหญ่ ยังไม่ต้อง เว็บเล็ก ๆ ที่คนเข้าวันละไม่กี่ร้อยคน ฐานข้อมูลหลักรับได้สบาย การเพิ่ม Redis เร็วเกินไปเพิ่มของที่ต้องดูแลโดยไม่ได้อะไร
ควรเริ่มคิดถึง Redis เมื่อ
- หน้าเดิมถูกเปิดซ้ำมาก และแต่ละครั้งต้องคำนวณหนัก
- ผู้ใช้หลุดออกจากระบบทุกครั้งที่นำขึ้นเวอร์ชันใหม่
- มีปุ่มที่กดแล้วต้องรอนาน เพราะแอปทำงานช้าในคำขอเดียวกัน
- ต้องจำกัดจำนวนครั้ง เช่น ล็อกอินผิดได้ไม่เกิน 5 ครั้งใน 10 นาที
ก่อนเพิ่ม Redis ให้ AI ดูต้นเหตุก่อน หลายครั้งหน้าเว็บช้าเพราะ query ไม่มี index หรือดึงข้อมูลเกินจำเป็น แก้ตรงนั้นได้ผลกว่าและไม่ต้องเพิ่มอะไร
หน้าแรกของเว็บนี้โหลดช้าเมื่อคนเข้าเยอะ ช่วยหาต้นเหตุก่อน:
ดู query ที่หน้าแรกเรียก มี index ครบไหม ดึงข้อมูลเกินที่ใช้ไหม เรียกซ้ำในลูปไหม
แก้ส่วนนั้นก่อน แล้วบอกว่ายังจำเป็นต้องใช้ Redis เป็น cache หรือไม่ เพราะอะไร
เพิ่ม Redis บน BrewInTH

ตอนสร้างโปรเจกต์ใหม่ ติ๊ก เพิ่ม Redis (cache / queue / session) ให้โปรเจกต์นี้ด้วย ใต้ช่องฐานข้อมูล
โปรเจกต์ที่มีอยู่แล้ว ไปที่แท็บ ฐานข้อมูล ของโปรเจกต์ ในช่อง ประเภทฐานข้อมูล เลือก Redis (cache / queue) แล้วกด สร้างฐานข้อมูล
ให้ AI สร้างให้ ถ้าใช้ coding agent ด้วยลิงก์และ token AI สร้าง Redis เองได้ และหน้า อัปโหลดแล้วขึ้นเว็บ (BETA) ก็สร้างให้อัตโนมัติเมื่อเห็นว่าโค้ดใช้ Redis เช่น ใช้ไลบรารี ioredis, redis หรือ bullmq
เมื่อพร้อม ระบบใส่ค่า REDIS_URL, REDIS_HOST, REDIS_PORT และ REDIS_PASSWORD ในแท็บ ตั้งค่าแอป ให้เอง แอปแค่อ่านค่าเหล่านี้ ไม่ต้องคัดลอกรหัสเอง
กติกาที่ควรรู้
- โปรเจกต์ละ 1 Redis เป็นของโปรเจกต์นั้นทั้งตัว ไม่ต้องตั้ง prefix กันชนกับโปรเจกต์อื่น
- ไม่นับโควตาฐานข้อมูล ของแพ็กเกจ แพ็กเกจ Free ก็เพิ่มได้คู่กับฐานหลัก 1 ฐาน
- เข้าถึงได้จากภายในโปรเจกต์เท่านั้น คือแอปที่ deploy และคำสั่งในแท็บ คำสั่ง ตัวจัดการฐานข้อมูลในคอนโซลใช้กับ Redis ไม่ได้
- ไม่มีการสำรองข้อมูล แอดออน Backups ก็ไม่สำรอง Redis เพราะเป็นข้อมูลที่แอปสร้างใหม่ได้
Cache หรือคิวงาน: ต้องเลือกตั้งแต่สร้าง

Redis ของแต่ละโปรเจกต์มีหน่วยความจำจำกัด เมื่อเต็มต้องมีกติกาว่าจะทำยังไง BrewInTH มีสองแบบ
- แบบ cache (ค่าเริ่มต้น) เมื่อเต็ม key ที่ตั้งอายุไว้ถูกลบก่อน เหมาะกับ cache และ session ข้อสำคัญคือ ให้ทุก key มีอายุ ไม่อย่างนั้น key ไม่มีอายุจะสะสมจนเต็มแล้วเขียนไม่ได้
- แบบคิวงาน (ไม่ลบ key) ไม่ลบอะไรเลย งานในคิวจึงไม่หายเงียบ ๆ ไลบรารีคิวอย่าง BullMQ, Celery, rq และ Sidekiq ต้องใช้แบบนี้
แบบที่สร้างจากคอนโซลคือแบบ cache ถ้าจะใช้ทำคิวงาน ให้ AI agent สร้าง Redis โดยระบุแบบ "ไม่ลบ key" (noeviction) ส่วนหน้าอัปโหลดแล้วขึ้นเว็บเลือกให้เองเมื่อเห็นไลบรารีคิวในโค้ด Redis ที่สร้างไปแล้วไม่ถูกเปลี่ยนแบบภายหลัง
Prompt ให้ AI ใช้ Redis ให้ถูกงาน
Cache หน้าที่เปิดบ่อย
เพิ่ม cache ด้วย Redis ให้หน้าแรกและหน้ารายการสินค้า อ่านการเชื่อมต่อจาก REDIS_URL
- ทุก key ต้องมีอายุ (TTL) หน้าแรก 60 วินาที รายการสินค้า 300 วินาที
- เมื่อแก้สินค้าในหลังบ้าน ให้ลบ cache ที่เกี่ยวข้องทันที
- ถ้าเชื่อม Redis ไม่ได้ ให้เว็บทำงานต่อโดยอ่านจากฐานข้อมูลตรง ๆ ไม่ใช่ error
- ห้ามเก็บข้อมูลที่หายไม่ได้ใน Redis
คิวงานส่งอีเมล
ย้ายการส่งอีเมลยืนยันออเดอร์ไปทำเบื้องหลังด้วยคิวงานบน Redis (REDIS_URL)
- สร้าง Redis ของโปรเจกต์แบบ noeviction ถ้ายังไม่มี
- ผู้ใช้กดยืนยันแล้วได้คำตอบทันที งานส่งอีเมลเข้าคิว ลองใหม่ 3 ครั้งเมื่อส่งไม่ผ่าน
- ให้ worker ทำงานในโปรเซสเดียวกับเว็บ (เริ่มพร้อมแอป) และบันทึกงานที่ล้มลง log
- สถานะว่าส่งแล้วหรือยัง เก็บในฐานข้อมูลหลัก ไม่ใช่ใน Redis
ในตัวอย่างนี้ worker เริ่มพร้อมเว็บในโปรเซสเดียวกัน เพราะแต่ละโปรเจกต์บน BrewInTH รันคำสั่งเริ่มแอปหนึ่งคำสั่ง
คำถามที่พบบ่อย
Redis ใช้แทนฐานข้อมูลหลักได้ไหม
ไม่ควร Redis บน BrewInTH ไม่มีการสำรองข้อมูล และแบบ cache จะลบ key เมื่อเต็ม ข้อมูลสมาชิก ออเดอร์ หรืออะไรที่หายไม่ได้ ต้องอยู่ในฐานหลักเสมอ
เพิ่ม Redis แล้วต้องจ่ายเพิ่มไหม
ไม่นับโควตาฐานข้อมูลของแพ็กเกจ และไม่มีค่าใช้จ่ายแยก โปรเจกต์หนึ่งเพิ่มได้ 1 ตัว
เปิดดูข้อมูลใน Redis จากคอนโซลได้ไหม
ตัวจัดการฐานข้อมูลในคอนโซลใช้กับ PostgreSQL, MySQL และ MariaDB เท่านั้น ถ้าต้องการดู ให้ AI เขียนสคริปต์เล็ก ๆ แล้วรันในแท็บ คำสั่ง หรือทำหน้าสถิติในหลังบ้านของแอป
ใช้ Redis แล้วเว็บจะเร็วขึ้นเสมอไหม
ไม่เสมอ ถ้าต้นเหตุคือ query ที่ไม่มี index หรือรูปใหญ่เกินไป Redis ไม่ช่วย ให้ AI หาต้นเหตุก่อนตาม prompt ข้างบน
ถ้า Redis เต็มจะเกิดอะไรขึ้น
แบบ cache: key ที่มีอายุถูกลบก่อน เว็บยังทำงานแต่ต้องคำนวณใหม่บ่อยขึ้น แบบคิวงาน: เขียนเพิ่มไม่ได้จนกว่างานในคิวจะถูกทำ ให้ AI ตรวจว่า worker ทำงานอยู่และลบงานที่เสร็จแล้วออกจากคิว
สรุป
Redis คือกระดานหน้าเคาน์เตอร์ของเว็บ จำสิ่งที่ถูกถามบ่อย เก็บสถานะการล็อกอิน และรับงานช้าไปทำเบื้องหลัง เพิ่มบน BrewInTH ได้โปรเจกต์ละ 1 ตัวโดยไม่นับโควตา ใช้ให้ถูกโหมด ให้ทุก key ของ cache มีอายุ และเก็บข้อมูลสำคัญในฐานหลักเสมอ ส่วนเว็บเล็กที่ยังไม่ช้า ยังไม่ต้องรีบเพิ่ม
