Khi bạn nghe về Next.js, suy nghĩ đầu tiên của bạn có thể là các trang web tĩnh hoặc giao diện người dùng dựa trên React. Nhưng đó chỉ là một phần của câu chuyện. Next.js cũng có thể hỗ trợ các API phụ trợ đầy đủ tính năng mà bạn có thể lưu trữ và mở rộng quy mô giống như bất kỳ dịch vụ phụ trợ nào khác.
Trong bài viết trước, tôi đã hướng dẫn cách xây dựng API Next.js và triển khai nó với Sevalla. Ví dụ này đã lưu trữ dữ liệu trong cơ sở dữ liệu PostgreSQL và xử lý các yêu cầu trực tiếp. Cách đó hoạt động tốt nhưng khi lưu lượng truy cập tăng lên, các API truy cập cơ sở dữ liệu theo mọi yêu cầu có thể bị chậm lại.
Đây là lúc bộ nhớ đệm xuất hiện. Bằng cách thêm Redis làm lớp bộ nhớ đệm, chúng ta có thể làm cho API Next.js nhanh hơn và hiệu quả hơn nhiều. Trong bài viết này, chúng ta sẽ xem cách thêm bộ nhớ đệm Redis vào API, triển khai nó với Sevalla và hiển thị những cải tiến có thể đo lường được.
Trong bài viết trước tôi đã giải thích chi tiết về API. Vì vậy, bạn có thể sử dụng kho lưu trữ này để bắt đầu làm cơ sở cho dự án này.
Mục lục
-
Tại sao bộ nhớ đệm lại quan trọng
-
Redis là gì?
-
Thiết lập dự án
-
Cung cấp Redis
-
Cập nhật bộ đệm khi đọc
-
Cập nhật bộ đệm khi ghi
-
Triển khai tới Sevalla
-
Tại sao Redis hoạt động tốt với API Next.js
-
Kết luận
Tại sao bộ nhớ đệm lại quan trọng
Mỗi khi API của bạn truy cập cơ sở dữ liệu, nó sẽ tiêu tốn thời gian và tài nguyên. Cơ sở dữ liệu rất tốt trong việc lưu trữ và truy vấn dữ liệu có cấu trúc, nhưng chúng không được tối ưu hóa về tốc độ trên quy mô lớn khi bạn cần phân phát hàng nghìn yêu cầu đọc mỗi giây.
Bộ nhớ đệm giải quyết vấn đề này bằng cách giữ dữ liệu được truy cập thường xuyên trong bộ nhớ. Thay vì hỏi cơ sở dữ liệu mọi lúc, API có thể trả về dữ liệu trực tiếp từ bộ đệm nếu có. Redis là lựa chọn hoàn hảo cho việc này vì đây là kho lưu trữ khóa-giá trị trong bộ nhớ được thiết kế để mang lại hiệu suất.
Ví dụ:nếu bạn tìm nạp danh sách người dùng từ cơ sở dữ liệu theo mọi yêu cầu, có thể mất 200 mili giây để chạy truy vấn và trả về kết quả. Với bộ nhớ đệm Redis, yêu cầu đầu tiên sẽ lưu kết quả vào bộ nhớ và các yêu cầu tiếp theo có thể trả về cùng một dữ liệu trong vòng chưa đầy 10 mili giây. Đó là một sự cải tiến ở mức độ lớn.
Redis là gì?
Redis là kho lưu trữ dữ liệu trong bộ nhớ hoạt động giống như một cơ sở dữ liệu siêu nhanh. Thay vì ghi và đọc từ đĩa, nó giữ dữ liệu trong bộ nhớ, khiến tốc độ xử lý cực kỳ nhanh. Đó là lý do tại sao nó thường được sử dụng làm bộ nhớ đệm, nơi tốc độ quan trọng hơn khả năng lưu trữ lâu dài.
Nó được thiết kế để xử lý khối lượng công việc có thông lượng cao với độ trễ rất thấp, nghĩa là nó có thể phản hồi trong vài micro giây. Điều này làm cho nó hoàn toàn phù hợp cho các trường hợp sử dụng như phản hồi API vào bộ nhớ đệm, lưu trữ dữ liệu phiên hoặc thậm chí hỗ trợ các ứng dụng thời gian thực như hệ thống trò chuyện và bảng xếp hạng.
Không giống như cơ sở dữ liệu truyền thống, Redis tập trung vào sự đơn giản và tốc độ. Nó lưu trữ dữ liệu dưới dạng cặp khóa-giá trị, do đó bạn có thể nhanh chóng tìm nạp hoặc cập nhật giá trị mà không cần viết các truy vấn phức tạp. Và vì nó hỗ trợ các loại dữ liệu nâng cao như danh sách, bộ và hàm băm nên nó linh hoạt hơn nhiều so với kho lưu trữ khóa-giá trị đơn thuần.
Khi kết hợp với API giống như API chúng tôi đã xây dựng trong Next.js, Redis giúp bạn giảm tải cho cơ sở dữ liệu chính và cung cấp phản hồi cực nhanh cho khách hàng.
Thiết lập dự án
Hãy sao chép kho lưu trữ:
git clone git@github.com:manishmshiva/nextjs-api-pgsql.git next-api
Bây giờ hãy vào thư mục và thực hiện cài đặt npm để cài đặt các gói.
cd next-api
npm i
Tạo tệp .env và thêm URL cơ sở dữ liệu từ Sevalla vào biến môi trường.
cat .env
Tệp .env sẽ trông như thế này:
PGSQL_URL=postgres://<username>:<password>-@asia-east1-001.proxy.kinsta.app:30503/<db_name>
Bây giờ, hãy đảm bảo ứng dụng hoạt động như mong đợi bằng cách khởi động ứng dụng và thực hiện một số yêu cầu API.
Khởi động ứng dụng:
npm run dev
Hãy đảm bảo cơ sở dữ liệu được kết nối. Đi tới localhost:3000 trên trình duyệt của bạn. Nó sẽ trả về JSON sau:

Hãy tạo một người dùng mới. Để tạo một mục mới trong DB bằng Postman, hãy gửi yêu cầu POST với JSON sau:
{"id":"d9553bb7-2c72-4d92-876b-9c3b40a8c62c","name":"Larry","email":"larry@example.com","age":"25"}

Hãy đảm bảo bản ghi được tạo bằng cách truy cập localhost:3000/users trong trình duyệt.

Tuyệt vời. Bây giờ hãy lưu trữ các API này bằng Redis.
Cung cấp Redis
Hãy đi tới bảng điều khiển của Sevalla và nhấp vào “Cơ sở dữ liệu”. Chọn “Redis” từ danh sách và để các tùy chọn còn lại làm mặc định.

Sau khi cơ sở dữ liệu được tạo, hãy bật tùy chọn “kết nối bên ngoài” và sao chép URL có thể truy cập công khai.

Đây là giao diện của nó trong tệp .env:
REDIS_URL=redis://default:<password>@<host>:<port>
Bây giờ hãy cài đặt ứng dụng khách Redis cho Node.js:
npm install ioredis
Bây giờ chúng tôi có thể kết nối với Redis và sử dụng nó làm lớp bộ đệm cho API người dùng của mình. Hãy xem cách triển khai bộ nhớ đệm.
Cập nhật bộ đệm khi đọc
Đây là users/route.ts được cập nhật sử dụng Redis:
import { NextResponse } from "next/server";
import { Client } from "pg";
import Redis from "ioredis";
const redis = new Redis(process.env.REDIS_URL!);
async function readUsers() {
const client = new Client({
connectionString: process.env.PGSQL_URL,
});
await client.connect();
try {
const result = await client.query("SELECT id, name, email, age FROM users");
return result.rows;
} finally {
await client.end();
}
}
export async function GET() {
try {
// Check cache first
const cached = await redis.get("users");
if (cached) {
return NextResponse.json(JSON.parse(cached));
}
// Fallback to database if not cached
const users = await readUsers();
// Store result in cache with 60s TTL
await redis.set("users", JSON.stringify(users), "EX", 60);
return NextResponse.json(users);
} catch (err) {
return NextResponse.json({ error: "Failed to fetch users" }, { status: 500 });
}
}
Bây giờ, khi bạn nhấn /users :
-
Đầu tiên API sẽ kiểm tra Redis.
-
Nếu dữ liệu tồn tại, nó sẽ trả về ngay lập tức.
-
Nếu không, nó sẽ truy vấn PostgreSQL, lưu kết quả vào Redis rồi trả về.
Điều này làm cho các yêu cầu lặp đi lặp lại cực kỳ nhanh chóng. Bạn có thể điều chỉnh thời hạn sử dụng bộ đệm (EX 60 ) tùy thuộc vào mức độ mới của dữ liệu của bạn.
Không có bộ nhớ đệm Redis, đang tìm nạp /users mười lần có nghĩa là mười truy vấn cơ sở dữ liệu. Mỗi lần có thể mất khoảng 150–200 mili giây tùy thuộc vào kích thước cơ sở dữ liệu và độ trễ mạng.
Với Redis, yêu cầu đầu tiên vẫn mất ~ 200 mili giây kể từ khi nó điền vào bộ đệm. Nhưng mọi yêu cầu sau đó gần như diễn ra ngay lập tức, thường dưới 10 mili giây. Đó là cải thiện gấp 20 lần .
Việc tăng tốc này rất quan trọng khi API của bạn phải đối mặt với hàng trăm hoặc hàng nghìn yêu cầu mỗi giây. Bộ nhớ đệm không chỉ làm giảm độ trễ mà còn giảm tải cho cơ sở dữ liệu của bạn.
Cập nhật bộ đệm khi ghi
Hiện tại, chỉ các yêu cầu GET mới sử dụng bộ nhớ đệm. Nhưng nếu chúng ta thêm người dùng mới thì sao? Bộ nhớ đệm vẫn trả về dữ liệu cũ.
Giải pháp là cập nhật hoặc xóa bộ đệm bất cứ khi nào quá trình ghi xảy ra. Hãy cập nhật POST người xử lý:
export async function POST(req: Request) {
try {
const body = await req.json();
const client = new Client({
connectionString: process.env.PGSQL_URL,
});
await client.connect();
const query = `
INSERT INTO users (id, name, email, age)
VALUES ($1, $2, $3, $4)
RETURNING *;
`;
const result = await client.query(query, [
body.id,
body.name,
body.email,
body.age,
]);
await client.end();
// Invalidate cache so next GET fetches fresh data
await redis.del("users");
return NextResponse.json(result.rows[0]);
} catch (err) {
return NextResponse.json({ error: "Failed to add user" }, { status: 500 });
}
}
Bây giờ, bất cứ khi nào người dùng mới được tạo, bộ đệm cho users được xóa. Yêu cầu GET tiếp theo sẽ tìm nạp từ cơ sở dữ liệu, làm mới bộ đệm và sau đó tiếp tục cung cấp dữ liệu được lưu trong bộ nhớ đệm.
Triển khai tới Sevalla
Đẩy mã của bạn tới GitHub hoặc phân nhánh kho lưu trữ của tôi. Bây giờ hãy đến Sevalla và tạo một ứng dụng mới.

