ทำให้ข้อมูลตอบสนองเร็วขึ้นด้วย Redis (ทางเลือก)
ข้อมูลภายนอกที่กลยุทธ์ใช้จะเข้ามาด้วยการ **ดึงเป็นรอบ** โดยค่าเริ่มต้น เมื่อเพิ่ม Redis เอเจนต์จะตื่นทันทีที่มีค่าใหม่และอ่านซ้ำทันที ตัวค่าจริงมาจากการคิวรีฐานข้อมูลเสมอ — Redis ส่งเพียงสัญญาณว่า "มีของใหม่เข้ามา"
1. ระบบของคุณเป็นแบบไหน
ฝั่งที่ส่ง (ตัวเก็บข้อมูล) และฝั่งที่รับ (เอเจนต์) ต้องเข้าถึง Redis ตัวเดียวกันได้ ขอแค่เงื่อนไขนี้ผ่าน จะจัดวางแบบไหนก็ได้
อยู่เครื่องเดียวกันทั้งหมด — ติดตั้งเอง (ง่ายที่สุด ฟรี)
ถ้าตัวเก็บข้อมูลกับเอเจนต์อยู่เซิร์ฟเวอร์เดียวกัน แค่ติดตั้ง 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มีหลายเครื่องของตัวเอง — วางไว้เครื่องเดียวแล้วต่อผ่านเครือข่ายภายใน
ถ้าตัวเก็บข้อมูลกับเอเจนต์อยู่คนละเซิร์ฟเวอร์ ให้รัน 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เครือข่ายแยกกัน — ใช้บริการจัดการฟรี
เมื่อตัวเก็บข้อมูลกับเอเจนต์อยู่คนละที่ที่ติดต่อกันไม่ได้ (คนละคลาวด์ ที่บ้าน ที่ทำงาน) ให้วาง Redis แบบจัดการไว้ตรงกลาง การปลุกแทบไม่ใช้พื้นที่เก็บ โควตาฟรีจึงมักเหลือเฟือ
rediss://…คนอื่นเป็นผู้ส่ง — ทีมหรือองค์กรส่งเอง
ไม่จำเป็นต้องใช้ตัวเก็บข้อมูลของเรา โปรแกรมใดก็ส่งได้ ขอเพียงตรงตามชื่อช่องและรูปแบบเพย์โหลด ช่องคือ sori:data:v1: ตามด้วยชื่อตาราง (ตัดสคีมาออก) เพย์โหลดเป็นเพียงคำใบ้ตำแหน่ง ถึงใส่ค่าไปก็ไม่ถูกใช้ — ฝั่งที่ตื่นจะรันคิวรีของตัวเองใหม่
PUBLISH sori:data:v1:fear_greed '{"v":1,"last":1757462400000,"n":1}'2. ลำดับการเปิด — ต้องตรงกันทั้งสามจุด
ถ้าขาดจุดใดจุดหนึ่งจะกลับไปดึงเป็นรอบ **โดยไม่มีข้อผิดพลาด** ค่ายังถูกต้องและแค่ช้าลง จึงพลาดได้ง่ายว่ามันไม่เคยเปิดเลย
ฝั่งส่ง — บอกที่อยู่ให้ตัวเก็บข้อมูล
ตัวเก็บข้อมูลจะส่งหลังจากเพิ่มแถวใหม่ ถ้าไม่มีที่อยู่ก็จะข้ามการส่งและระบุไว้ในผลการรัน
# ~/soritrading-fetchers/.env SORI_WAKE_REDIS_URL=redis://127.0.0.1:6379
ฝั่งรับ — บันทึกสล็อตไว้ที่เอเจนต์
ใส่ชื่อเรียกและที่อยู่บนเว็บ แล้วกด [ทดสอบการเชื่อมต่อ] เครื่องนั้นจะตอบทันทีว่าเชื่อมต่อได้จริงหรือไม่ ที่อยู่ถูกเก็บไว้ในเครื่องนั้นเท่านั้น ไม่ถูกส่งมายังเซิร์ฟเวอร์ของเราและไม่ปรากฏในบันทึก
การประกาศ — ตารางไหนฟังผ่านสล็อตไหน
ด้านล่างของหน้าเดียวกัน ที่ [การประกาศชุดข้อมูล] เปลี่ยนโหมดเป็น redis แล้วกรอกชื่อสล็อตและชื่อตาราง ที่ต้องมีชื่อตารางเพราะชื่อช่องมาจากชื่อตาราง
mode: redis · redisAlias: main · tableName: fear_greed
- Redis เป็นเพียงการปลุก ถึงพลาดข้อความ (เช่นระหว่างเอเจนต์รีสตาร์ต) ก็ไม่ทำให้ค่าผิด เพราะรอบถัดไปจะตามทัน
- ไม่สามารถ subscribe ผ่าน REST endpoint ของผู้ให้บริการเซิร์ฟเวอร์เลสได้ ให้ใช้ที่อยู่ TCP ที่ขึ้นต้นด้วย redis:// หรือ rediss://
- ถ้าโควตาฟรีตัดการเชื่อมต่อที่ไม่มีการใช้งาน อาจกลายเป็นดึงเป็นรอบอย่างเงียบ ๆ เอเจนต์จะตรวจพบและเชื่อมต่อใหม่ แต่ถ้าหลุดบ่อยแสดงว่าโควตานั้นไม่เหมาะกับงานนี้
- ชื่อสล็อตกับชื่อเรียกฐานข้อมูลเป็นคนละเนมสเปซ แม้ทั้งคู่ชื่อ 'main' ก็ยังหมายถึงคนละเซิร์ฟเวอร์
- สตริงการเชื่อมต่อถูกเก็บไว้ที่เครื่องเอเจนต์เท่านั้น เซิร์ฟเวอร์ของเราไม่อยู่ในเส้นทางนี้และไม่เคยรับที่อยู่ ทั้งตอนบันทึกและตอนอ่าน
- การลบสล็อตไม่ได้ตัดการรับข้อมูลที่เปิดอยู่ทันที แต่จะจบเมื่อเชื่อมต่อใหม่ ระหว่างนั้นค่ายังเหมือนเดิม เพียงแต่เร็วกว่า
เอกสารทั้งหมด — คู่มือ