Backend / DevOps / Infrastructure
Redis คืออะไร
Redis คืออะไร ถ้ามองจากมุม Senior Backend Engineer Redis คือระบบเก็บข้อมูลแบบ in-memory ที่มักถูกใช้เป็น cache, session store, queue backend, rate limiter, leaderboard และ real-time messaging layer สำหรับระบบที่ต้องการ latency ต่ำมาก
Redis ไม่ใช่แค่ “ตัวช่วยให้เว็บเร็วขึ้น” แต่เป็น infrastructure component ที่ถ้าออกแบบถูก จะช่วยลดโหลด database, ทำให้ระบบ scale ง่ายขึ้น และทำให้ workflow แบบ asynchronous ทำงานได้เสถียรกว่าเดิม

Redis คืออะไร และทำงานอย่างไร
Redis คือ open-source data store ที่ทำงานหลักในหน่วยความจำ หรือ RAM จึงตอบสนองคำสั่งได้เร็วมากเมื่อเทียบกับ database ที่ต้องอ่านเขียน disk เป็นหลัก Redis รองรับ data structure หลายแบบ เช่น string, list, set, hash, sorted set และ stream ทำให้ใช้งานได้มากกว่า key-value cache ธรรมดา
ในระบบ web application ทั่วไป request ที่ช้าที่สุดมักเกิดจาก database query, external API, report aggregation หรือ workflow ที่ทำงานนาน Redis ช่วยรับงานที่ต้องอ่านซ้ำบ่อยหรือทำซ้ำบ่อยออกจาก database หลัก ทำให้ระบบตอบสนองเร็วขึ้นและลดความเสี่ยงที่ database จะกลายเป็น bottleneck
คำตอบสั้นสำหรับ Featured Snippet: Redis คือ in-memory data store ที่ใช้เก็บข้อมูลชั่วคราวหรือข้อมูลที่ต้องเข้าถึงเร็วมาก เช่น cache, session, queue, pub/sub และ leaderboard เพื่อเพิ่ม performance และ scalability ของระบบ backend
Redis เป็น Database หรือ Cache
Redis เป็นได้ทั้ง database และ cache แต่ใน production ส่วนใหญ่ Redis มักถูกใช้เป็น cache หรือ fast data layer มากกว่าเป็น source of truth หลัก เหตุผลคือ Redis เก่งเรื่อง latency ต่ำและ throughput สูง ส่วน relational database เช่น PostgreSQL หรือ MySQL เก่งเรื่อง transaction, relationship, constraint และ durable storage
ถ้าใช้ Redis เป็น cache ข้อมูลต้นฉบับยังอยู่ใน database หลัก เช่น PostgreSQL, MySQL หรือ MongoDB เมื่อ cache หาย ระบบยังดึงข้อมูลจาก database กลับมาเติมใหม่ได้ แต่ถ้าใช้ Redis เป็น database หลัก ต้องออกแบบ persistence, replication, backup และ disaster recovery จริงจังมากขึ้น
In-memory Database คืออะไร
In-memory database คือระบบที่เก็บข้อมูลหลักไว้ใน RAM แทนที่จะพึ่ง disk เป็นหลัก RAM เร็วกว่า disk มาก จึงเหมาะกับงานที่ต้องตอบสนองในระดับ millisecond หรือน้อยกว่า แต่ RAM มีราคาสูงกว่าและข้อมูลหายได้เมื่อ process หยุดถ้าไม่ได้เปิด persistence
Redis ทำงานเร็วได้อย่างไร
Redis เร็วเพราะอ่านเขียนข้อมูลใน RAM, ใช้ data structure ที่ optimized, มี command ที่ทำงานแบบ atomic หลายคำสั่ง และลด overhead จาก query planner แบบ relational database อย่างไรก็ตาม Redis ไม่ได้แปลว่าเร็วเสมอถ้าใช้ผิด เช่นเก็บ value ใหญ่มาก, ใช้คำสั่ง scan หนัก ๆ, มี hot key หรือ network latency สูง
Redis ใช้ทำอะไรได้บ้าง
Caching
Use case ที่พบบ่อยที่สุดคือ cache ข้อมูลที่ถูกอ่านซ้ำ เช่น product detail, homepage block, permission ของ user, API response หรือ report summary การทำ cache ที่ดีต้องกำหนด TTL, invalidation strategy และ fallback เมื่อ cache miss ให้ชัด
Session Store
ระบบที่มีหลาย server instance สามารถเก็บ session ไว้ใน Redis เพื่อให้ทุก instance อ่าน session เดียวกันได้ เหมาะกับ web application ที่ scale แบบ horizontal
Queue System
Redis ใช้เป็น backend ให้ queue library เช่น BullMQ ได้ดี งานอย่างส่งอีเมล, generate report, sync data, image processing หรือ AI workflow ควรเข้าคิวแทนการทำใน HTTP request
Real-time Notification
Redis Pub/Sub และ Stream ช่วยส่ง event ระหว่าง service ได้ เช่นแจ้งเตือน order status, dashboard update หรือระบบ chat ภายในองค์กร
Rate Limiting
Redis เหมาะกับ rate limiting เพราะเพิ่ม counter พร้อม TTL ได้เร็ว เช่นจำกัด login attempt, API request ต่อ user หรือ request ต่อ IP
Leaderboard
Sorted Set ของ Redis เหมาะกับ leaderboard เพราะจัดอันดับด้วย score ได้เร็ว เช่นคะแนนเกม, top seller, ranking หรือ priority list
Pub/Sub
Pub/Sub เหมาะกับ event ที่ไม่ต้องการ persistence ระยะยาว ถ้าต้องการ replay หรือ consumer group ควรพิจารณา Redis Stream หรือ message broker เฉพาะทาง
Redis กับ Database ต่างกันอย่างไร
| หัวข้อ | Redis | Database ปกติ |
|---|---|---|
| จุดแข็ง | เร็วมาก เหมาะกับ cache, queue, real-time | เก็บข้อมูลถาวร query ซับซ้อน transaction ดี |
| ตำแหน่งในระบบ | Fast data layer | Source of truth |
| Latency | ต่ำมากเมื่อออกแบบถูก | ขึ้นกับ query, index และ disk I/O |
| Data model | Key + data structures | Table, document หรือ graph |
| ความเสี่ยง | memory เต็ม, cache stale, key design ผิด | slow query, lock, index ผิด, connection เต็ม |
Redis vs Memcached ต่างกันอย่างไร
Memcached เป็น distributed memory cache ที่เรียบง่ายและเร็ว เหมาะกับ key-value cache ตรงไปตรงมา ส่วน Redis มี data structure หลากหลายกว่า รองรับ persistence, replication, pub/sub, stream และ use case อย่าง queue หรือ leaderboard ได้ดีกว่า ถ้าระบบต้องการแค่ cache ง่ายมาก Memcached ยังเป็นตัวเลือกได้ แต่ถ้าต้องการ cache ร่วมกับ queue หรือ real-time Redis จะยืดหยุ่นกว่า
Redis Data Structure มีอะไรบ้าง
String
String เป็นชนิดพื้นฐาน ใช้เก็บ token, counter, serialized JSON หรือ HTML fragment เหมาะกับ cache ทั่วไป
List
List เก็บข้อมูลแบบเรียงลำดับ ใช้กับ queue แบบง่ายได้ แต่ถ้าเป็น production queue แนะนำใช้ library ที่จัดการ retry และ lock ให้ครบ
Set
Set เก็บข้อมูลไม่ซ้ำ เหมาะกับ membership เช่น user ที่ online หรือ feature flag ที่เปิดให้บางกลุ่ม
Hash
Hash เหมาะกับ object ขนาดเล็ก เช่น user profile, product summary หรือ config ที่มี field หลายค่า
Sorted Set
Sorted Set เก็บ member พร้อม score เหมาะกับ ranking, leaderboard, priority queue และ time-based ordering
Stream
Stream เหมาะกับ event log ที่ต้องการ consumer group และ replay บางส่วน ใช้ใน event-driven system ขนาดกลางได้ แต่ถ้า workload ใหญ่มากควรเทียบกับ Kafka หรือ broker เฉพาะทาง
Redis Cache สำคัญกับ Web Application อย่างไร
Redis Cache สำคัญเพราะช่วยลดงานซ้ำของ database และ external service ตัวอย่างเช่นหน้า product detail อาจมี query หลายตาราง ถ้าทุก request ยิง database ตรง ระบบจะช้าและ database รับภาระหนัก แต่ถ้า cache ผลลัพธ์ไว้ 1-5 นาที ระบบจะรองรับ traffic ได้มากขึ้นโดยไม่ต้องเพิ่ม database server ทันที
Redis ช่วยเรื่อง Performance อย่างไร
Redis ช่วยลด latency ใน path ที่ถูกเรียกบ่อย ลดจำนวน query ไป database ลดงาน CPU ในการ aggregate ซ้ำ และทำให้ background job แยกออกจาก request-response path ได้ ผลลัพธ์คือ user เห็นหน้าเว็บเร็วขึ้น ส่วน backend มี headroom สำหรับ traffic spike มากขึ้น
Redis ใช้กับ Queue System ได้อย่างไร
Queue System คือวิธีแยกงานที่ไม่จำเป็นต้องเสร็จทันทีออกจาก HTTP request เช่นส่งอีเมลหรือสร้างรายงาน Redis ถูกใช้เก็บ job, state, retry count และ lock ของ worker ได้ เมื่อ worker ว่างจึงดึง job ไปทำต่อ
BullMQ และ Redis ทำงานร่วมกันอย่างไร
BullMQ ใช้ Redis เป็น storage และ coordination layer สำหรับ queue ใน Node.js รองรับ delayed job, retry, backoff, concurrency และ worker หลายตัว เหมาะกับระบบ backend ที่ต้องประมวลผลงานจำนวนมากแบบ asynchronous
import { Queue, Worker } from "bullmq";
import IORedis from "ioredis";
const connection = new IORedis(process.env.REDIS_URL!, {
maxRetriesPerRequest: null
});
export const emailQueue = new Queue("email", { connection });
await emailQueue.add("send-welcome-email", {
userId: "u_123",
email: "customer@example.com"
});
new Worker("email", async job => {
await sendWelcomeEmail(job.data.email);
}, { connection, concurrency: 5 });Redis ใช้กับ Real-time System อย่างไร
Redis ช่วย real-time system ผ่าน Pub/Sub, Stream, shared state และ fast lookup เช่น WebSocket server หลาย instance ใช้ Redis เพื่อ broadcast event ให้ client ที่อยู่คนละ instance หรือใช้เก็บ presence ว่า user ไหน online อยู่
Redis ใช้กับ AI และ RAG ได้ไหม
Redis ใช้กับ AI workflow ได้ เช่น cache embedding result, queue งาน indexing, rate limit API call, เก็บ conversation state ชั่วคราว หรือช่วยประสานงาน worker ที่ทำ RAG pipeline แต่ไม่ควรใช้แทน vector database หรือ document store โดยไม่ประเมิน requirement เรื่อง search และ persistence
Redis ใช้กับ Docker และ Kubernetes อย่างไร
Redis ใช้งานง่ายใน Docker สำหรับ dev/test แต่ใน production ต้องคิดเรื่อง volume, password, network, resource limit, backup และ high availability บน Kubernetes ควรใช้ StatefulSet หรือ Redis operator/managed service มากกว่าการ deploy แบบ Deployment ธรรมดาในระบบที่ต้องการ persistence จริง
docker run --name redis-dev -p 6379:6379 -d redis:7-alpine
redis-cli ping
redis-cli set page:home "cached html" EX 60
redis-cli get page:homeservices:
redis:
image: redis:7-alpine
command: redis-server --appendonly yes --requirepass ${REDIS_PASSWORD}
ports:
- "6379:6379"
volumes:
- redis_data:/data
volumes:
redis_data:apiVersion: apps/v1
kind: Deployment
metadata:
name: redis
spec:
replicas: 1
selector:
matchLabels:
app: redis
template:
metadata:
labels:
app: redis
spec:
containers:
- name: redis
image: redis:7-alpine
ports:
- containerPort: 6379
resources:
requests:
memory: "256Mi"
cpu: "100m"Redis Architecture เบื้องต้น

