ในบทความนี้ เราจะสาธิตวิธีเร่งความเร็วเว็บแอปพลิเคชันโดยใช้แคช Redis ในตัวอย่างง่ายๆ เราจะเริ่มต้นด้วยการแนะนำ Redis เล็กน้อย จากนั้น เราจะสร้างแบ็กเอนด์เว็บแอปพลิเคชันอย่างง่ายใน Node.js เพื่อดึงข้อมูลจำนวนที่เก็บ Github สำหรับชื่อผู้ใช้ Github ที่กำหนด เราจะวัดเวลาตอบสนองคำขอของ API หลังจากนั้น เราจะใช้มิดเดิลแวร์แคช Redis เพื่อจัดเก็บข้อมูลที่ดึงมาและให้บริการแก่ผู้ใช้ และเปรียบเทียบเวลาตอบสนองคำขอกับการใช้งานก่อนหน้าโดยไม่มี Redis

เว็บแอปพลิเคชันมีความซับซ้อนมากขึ้นเรื่อยๆ ขณะนี้พวกเขามีข้อมูลจำนวนมากที่ต้องดึงมาจากแหล่งต่างๆ ทางออนไลน์ เว็บแอปเหล่านี้มีจำนวนมากขึ้นเรื่อยๆ ในฝั่งไคลเอ็นต์ ซึ่งหมายความว่าดำเนินการในเบราว์เซอร์ของลูกค้า จำเป็นต้องส่งคำขอจำนวนมากขึ้นเพื่อดึงข้อมูล โพสต์ และอัปเดตทรัพยากรที่พวกเขาโต้ตอบด้วยทางออนไลน์ การเรียก API บ่อยครั้งเหล่านี้อาจทำให้แอปพลิเคชันเหล่านี้ช้ามากและมีปัญหา ซึ่งทำให้ผู้ใช้พึงพอใจน้อยลง Redis แก้ไขปัญหานี้ได้

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

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

เรดิสคืออะไร

Redis ซึ่งย่อมาจาก Remote Dictionary Server เป็นที่จัดเก็บข้อมูลคีย์-ค่าในหน่วยความจำแบบโอเพ่นซอร์สที่รวดเร็ว สำหรับใช้เป็นฐานข้อมูล แคช นายหน้าข้อความ และคิว โครงการนี้เริ่มต้นเมื่อ Salvatore Sanfilippo ผู้พัฒนาดั้งเดิมของ Redis พยายามปรับปรุงความสามารถในการปรับขนาดของสตาร์ทอัพในอิตาลีของเขา ขณะนี้ Redis มอบเวลาตอบสนองที่ต่ำกว่ามิลลิวินาที ซึ่งเปิดใช้งานคำขอหลายล้านคำขอต่อวินาทีสำหรับแอปพลิเคชันแบบเรียลไทม์ในเกม เทคโนโลยีโฆษณา บริการทางการเงิน การดูแลสุขภาพ และ IoT Redis เป็นตัวเลือกยอดนิยมสำหรับการแคช การจัดการเซสชัน การเล่นเกม ลีดเดอร์บอร์ด การวิเคราะห์แบบเรียลไทม์ ภูมิสารสนเทศ เรียกรถโดยสาร แชท/ส่งข้อความ การสตรีมสื่อ และแอปผับ/ย่อย

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

Redis มีประโยชน์มากมาย เราจะพูดถึงสิ่งที่สำคัญที่สุด:

  • พื้นที่จัดเก็บข้อมูลในหน่วยความจำ ซึ่งเข้าถึงได้เร็วกว่าฐานข้อมูลแบบเดิมที่มักจัดเก็บไว้ในดิสก์หรือ SSD
  • โครงสร้างข้อมูลที่ยืดหยุ่น: ประเภทข้อมูล Redis ประกอบด้วยสตริง รายการ ชุด แฮช บิตแมป และอื่นๆ
  • ความเรียบง่ายและใช้งานง่ายโดยการเขียนโค้ดไม่กี่บรรทัด

ตัวเรียกหมายเลขพื้นที่เก็บข้อมูล Github อย่างง่าย

ในขั้นตอนแรกของบทช่วยสอนนี้ เราจะสร้าง Node.js API ง่ายๆ ที่เราจะเรียกใช้ด้วยชื่อผู้ใช้ Github ที่กำหนด API จะส่งคืนจำนวนที่เก็บ Github สำหรับชื่อผู้ใช้ที่ระบุในคำขอ

นี่คือรหัสต่อไปนี้:

