Redis là một trong số nhiều công nghệ có thể giúp bạn cải thiện hiệu suất của các ứng dụng web. Hãy cùng Quantrimang làm quen với Redis và tìm hiểu cách tối ưu hóa các ứng dụng Node của bạn với kho dữ liệu mạnh mẽ này.
Khi xây dựng app web, bạn cần đảm bảo nó có thể mở rộng và hoạt động hiệu quả. Để làm việc này, bạn cần tính đến một số nguyên tắc và khái niệm. Redis cung cấp những tính năng tuyệt vời trong việc nâng cao hiệu suất của bất kỳ ứng dụng chạy trên web.
Vậy Redis chính xác là gì, làm thế nào bạn có thể dùng Redis với ứng dụng web Node.js? Hãy cùng nhau tìm hiểu nhé!
Redis là gì, khi nào nên dùng Redis?
Redis là một kho chứa dữ liệu khóa - giá trị mã nguồn mở, nằm trong bộ nhớ. Redis là một công nghệ linh hoạt có thể hoạt động như một hàng đợi công việc, cơ sở dữ liệu, bộ đệm, trình quản lý phiên, module trung chuyển message…
Kết hợp tốc độ, tính linh hoạt và dễ sử dụng của Redis khiến nó trở thành một công cụ rất có giá trị trong hệ sinh thái nhà phát triển phần mềm.
Khi nào nên dùng Redis?
Redis phù hợp với nhiều tác vụ, nhưng bạn nên thận trọng khi sử dụng nó, tốt nhất chỉ dùng khi thật sự cần.
Bạn nên cân nhắc dùng Redis trong những trường hợp sau:
- Caching: Redis là cách phổ biến nhất để triển khai cache giúp ngăn tải database và cải thiện hiệu suất tổng thể.
- Quản lý phiên: Lưu trữ và quản lý phiên người dùng để xác thực và quản lý trạng thái dễ dàng cùng Redis.
- Lưu trữ dữ liệu tạm thời: Redis cho phép bạn lưu trữ dữ liệu và xóa nó tự động sau một khoảng thời gian nhất định. Điều này khiến nó trở thành công cụ tốt để lưu dữ liệu tạm thời như token web JSON, xếp hàng công việc…
Các trường hợp khác mà bạn nên cân nhắc bằng Redis bao gồm triển khai message broker, tối ưu hóa hoạt động database, thậm chí lưu trữ và truy cập các cấu trúc dữ liệu hiệu quả như list, set và hash.
Cách dùng Redis với Node.js
Node.js là một công nghệ phổ biến trong việc xây dựng app bên server hiệu quả & có thể mở rộng. Bạn có thể dùng nó cùng với các công nghệ hỗ trợ như Redis để đạt được hiệu suất và khả năng mở rộng tối đa.
Redis hỗ trợ một số ngôn ngữ. Bạn có thể dùng nó để lưu trữ dữ liệu trong PHP và có các client Redis xuất sắc cho Golang. Hai client Redis phổ biến nhất cho Node.js là node-redis và ioredis.
Kết nối với Redis từ Node.js
Để bắt đầu, bạn phải cài Redis trên máy tính và thiết lập môi trường phát triển Node.js.
Bạn cần cài đặt client Redis ưa thích trong dự án để có thể kết nối với Redis. Tùy thuộc vào cấu hình, hãy chạy một trong số các lệnh bên dưới để cài đặt client Redis.
npm install redis --save
npm install ioredis --save
Lệnh đầu tiên là cài đặt node-redis, thứ hai là cài ioredis.
Để cấu hình client đã cài mới, đảm bảo Redis đang chạy. Bạn có thể làm việc này bằng cách khởi động redis-cli trong terminal:
Lệnh ping ping server để xác nhận nó đang chạy, còn phản hồi PONG trong CLI nghĩa là server đó vẫn đang hoạt động ổn. Giờ tạo file redis.js trong dự án Node và viết code sau vào nó để cấu hình Redis:
const redis = require("redis")
// khởi tạo bằng cách dùng cấu hình mặc định
const RedisClient = redis.createClient()
const connectRedis = async () => {
// kết nối với redis
await RedisClient.connect()
// xử lý lỗi
RedisClient.on('error', (err) => {
console.error(`An error occurred with Redis: ${err}`)
})
console.log('Redis connected successfully...')
}
Code trên khởi tạo một client Redis mới trong ứng dụng này. Hàm createClient của gói redis cho phép bạn tạo một client bằng các tham số đã chọn.
Bạn có thể chỉ định host, port, username, password hoặc chuỗi kết nối hay dùng các giá trị mặc định. Ví dụ, node-redis sẽ bắt đầu chạy trên localhost, trên cổng 6379 theo mặc định.
Dưới đây là một số cách bạn có thể dùng hàm createClient:
// dùng chuỗi kết nối
const RedisClient = redis.createClient("rediss://127.0.0.1:6379")
// dùng đối tượng tham số
const RedisClient = redis.createClient({
socket: {
host: "127.0.0.1",
port: "6379"
},
username: "your redis username",
password: "your password"
})
Triển khai các hoạt động Redis cơ bản trong Node.js
Code sau kết nối Redis bằng hàm connectRedis ở trên và trình bày một số thao tác cơ bản mà bạn có thể thực hiện trong Redis từ các ứng dụng Node.
const testRedis = async () => {
await connectRedis()
// Đặt và truy xuất một giá trị
await RedisClient.set("name", "Timmy")
const getCommand = await RedisClient.get("name")
console.log(getCommand)
// Xóa các giá trị ngay lập tức hoặc lên lịch hết hạn chúng
// trong vài giây
await RedisClient.del("name");
await RedisClient.setEx("location", 60, "Lagos")
// Đẩy vào phía trước hoặc sau danh sách
await RedisClient.lPush("days", "monday")
await RedisClient.rPush("days", "tuesday")
await RedisClient.lPush("days", "wednesday")
const daysArray = await RedisClient.lRange("days", 0, -1)
// prints [ 'wednesday', 'monday', 'tuesday' ]
console.log(daysArray)
// Loại bỏ mục ở sau hoặc trước danh sách
await RedisClient.rPop("days")
await RedisClient.lPop("days")
const newDaysArray = await RedisClient.lRange("days", 0, -1)
// prints [ 'monday' ]
console.log(newDaysArray)
}
testRedis()
Lưu ý cách dùng async và await ở đây. Điều này là do tất cả các chức năng đều chạy không đồng đều và trả về các promise, vì thế, nếu cần kết quả ngay lập tức, bạn cần await chúng.
Code trên chỉ hiện một số hoạt động cơ bản mà bạn có thể thực hiện trong Redis từ ứng dụng Node.js. Hiện có nhiều lệnh và khái niệm khác đáng để tìm hiểu.
Phần Redis Commands trong README được tìm thấy ở repository GitHub của node-redis là nơi tuyệt vời để tìm tất cả các lệnh khác và biết cách hoạt động của chúng.
Trên đây là cách dùng Redis tăng hiệu suất cho app tạo bằng Node.js. Hi vọng bài viết hữu ích với các bạn.