← กลับไปที่คู่มือการใช้งาน
การปลุกแบบเรียลไทม์

ทำให้ข้อมูลตอบสนองเร็วขึ้นด้วย Redis (ทางเลือก)

ข้อมูลภายนอกที่กลยุทธ์ใช้จะเข้ามาด้วยการ **ดึงเป็นรอบ** โดยค่าเริ่มต้น เมื่อเพิ่ม Redis เอเจนต์จะตื่นทันทีที่มีค่าใหม่และอ่านซ้ำทันที ตัวค่าจริงมาจากการคิวรีฐานข้อมูลเสมอ — Redis ส่งเพียงสัญญาณว่า "มีของใหม่เข้ามา"

ก่อนอื่น: อาจไม่จำเป็นต้องทำ — ถึงไม่มี Redis ข้อมูลก็ยังถูกต้อง ต่างกันแค่ความหน่วง ถ้าเป็นตัวชี้วัดรายวันหรือรายชั่วโมง การดึงเป็นรอบก็เพียงพอ เอกสารนี้จำเป็นเฉพาะกลยุทธ์ที่ต้องตอบสนองในระดับวินาที และถ้าพลาดสัญญาณ รอบถัดไปก็ตามทัน

1. ระบบของคุณเป็นแบบไหน

ฝั่งที่ส่ง (ตัวเก็บข้อมูล) และฝั่งที่รับ (เอเจนต์) ต้องเข้าถึง Redis ตัวเดียวกันได้ ขอแค่เงื่อนไขนี้ผ่าน จะจัดวางแบบไหนก็ได้

A

อยู่เครื่องเดียวกันทั้งหมด — ติดตั้งเอง (ง่ายที่สุด ฟรี)

ถ้าตัวเก็บข้อมูลกับเอเจนต์อยู่เซิร์ฟเวอร์เดียวกัน แค่ติดตั้ง Redis บนเครื่องนั้นก็จบ ไม่ผ่านเครือข่ายจึงเร็วที่สุด และที่อยู่ก็ไม่ออกไปนอกเครื่อง ค่าเริ่มต้นฟังเฉพาะ 127.0.0.1 อยู่แล้ว จึงไม่เปิดสู่ภายนอกแม้ไม่ตั้งรหัสผ่าน

sudo apt install -y redis-server
sudo systemctl enable --now redis-server
redis-cli ping        # PONG
ที่อยู่ที่จะใส่ในสล็อต:redis://127.0.0.1:6379
B

มีหลายเครื่องของตัวเอง — วางไว้เครื่องเดียวแล้วต่อผ่านเครือข่ายภายใน