เซิร์ฟเวอร์ด่วนจะรับฟังบน PORT 5000 รูทที่เราจะเรียกคือ /repos/yourgithubusername รูทนี้จะทริกเกอร์ฟังก์ชัน getRepos ซึ่งจะเรียก Github API /api.github.cim/users/yourgithubusername เพื่อรับรายละเอียดสาธารณะของคุณ คุณสามารถดูจำนวนที่เก็บข้อมูลสาธารณะในบัญชี Github ของคุณได้ในช่อง public_repos ของอ็อบเจ็กต์ data การตอบกลับที่ส่งไปยังไคลเอนต์นั้นสร้างขึ้นโดยฟังก์ชัน setResponse ที่จะใส่ข้อมูลในรูปแบบ HTML ที่เหมาะสม ทดสอบ API ของคุณโดยขอจำนวน repos สาธารณะในบัญชี Github ของคุณเอง

หมายเหตุ: คุณอาจต้องติดตั้งโมดูล express และ node-fetch .

มาดูเวลาตอบสนองคำขอของ API ของเรากัน เปิดเครื่องมือสำหรับนักพัฒนาซอฟต์แวร์ในเบราว์เซอร์ของคุณแล้วไปที่ส่วนเครือข่าย มันแสดงเวลาตอบสนองคำขอ 186 มิลลิวินาที หากคุณรีเฟรชเพจของคุณหลายครั้ง เวลาตอบกลับคำขอจะยังคงเท่าเดิม ไม่แย่นัก แต่มาทำให้มันเร็วขึ้นกันเถอะ!

การเพิ่ม Redis ไปยังเว็บแอปพลิเคชันก่อนหน้า

ให้เราเพิ่ม Redis ลงในเว็บแอปพลิเคชันของเรา เพื่อที่จะทำเช่นนั้นได้ คุณจะต้องติดตั้ง Redis ในเครื่องของคุณ บน MacO คุณสามารถทำได้ง่ายๆ โดยใช้ Homebrew:

brew update
brew install redis

หากต้องการเริ่มเซิร์ฟเวอร์ Redis เป็นบริการพื้นหลัง คุณสามารถใช้คำสั่ง:

brew services start redis

และหากต้องการหยุดบริการ คุณสามารถใช้:

brew services stop redis

อีกสิ่งหนึ่งที่คุณอาจต้องการติดตั้งคือโมดูล redis สำหรับโหนด ทำได้โดยการรัน npm install redis จะเป็นโฮมไดเร็กตอรี่ของโปรเจ็กต์ของคุณ

เราได้แก้ไขโค้ดในย่อหน้าก่อนหน้าเพื่อรวมฟังก์ชันการทำงานที่เกี่ยวข้องกับ Redis

ระหว่างบรรทัดที่ 1–8 เราได้นำเข้าและเริ่มต้นไคลเอนต์ Redis ของเรา ในบรรทัดที่ 31 เรากำลังบันทึกจำนวน repos ของชื่อผู้ใช้บางรายการในแคช Redis ในบรรทัดที่ 41–53 เรากำลังเขียนฟังก์ชันมิดเดิลแวร์แคช Redis ฟังก์ชันนี้ถูกกำหนดเป็นอาร์กิวเมนต์ที่สองของฟังก์ชัน get ในบรรทัด 55 เพื่อบอกอย่างชัดเจนว่าเราต้องการให้เรียกใช้ฟังก์ชัน cache ก่อนฟังก์ชัน getRepos สิ่งที่ฟังก์ชันนี้จะทำคือตรวจสอบว่าไคลเอ็นต์ Redis ชื่อ client ในโค้ดของเราได้จัดเก็บสิ่งที่เกี่ยวข้องกับ username ไว้แล้วหรือไม่ หากเป็นเช่นนั้น ฟังก์ชันแคชจะส่งการตอบกลับไปยังไคลเอนต์ที่มีจำนวนพื้นที่เก็บข้อมูลที่จัดเก็บไว้ในแคชโดยตรง โดยไม่ต้องเรียก Github API หากไม่มีสิ่งใดถูกจัดเก็บไว้ next() จะถูกเรียกซึ่งหมายความว่าคำขอจะถูกส่งต่อไปยังฟังก์ชัน getRepos ที่จะเรียกใช้ Github API และส่งคืนผลลัพธ์ไปยังเบราว์เซอร์

มาดูการทำงานของโค้ดนี้กัน

การเรียก API ครั้งแรกจะมีเวลาตอบสนองคำขอเท่ากัน เนื่องจากไม่พบข้อมูลในแคช Redis แต่เมื่อรีเฟรชจะเห็นเวลาตอบสนอง 5 มิลลิวินาที! เราได้ทำให้แอปพลิเคชันของเราเร็วขึ้น 33.6 เท่าจากข้อมูลที่ทราบ! คุณยังสามารถตรวจสอบในคอนโซลของคุณได้ว่าไม่ได้เรียกใช้ฟังก์ชัน getRepos ยกเว้นครั้งแรกเนื่องจากมีบรรทัดบันทึกเพียงบรรทัดเดียวที่บอกว่า Fetching Data...

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

สำหรับเนื้อหาเพิ่มเติมที่เกี่ยวข้องกับการพัฒนาแอปพลิเคชันเว็บใน Node.js โปรดดูบทความนี้: