รัน Redis บน Docker สำหรับ Cache และ Queue

Redis คืออะไร?

Redis (Remote Dictionary Server) คือ In-memory Data Store ความเร็วสูง นิยมใช้เป็น Cache Layer, Session Store, และ Message Queue ให้กับ Application

เริ่ม Redis Container

# รัน Redis พื้นฐาน
 docker run -d \
  --name redis_server \
  -p 6379:6379 \
  redis:7-alpine

# รัน Redis พร้อม Persistent Data
docker run -d \
  --name redis_server \
  -p 6379:6379 \
  -v redis_data:/data \
  redis:7-alpine redis-server --appendonly yes

Docker Compose สำหรับ Redis

version: '3.8'
services:
  redis:
    image: redis:7-alpine
    container_name: redis_server
    restart: unless-stopped
    ports:
      - "6379:6379"
    volumes:
      - redis_data:/data
    command: redis-server --appendonly yes --requirepass "yourpassword"
    healthcheck:
      test: ["CMD", "redis-cli", "--no-auth-warning", "-a", "yourpassword", "ping"]
      interval: 5s
      timeout: 3s
      retries: 3

volumes:
  redis_data:

ตัวเลือก Redis Image

Image ขนาด เหมาะ
redis:7 ใหญ่ Production ทั่วไป
redis:7-alpine เล็ก แนะนำ เบาและเร็ว
redis:7-bullseye กลาง ต้องการ Debian tools

ทดสอบ Redis

# เข้า Redis CLI
docker exec -it redis_server redis-cli

# ถ้ามี password
docker exec -it redis_server redis-cli -a yourpassword

# ทดสอบบันทึก/ดึงค่า
SET mykey "Hello Redis"
GET mykey

# ตรวจ ping
PING
# ผล: PONG

ใช้งานร่วมกับ Laravel

version: '3.8'
services:
  app:
    image: mylaravel:latest
    depends_on:
      redis:
        condition: service_healthy
      mysql:
        condition: service_healthy
    environment:
      REDIS_HOST: redis
      REDIS_PORT: 6379
      REDIS_PASSWORD: yourpassword
      CACHE_DRIVER: redis
      SESSION_DRIVER: redis
      QUEUE_DRIVER: redis

  redis:
    image: redis:7-alpine
    restart: unless-stopped
    volumes:
      - redis_data:/data
    command: redis-server --appendonly yes --requirepass yourpassword
    healthcheck:
      test: ["CMD", "redis-cli", "-a", "yourpassword", "ping"]
      interval: 5s
      timeout: 3s
      retries: 3

  mysql:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: rootpassword
      MYSQL_DATABASE: laravel_db

volumes:
  redis_data:

Redis Persistence สองรูปแบบ

Redis มีวิธีเก็บข้อมูลลงดิสก์ 2 วิธี:

  • RDB (Snapshotting) — บันทึก snapshot ทุก N วินาที เหมาะสำหรับ Cache ทั่วไป
  • AOF (Append Only File) — บันทึกทุกคำสั่ง Write เหมาะสำหรับ Session/Queue ที่ต้องการความน่าเชื่อถือสูง

เปิดใช้ AOF ด้วย flag --appendonly yes

Monitor Redis

# ดูสถิติ Redis
docker exec -it redis_server redis-cli info

# ดูการใช้งาน Memory
docker exec -it redis_server redis-cli info memory

# Monitor command แบบ real-time
docker exec -it redis_server redis-cli monitor

Redis สำหรับ Queue Worker (Laravel)

  queue:
    image: mylaravel:latest
    command: php artisan queue:work --sleep=3 --tries=3
    restart: unless-stopped
    depends_on:
      redis:
        condition: service_healthy
    environment:
      QUEUE_DRIVER: redis
      REDIS_HOST: redis

สรุป

Redis บน Docker ติดตั้งง่ายมาก ใช้ --appendonly yes เพื่อเก็บข้อมูลไว้หลัง Container เริ่มใหม่ และตั้ง password เสมอสำหรับ Production Environment