Chọn kho lưu trữ của bạn từ danh sách thả xuống và chọn “Triển khai tự động trên cam kết”. Điều này sẽ đảm bảo rằng việc triển khai diễn ra tự động mỗi khi bạn đẩy mã. Chọn “Sở thích” trong phần tài nguyên.

Nhấp vào “Tạo” chứ không phải “Tạo và triển khai”. Chúng tôi chưa thêm URL PostgreSQL và URL Redis làm biến môi trường, vì vậy ứng dụng sẽ gặp sự cố nếu bạn cố triển khai nó.
Chuyển đến phần “Biến môi trường” và thêm khóa “PGSQL_URL” và URL vào trường giá trị. Thực hiện tương tự với khóa “REDIS_URL” và thêm URL Redis.

Bây giờ hãy quay lại phần “Tổng quan” và nhấp vào “Triển khai ngay”.

Sau khi triển khai hoàn tất, hãy nhấp vào “Truy cập ứng dụng” để nhận URL trực tiếp của API của bạn. Bạn có thể thay thế localhost:3000 bằng URL mới trong Postman và kiểm tra API của mình.
Tại sao Redis hoạt động tốt với API Next.js
Redis nhẹ, nhanh và hoàn hảo cho các phản hồi API bộ nhớ đệm. Trong ngữ cảnh của Next.js, nó phù hợp một cách tự nhiên vì:
-
Các tuyến API chạy phía máy chủ nơi Redis có thể được truy vấn trực tiếp.
-
Logic bộ nhớ đệm rất đơn giản để thêm vào các lệnh gọi cơ sở dữ liệu.
-
Redis có thể được sử dụng cho nhiều mục đích khác ngoài việc lưu vào bộ nhớ đệm – những thứ như giới hạn tốc độ, lưu trữ phiên và pub/sub cũng là những mô hình phổ biến.
Bằng cách kết hợp Next.js, PostgreSQL và Redis trên Sevalla, bạn sẽ có được một ngăn xếp nhanh, có thể mở rộng và dễ triển khai.
Kết luận
Bộ nhớ đệm không chỉ là một sự tối ưu hóa – nó còn cần thiết cho các API trong thế giới thực. Next.js giúp bạn xây dựng các API phụ trợ mạnh mẽ có thể triển khai dễ dàng. Bằng cách thêm Redis vào hỗn hợp, các API đó có thể xử lý quy mô mà không cần tốn nhiều công sức.
Sevalla liên kết tất cả lại với nhau bằng cách cung cấp dịch vụ lưu trữ ứng dụng, PostgreSQL, Redis và ứng dụng được quản lý ở một nơi. Với một vài biến môi trường và kho lưu trữ GitHub, bạn có thể chuyển từ nhà phát triển cục bộ sang API được lưu trong bộ nhớ đệm, sẵn sàng sản xuất trong vài phút.
Hy vọng bạn thích bài viết này. Đăng ký nhận bản tin AI miễn phí của tôi TuringTalks.ai để biết thêm hướng dẫn thực hành về AI. Bạn cũng có thể tìm thấy tôi trên Linkedin .
Học cách viết mã miễn phí. Chương trình giảng dạy mã nguồn mở của freeCodeCamp đã giúp hơn 40.000 người có được việc làm với tư cách là nhà phát triển. Bắt đầu