ถ้าตัวเก็บข้อมูลกับเอเจนต์อยู่คนละเซิร์ฟเวอร์ ให้รัน Redis ไว้เครื่องเดียวแล้วให้ที่เหลือต่อเข้ามา ถ้าอยู่คลาวด์และรีเจียนเดียวกัน การต่อผ่าน IP ภายในปลอดภัยที่สุด ★ การ bind 0.0.0.0 โดยไม่ตั้งรหัสผ่านจะถูกสแกนเจอเร็วมาก ถ้าจำเป็นต้องผ่านเครือข่ายสาธารณะ ให้ใช้ครบสามอย่าง: รหัสผ่านยาว ไฟร์วอลล์ และ TLS (rediss://)

# /etc/redis/redis.conf
bind 10.0.0.5 127.0.0.1      # ★ 0.0.0.0 금지
requirepass <긴-무작위-비밀번호>
# 방화벽: 내 서버 IP 만 6379 허용
ที่อยู่ที่จะใส่ในสล็อต:redis://:비밀번호@10.0.0.5:6379
C

เครือข่ายแยกกัน — ใช้บริการจัดการฟรี

เมื่อตัวเก็บข้อมูลกับเอเจนต์อยู่คนละที่ที่ติดต่อกันไม่ได้ (คนละคลาวด์ ที่บ้าน ที่ทำงาน) ให้วาง Redis แบบจัดการไว้ตรงกลาง การปลุกแทบไม่ใช้พื้นที่เก็บ โควตาฟรีจึงมักเหลือเฟือ

ที่อยู่ที่จะใส่ในสล็อต:rediss://…
ตรวจสอบเมื่อกันยายน 2026 — ผู้ให้บริการเปลี่ยนโควตาได้ โปรดยืนยันที่ลิงก์
Upstash256MB · 월 50만 명령เริ่มได้โดยไม่ต้องใช้บัตร ส่งนาทีละครั้งราว 40,000–50,000 คำสั่งต่อเดือน ยังเหลือมาก แต่ไม่ประกาศเพดานการเชื่อมต่อพร้อมกัน และ SUBSCRIBE ใช้ได้ผ่านที่อยู่ TCP (redis://) ไม่ใช่ REST
Aiven1GB · 단일 노드ใช้ Valkey ซึ่งเป็นฟอร์กที่เข้ากันได้กับ Redis pub/sub เป็นคำสั่งหลัก การปลุกจึงไม่ได้รับผลกระทบ
Redis Cloud30MBขนาดดูน้อย แต่การปลุกไม่ใช้พื้นที่เก็บ 30MB จึงไม่เกี่ยวในกรณีนี้
D

คนอื่นเป็นผู้ส่ง — ทีมหรือองค์กรส่งเอง

ไม่จำเป็นต้องใช้ตัวเก็บข้อมูลของเรา โปรแกรมใดก็ส่งได้ ขอเพียงตรงตามชื่อช่องและรูปแบบเพย์โหลด ช่องคือ sori:data:v1: ตามด้วยชื่อตาราง (ตัดสคีมาออก) เพย์โหลดเป็นเพียงคำใบ้ตำแหน่ง ถึงใส่ค่าไปก็ไม่ถูกใช้ — ฝั่งที่ตื่นจะรันคิวรีของตัวเองใหม่

PUBLISH sori:data:v1:fear_greed '{"v":1,"last":1757462400000,"n":1}'

2. ลำดับการเปิด — ต้องตรงกันทั้งสามจุด

ถ้าขาดจุดใดจุดหนึ่งจะกลับไปดึงเป็นรอบ **โดยไม่มีข้อผิดพลาด** ค่ายังถูกต้องและแค่ช้าลง จึงพลาดได้ง่ายว่ามันไม่เคยเปิดเลย

1

ฝั่งส่ง — บอกที่อยู่ให้ตัวเก็บข้อมูล

ตัวเก็บข้อมูลจะส่งหลังจากเพิ่มแถวใหม่ ถ้าไม่มีที่อยู่ก็จะข้ามการส่งและระบุไว้ในผลการรัน

# ~/soritrading-fetchers/.env
SORI_WAKE_REDIS_URL=redis://127.0.0.1:6379
2

ฝั่งรับ — บันทึกสล็อตไว้ที่เอเจนต์

ใส่ชื่อเรียกและที่อยู่บนเว็บ แล้วกด [ทดสอบการเชื่อมต่อ] เครื่องนั้นจะตอบทันทีว่าเชื่อมต่อได้จริงหรือไม่ ที่อยู่ถูกเก็บไว้ในเครื่องนั้นเท่านั้น ไม่ถูกส่งมายังเซิร์ฟเวอร์ของเราและไม่ปรากฏในบันทึก

3

การประกาศ — ตารางไหนฟังผ่านสล็อตไหน

ด้านล่างของหน้าเดียวกัน ที่ [การประกาศชุดข้อมูล] เปลี่ยนโหมดเป็น redis แล้วกรอกชื่อสล็อตและชื่อตาราง ที่ต้องมีชื่อตารางเพราะชื่อช่องมาจากชื่อตาราง

mode: redis   ·   redisAlias: main   ·   tableName: fear_greed
ยืนยันว่าเปิดแล้ว — ป้ายข้างการประกาศที่ขึ้นว่า 'เรียลไทม์ · Redis(ชื่อเรียก)' แปลว่าเปิดแล้ว ถ้าขึ้นว่า 'ดึงเป็นรอบ' จะมีเหตุผลว่าขาดอะไรกำกับอยู่ตรงนั้น
สิ่งที่ควรรู้
  • Redis เป็นเพียงการปลุก ถึงพลาดข้อความ (เช่นระหว่างเอเจนต์รีสตาร์ต) ก็ไม่ทำให้ค่าผิด เพราะรอบถัดไปจะตามทัน
  • ไม่สามารถ subscribe ผ่าน REST endpoint ของผู้ให้บริการเซิร์ฟเวอร์เลสได้ ให้ใช้ที่อยู่ TCP ที่ขึ้นต้นด้วย redis:// หรือ rediss://
  • ถ้าโควตาฟรีตัดการเชื่อมต่อที่ไม่มีการใช้งาน อาจกลายเป็นดึงเป็นรอบอย่างเงียบ ๆ เอเจนต์จะตรวจพบและเชื่อมต่อใหม่ แต่ถ้าหลุดบ่อยแสดงว่าโควตานั้นไม่เหมาะกับงานนี้
  • ชื่อสล็อตกับชื่อเรียกฐานข้อมูลเป็นคนละเนมสเปซ แม้ทั้งคู่ชื่อ 'main' ก็ยังหมายถึงคนละเซิร์ฟเวอร์
  • สตริงการเชื่อมต่อถูกเก็บไว้ที่เครื่องเอเจนต์เท่านั้น เซิร์ฟเวอร์ของเราไม่อยู่ในเส้นทางนี้และไม่เคยรับที่อยู่ ทั้งตอนบันทึกและตอนอ่าน
  • การลบสล็อตไม่ได้ตัดการรับข้อมูลที่เปิดอยู่ทันที แต่จะจบเมื่อเชื่อมต่อใหม่ ระหว่างนั้นค่ายังเหมือนเดิม เพียงแต่เร็วกว่า