Architecture พื้นฐานของ Redis ในระบบธุรกิจมักประกอบด้วย web application, Redis cache, database หลัก, queue worker และ monitoring การวาง Redis ไว้ผิดตำแหน่ง เช่นให้เป็นที่เก็บข้อมูลถาวรโดยไม่มี backup หรือให้ทุก feature ใช้ Redis key เดียวกัน อาจทำให้ระบบเร็วช่วงแรกแต่ดูแลยากในระยะยาว
Redis Persistence คืออะไร
Redis มี persistence หลัก เช่น RDB snapshot และ AOF append-only file RDB เหมาะกับ snapshot เป็นช่วง ส่วน AOF เก็บ command log เพื่อกู้ข้อมูลละเอียดกว่า แต่มี overhead มากกว่า การเลือกต้องดูว่ารับ data loss ได้แค่ไหนและ restore time ต้องเร็วเพียงใด
Redis Replication คืออะไร
Replication คือการมี replica เพื่ออ่านข้อมูลหรือรองรับ failover บางกรณี แต่ replica ไม่ใช่ backup แท้จริง เพราะถ้าข้อมูลผิดถูก replicate ตามไปด้วย ระบบ production ต้องมี backup strategy แยกต่างหาก
Redis Cluster คืออะไร
Redis Cluster แบ่ง key space ออกเป็น slot และกระจายไปหลาย node เพื่อ scale memory และ throughput ได้ แต่เพิ่มความซับซ้อนเรื่อง key design, multi-key operation และ operational monitoring จึงควรใช้เมื่อจำเป็นจริง ไม่ใช่เริ่มจาก cluster เสมอ
ตัวอย่าง Redis Connection และ Cache
import Redis from "ioredis";
export const redis = new Redis(process.env.REDIS_URL ?? "redis://localhost:6379", {
maxRetriesPerRequest: 3,
enableReadyCheck: true,
connectTimeout: 5000
});
redis.on("connect", () => console.log("Redis connected"));
redis.on("error", error => console.error("Redis error", error));async function getProduct(productId) {
const cacheKey = `product:${productId}`;
const cached = await redis.get(cacheKey);
if (cached) {
return JSON.parse(cached);
}
const product = await db.product.findUnique({ where: { id: productId } });
await redis.set(cacheKey, JSON.stringify(product), "EX", 300);
return product;
}ปัญหาที่ Developer มักเจอเวลาใช้ Redis
Memory Leak
Redis memory leak ในเชิงระบบมักเกิดจาก key ไม่มี TTL หรือ value ใหญ่ขึ้นเรื่อย ๆ ควรมี naming convention, TTL policy และ monitoring memory usage เสมอ
Cache Miss
Cache miss ไม่ใช่เรื่องผิด แต่ถ้า miss พร้อมกันจำนวนมากหลัง cache expire อาจเกิด cache stampede ทำให้ database โดนถล่ม ควรใช้ jitter TTL, lock หรือ stale-while-revalidate
Data Expiration
TTL สั้นเกินไปทำให้ miss บ่อย TTL ยาวเกินไปทำให้ข้อมูลเก่า ต้องออกแบบตาม data freshness ของแต่ละ feature
Hot Key Problem
Hot key คือ key ที่ถูกอ่านหรือเขียนหนักผิดปกติ เช่นหน้า homepage หรือ global counter ควรใช้ local cache, sharding pattern หรือกระจาย workload เมื่อจำเป็น
Connection Problem
ระบบ Node.js หรือ PHP ที่สร้าง connection ใหม่ทุก request อาจทำให้ Redis connection เต็ม ควรใช้ connection pool หรือ singleton client ให้เหมาะกับ runtime
Persistence Issue
เปิด persistence ผิดแบบอาจทำให้ disk I/O สูงหรือ restore ช้า ต้องทดสอบ backup/restore จริง ไม่ใช่แค่เปิด config แล้วจบ
Redis เหมาะกับระบบแบบไหน
Redis เหมาะกับระบบที่มี traffic อ่านซ้ำสูง, session จำนวนมาก, background job, real-time notification, API rate limit หรือ workload ที่ต้องการ latency ต่ำ เช่น e-commerce, SaaS, CRM, booking system, learning platform และระบบ AI automation
Checklist ก่อนใช้ Redis ใน Production
- กำหนดว่า Redis เป็น cache หรือ source of truth
- ตั้ง TTL policy สำหรับ key แต่ละกลุ่ม
- ตั้ง memory limit และ eviction policy
- เปิด authentication และจำกัด network access
- มี monitoring เช่น memory, ops/sec, hit rate, latency และ connected clients
- มี backup และ restore test ถ้าใช้ persistence
- ออกแบบ key naming convention
- ป้องกัน cache stampede และ hot key
- แยก Redis instance สำหรับ cache กับ queue ถ้า workload ใหญ่
- มี runbook สำหรับ incident เช่น memory เต็มหรือ Redis down
แนวทางออกแบบระบบ Cache ที่ดี
ระบบ cache ที่ดีไม่ได้เริ่มจาก “cache ทุกอย่าง” แต่เริ่มจากหา bottleneck ที่วัดได้ เช่น query ช้า, endpoint ถูกเรียกซ้ำ หรือ external API แพง จากนั้นกำหนด cache key, TTL, invalidation, fallback และ monitoring ให้ครบ ถ้าไม่มี metric จะไม่รู้ว่า cache ช่วยจริงหรือแค่เพิ่ม complexity
สรุป Redis คืออะไร
Redis คืออะไร สรุปคือ Redis เป็น in-memory data store ที่ช่วยให้ backend ทำงานเร็วขึ้น รองรับ use case ตั้งแต่ cache, session, queue, rate limit, leaderboard ไปจนถึง real-time event แต่ Redis ไม่ใช่ตัวแทน database หลักเสมอไป การใช้ Redis ให้ดีต้องเข้าใจ data lifecycle, memory, persistence, replication และ operational risk
ในมุม Software House การใช้ Redis ให้คุ้มค่าคือใช้เพื่อแก้ bottleneck จริงของระบบ ไม่ใช่ใส่เพราะเป็นเทคโนโลยียอดนิยม เมื่อออกแบบถูก Redis จะเป็นชั้น infrastructure ที่ช่วยให้ web application รองรับผู้ใช้มากขึ้นและตอบสนองได้เร็วขึ้นอย่างวัดผลได้
FAQ
Redis คือ in-memory data store ที่ใช้เก็บข้อมูลที่ต้องเข้าถึงเร็ว เช่น cache, session, queue, counter, pub/sub และ leaderboard
Redis เป็น database ได้ แต่ในระบบส่วนใหญ่มักใช้เป็น cache หรือ fast data layer ข้าง database หลักมากกว่า
Redis เก็บข้อมูลใน RAM และเน้นความเร็ว ส่วน MySQL เป็น relational database ที่เหมาะกับข้อมูลถาวร transaction และ query ที่มี relationship ชัดเจน
ใช้ได้ดีมาก ผ่าน client เช่น ioredis หรือ node-redis และมักใช้ร่วมกับ BullMQ สำหรับ queue system
ได้ โดยเฉพาะเมื่อใช้ library เช่น BullMQ ที่จัดการ job, retry, delay และ worker concurrency ให้ครบกว่า queue ที่เขียนเอง
ช่วยได้ถ้าใช้ cache กับข้อมูลที่ถูกอ่านซ้ำหรือ query หนัก แต่ต้องมี TTL และ invalidation strategy ที่ดี
ไม่จำเป็นสำหรับทุกระบบ แต่จำเป็นมากขึ้นเมื่อระบบมี traffic สูง ต้องใช้ session shared storage, queue, real-time notification หรือ rate limiting
