Tăng tốc độ phản hồi API bằng Cache (Bộ nhớ đệm)
Trong các hệ thống thực tế, truy vấn dữ liệu từ Cơ sở dữ liệu (đặc biệt là các truy vấn phức tạp hoặc bảng có hàng triệu dòng) luôn tốn nhiều thời gian và CPU. Cache (Bộ nhớ đệm) lưu trữ các kết quả truy vấn thường dùng vào bộ nhớ RAM (truy xuất nhanh hơn hàng nghìn lần so với ổ đĩa) giúp API phản hồi tức thì. Tài liệu này hướng dẫn cách tích hợp cơ chế Cache vào NestJS và cách phối hợp với Claude Code để triển khai tối ưu.1. Cơ chế hoạt động của Cache
Khi Client yêu cầu dữ liệu, Server sẽ kiểm tra bộ nhớ đệm trước:- Cache Hit (Trúng Cache): Nếu dữ liệu có sẵn trong Cache, Server trả về ngay lập tức cho Client. (Không cần chạy câu lệnh SQL xuống DB).
- Cache Miss (Trượt Cache): Nếu chưa có, Server truy cập DB lấy dữ liệu, lưu dữ liệu đó vào Cache (kèm thời gian hết hạn - TTL) rồi trả về cho Client.
2. Thiết lập Cache trong NestJS
NestJS cung cấp gói quản lý cache tích hợp dễ sử dụng.Cài đặt thư viện:
Đăng ký CacheModule trong app.module.ts:
src/app.module.ts
3. Các cách sử dụng Cache
Cách 1: Tự động Cache toàn bộ Controller (Sử dụng Interceptor)
Đây là cách đơn giản nhất để cache toàn bộ kết quả của các endpointGET trong Controller.
src/products/products.controller.ts
Cách 2: Tự viết mã điều khiển Cache trong Service (Programmatic Cache)
Dùng khi bạn muốn kiểm soát nghiệp vụ chi tiết hơn (như tự động xóa cache khi thêm sản phẩm mới).src/products/products.service.ts
4. Tích hợp Redis cho môi trường Production
Mặc định,cache-manager lưu dữ liệu ngay trên RAM của máy chủ chạy code (In-Memory). Nếu server bị khởi động lại, cache sẽ mất sạch. Hơn nữa, nếu chạy nhiều server song song, dữ liệu cache sẽ không đồng nhất.
Trong thực tế, người ta sử dụng Redis làm máy chủ lưu trữ Cache tập trung:
- Cài đặt thư viện Redis driver:
npm install cache-manager-redis-yet - Cấu hình lại
CacheModuleđể trỏ tới địa chỉ của Redis Server.