บทความนี้จะให้ตัวอย่างแอปพลิเคชันที่ใช้ Redis Cache พร้อมคำอธิบาย
โปรดดูบทความนี้เกี่ยวกับวิธีสร้างแอปพลิเคชัน Express Node JS เพื่อให้เราสามารถเข้าสู่หัวข้อได้อย่างรวดเร็วโดยไม่ชักช้า
เหตุใดจึงต้องมีการแคช
เมื่อจำเป็นต้องตอบสนองเดียวกันหลายครั้ง ให้จัดเก็บข้อมูลไว้ในหน่วยความจำเซิร์ฟเวอร์แบบกระจายและสามารถดึงข้อมูลได้เร็วกว่าข้อมูลที่ดึงมาจากชั้นพื้นที่จัดเก็บข้อมูลสำหรับการโทรแต่ละครั้ง การแคชคือความสามารถของแอปพลิเคชันในการทำซ้ำค่าตามระยะเวลาที่กำหนดและให้บริการตามคำขอของเว็บทันที
เทคนิคเหล่านี้จะมีผลเมื่อ
- มีความจำเป็นต้องเรียกใช้ API ของบุคคลที่สามและจำนวนการโทร
- ต้นทุนการถ่ายโอนข้อมูลระหว่างคลาวด์และเซิร์ฟเวอร์
- การตอบสนองของเซิร์ฟเวอร์มีความสำคัญตามคำขอที่เกิดขึ้นพร้อมกัน
แคช Redis คืออะไร
แคชข้อมูลที่จัดเก็บไว้ในระบบกระจายแบบรวมศูนย์ เช่น Redis Redis เรียกอีกอย่างว่าเซิร์ฟเวอร์โครงสร้างข้อมูล ซึ่งหมายความว่ากระบวนการต่างๆ สามารถสืบค้นและแก้ไขข้อมูลได้พร้อมๆ กันโดยไม่ต้องใช้เวลาโหลดมากนัก
ข้อดีของ Redis
คุณสมบัติพิเศษของโครงสร้างข้อมูลคือ
- แม้ว่าข้อมูลจะถูกร้องขอ ให้บริการ และแก้ไขบ่อยครั้ง แต่ข้อมูลจะถูกจัดเก็บไว้ในดิสก์แทนที่จะจัดเก็บไว้ใน RAM
- ต่างจากภาษาการเขียนโปรแกรมระดับสูง การใช้งานจะเน้นไปที่การใช้หน่วยความจำให้เกิดประโยชน์สูงสุด
- ยังมีฟีเจอร์ต่างๆ เช่น การจำลอง ระดับความคงทน การทำคลัสเตอร์ และความพร้อมใช้งานสูง (HA)
- Redis สามารถจัดการการดำเนินการ Memcached ที่ซับซ้อนได้ เช่น รายการ ชุด ชุดข้อมูลที่เรียงลำดับ ฯลฯ
การใช้ไคลเอนต์ Redis ในระบบโลคัล
หากต้องการใช้ Redis คุณต้องติดตั้ง Node JS Redis Client ในระบบโลคัล คุณสามารถดาวน์โหลดไฟล์ msi (เวอร์ชันเสถียร v3.0.504 ณ วันที่เผยแพร่บทความนี้) ได้จาก Github และดำเนินการตามขั้นตอนการติดตั้งตามปกติ (สำหรับ Windows OS)
Redis Client ล่าสุดสามารถติดตั้งกับ Windows Subsystem for Linux (WSL) และติดตั้ง Redis เวอร์ชัน 6.x ได้ด้วย นอกจากนี้ สำหรับการเชื่อมต่อ Mac และ Linux OS ให้ทำตามคำแนะนำในการดาวน์โหลด
เรียกใช้ไคลเอนต์ Redis ด้วยคำสั่งต่อไปนี้
redis-server

สร้างแอปพลิเคชัน Express Node JS
เปิดหน้าต่างพรอมต์ PowerShell หรือ cmd และไปที่โฟลเดอร์ปลายทาง
ดำเนินการคำสั่งต่อไปนี้
npx express expressRedisCaching –hbs

ติดตั้งโมดูลโดยใช้คำสั่ง
npm i และติดตั้งแพ็คเกจเพิ่มเติมต่อไปนี้
npm i redis
npm i isomorphic-fetch เมื่อติดตั้งแพ็คเกจทั้งหมดแล้วและพร้อมที่จะเริ่มต้น ฉันได้สร้างหน้าเส้นทางใหม่ชื่อ “getCached.js ” และแมปใน “App.js ” หน้า
app.use('/getCached', require('./routes/getCached')); เมื่อเรียกตำแหน่งข้อมูล ตรรกะคือการดึงการตอบสนองจากไซต์ตัวยึดตำแหน่ง JSON (จำลอง API) จัดเก็บข้อมูลใน Redis Cache และตอบสนองต่อคำขอ เมื่อมีการร้องขอเพิ่มเติม ข้อมูลแคชจะถูกให้บริการ
const express = require('express')
require('isomorphic-fetch')
const redis = require('redis')
const router = express.Router()
const client = redis.createClient({
host:'127.0.0.1',
port:6379
})
let sourceURL = 'https://jsonplaceholder.typicode.com/todos';
router.get('/',async(req, res)=>{
await client.connect();
const value = await client.get('todos');
if(value){
console.log("from cached data")
res.send(JSON.parse(value))
}
else{
const resp = await fetch(sourceURL)
.then((response) => response.json());
await client.set('todos', JSON.stringify(resp));
console.log("from source data")
res.send(resp);
}
await client.disconnect();
})
module.exports = router วัตถุที่สร้างขึ้นโดยใช้ Redis คือ
redis.createClient({ host:’127.0.0.1’, port:6379}); พร้อมตัวเลือก
โฮสต์ :ปัจจุบัน Redis พร้อมใช้งานในระบบโลคัล ดังนั้นโฮสต์จึงเป็นค่าเริ่มต้น 127.0.0.1
พอร์ต :โดยค่าเริ่มต้น Windows OS จะจัดสรรพอร์ต 6379 ให้กับ Redis แต่สามารถปรับแต่งได้เหมือนกัน
ตอนนี้ได้เวลาเรียกใช้แอปโดยดำเนินการคำสั่ง
npm start


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