Redis giải quyết bài toán gì?
Khi làm backend một "thời gian" (thực ra là mới 2 năm kinh nghiệm=))), bạn sẽ nhận ra: vấn đề lớn nhất không phải là viết logic, mà là làm sao để hệ thống phản hồi nhanh và chịu tải tốt. Giải pháp ở đây là: Redis, và thực tế thì dự án nào cũng sử dụng cache (hoặc theo kinh nghiệm của tớ thì là thế, ưu điểm quá lớn thì tại sao lại không nhỉ!!)
Redis là một in-memory key-value store, hoạt động chủ yếu trên RAM nên tốc độ rất cao. Nó thường đóng vai trò là cache, nhưng thực tế còn nhiều hơn thế.
Vì đã có rất nhiều bài viết về Redis rồi, topic cũng không phải là mới nên post này sẽ chỉ ra những key points.
1. Giảm tải database
Thay vì mỗi request đều truy vấn PostgreSQL/MySQL, ta cache dữ liệu thường xuyên đọc.
2. Tăng tốc API
Ví dụ: API lấy profile user.
- Lần đầu: query DB → lưu Redis (TTL-Time To Live 10 phút)
- Lần sau: đọc từ Redis → nhanh hơn rất nhiều
3. Lưu dữ liệu tạm thời
- OTP (hết hạn sau 2 phút chẳng hạn)
- Access token
- Rate limit counter
...
Nói ra thì tràng giang đại hải lắm, trên chỉ là cái tớ biết và có cơ hội làm trong dự án thật thuii=)).
Ưu điểm
- Chắc chắn là rất nhanh (nhưng không phải là nhanh nhất, ví dụ như cafein cache sẽ có ở bài sau nhé!!), nhanh hơn nhiều so với chọc vào DB vì không cần roundtrip
- Đơn giản
- Scale theo chiều ngang (cluster)
Nhược điểm
- Tốn RAM
- Không thay thế được relational DB
- Nếu không cấu hình persistence đúng vẫn có thể mất dữ liệu
=>> Kết luận: Redis không thay thế DB, nhưng giúp DB sống khỏe hơn
(điều này là rất rất cần thiết trong dự án thực tế, đặc biệt với những dự án với lượng users lớn, requests nhiều,...)