- vừa được xem lúc

Redis trong NodeJS - Tốc độ, mạnh mẽ

0 0 25

Người đăng: Cua một càng

Theo Viblo Asia


Như chúng ta đã biết Redis là một hệ thống lưu trữ dữ liệu dưới dạng Key-Value rất mạnh mẽ và phổ biến hiện nay. Redis nổi bật bởi việc hỗ trợ nhiều cấu trúc dữ liệu cơ bản như:hash, list, set, sorted set, string… Tất cả dữ liệu được ghi và lưu trên ram, do đó tốc độ đọc ghi dữ liệu rất là nhanh. Và trong bài viết này mình sẽ làm một ví dụ nho nhỏ để sử dụng và so sánh tốc độ khi sử dụng Redis. Bắt đầu thôi nào.

Cài đặt server Redis

Bạn có thể dùng server window hoặc linux. Trong ví dụ này mình đang sử dụng server Redis cho window. Cài đặt server Redis cho window tại đây. Sau khi cài đặt xong server Redis. Trong folder vừa được cài đặt, chạy file redis-server.exe để khởi động server.


Cài đặt thư viện

Đầu tiên chúng ta cần tạo mới một project. Và cài đặt thư viện express trên comand line với lệnh

npm install express --save

Tiếp theo chúng ta sử dụng lệnh sau trên command line để cài đặt thư viện redis

npm install redis --save

Sử dụng thư viện

Trường hợp không dùng redis

Với trường hợp không dùng redis, tạo file withoutRedis.js, chúng ta sẽ tiến hành gọi api https://jsonplaceholder.typicode.com/todos/1 và ghi lại thời gian phản hồi của api đó.

const express = require('express');
const axios = require('axios');
const PORT = 3002;
const app = express(); app.get('/', async (req, res) => { try { console.time('LOG_TIME'); axios({ method: 'GET', url: 'https://jsonplaceholder.typicode.com/todos/1', }).then(async response => { const {userId} = response.data; console.timeEnd('LOG_TIME'); return res.json({userId}); }).catch(async e => { console.log(e); return res.json({status: 500, message: 'error'}); }) } catch (e) { console.log(e); }
}); app.listen(PORT, (req, res) => { console.log('App is runing at port ', PORT);
})

Gọi api khoảng 10 lần bằng terminal ta được kết quả như hình bên dưới.

image.png


Kết quả cho thấy, ta mất khoảng 150-400ms cho việc lấy dữ liệu từ api. Và giờ ta sẽ sử dụng Redis để xem kết quả sẽ như thế nào nhé.

Sử dụng Redis

Tương tự với trường hợp ở trên, bây giờ ta sẽ tiến hành gọi api https://jsonplaceholder.typicode.com/todos/1 nhưng sẽ sử dụng redis. Tạo file withRedis.js với vài dòng code sau:

const express = require('express');
const axios = require('axios');
const PORT = 3001;
const app = express();
const redis = require('redis'); app.get('/', async (req, res) => { try { const client = redis.createClient(); await client.connect(); console.time('LOG_TIME'); const value = await client.get('userId'); //value is exists if(value) { console.timeEnd('LOG_TIME'); return res.json({status: 200, message: 'OK'}) } axios({ method: 'GET', url: 'https://jsonplaceholder.typicode.com/todos/1', }).then(async response => { const {userId} = response.data; //send data to redis await client.set('userId', userId); console.timeEnd('LOG_TIME'); return res.json(JSON.stringify(response.data)); }).catch(async e => { console.log(e); return res.json({status: 500, message: 'error'}); }) } catch (e) { console.log(e); return res.status(500); }
}); app.listen(PORT, (req, res) => { console.log('App is runing at port ', PORT);
})

Chạy file withRedis.js sau đó gọi API lần đầu tiên. Lưu ý: chạy server redis trước khi chạy file withRedis.js

image.png


Phải mất tới hơn 3s để có thể hoàn thành việc lấy dữ liệu từ api. Tuy nhiên sự chậm trễ đó là do việc sử dụng redis để lưu lại dữ liệu từ api. Check dữ liệu từ server redis (chạy file redis-cli.exe):

image.png


Tuy nhiên chúng ta hãy thử gọi api thêm 10 lần nữa xem sao nhé!

image.png


Với các lần tiếp theo, việc lấy dữ liệu chỉ còn mất từ 0.3-0.4ms. Quá nhanh so với việc không sử dụng redis. Sự nhanh chóng là do khi data đã được lưu trữ tại server redis thì ta sẽ không cần gọi tới api https://jsonplaceholder.typicode.com/todos/1 để lấy dữ liệu nữa mà sẽ lấy thẳng dữ liệu từ server redis.

Lời kết

Với ví dụ trên, hy vọng giúp ích cho các bạn khi tìm hiểu và sử dụng redis. Bài viết còn nhiều thiếu sót, hy vọng được các bạn góp ý. Nhân dịp đầu xuân năm mới, kính chúc các bạn thật nhiều sức khỏe và thành công. 😄

Tài liệu tham khảo:

Bình luận

Bài viết tương tự

- vừa được xem lúc

Cài đặt WSL / WSL2 trên Windows 10 để code như trên Ubuntu

Sau vài ba năm mình chuyển qua code trên Ubuntu thì thật không thể phủ nhận rằng mình đã yêu em nó. Cá nhân mình sử dụng Ubuntu để code web thì thật là tuyệt vời.

0 0 396

- vừa được xem lúc

Hướng dẫn làm bot Facebook messenger cho tài khoản cá nhân

Giới thiệu. Trong bài viết trước thì mình có hướng dẫn các bạn làm chatbot facebook messenger cho fanpage. Hôm nay mình sẽ hướng dẫn các bạn tạo chatbot cho một tài khoản facebook cá nhân. Chuẩn bị.

0 0 195

- vừa được xem lúc

Crawl website sử dụng Node.js và Puppeteer - phần 2

trong phần 1 mình đã giới thiệu về puppeteer và tạo được 1 project cùng một số file đầu tiên để các bạn có thể crawl dữ liệu từ một trang web bất kỳ. Bài này mình sẽ tiếp nối bài viết trước để hoàn thiện seri này.

0 0 73

- vừa được xem lúc

Điều React luôn giữ kín trong tim

■ Mở đầu. Ngồi viết bài khi đang nghĩ vu vơ chuyện con gà hay quả trứng có trước, mình phân vân chưa biết sẽ chọn chủ đề gì để chúng ta có thể cùng nhau bàn luận.

0 0 59

- vừa được xem lúc

Gửi Mail với Nodejs và AWS SES

AWS SES. AWS SES là gì.

0 0 83

- vừa được xem lúc

Crawl website sử dụng Node.js và Puppeteer - phần 1

Bài viết này mình sẽ giới thiệu cho các bạn craw dữ liệu của web site sử dụng nodejs và Puppeteer. .

0 0 164