Trong bài đăng trên blog trước đây của tôi, chúng ta đã tìm hiểu các lợi ích của bộ nhớ đệm, các kỹ thuật bộ nhớ đệm phổ biến, cách lưu trữ dữ liệu SQL vào bộ nhớ đệm bằng cách sử dụng Upstash Redis trong các mẫu mã khác nhau.
Khi chúng ta đã xem xét chi tiết và lợi ích của việc lưu các truy vấn SQL vào bộ nhớ đệm bằng Upstash Redis, bây giờ chúng ta có thể đi xa hơn và xem một số hành động. Với mục đích này, chúng ta có thể bắt đầu với ORM thường được sử dụng, Prisma, để bắt đầu xem cách hoạt động của bộ nhớ đệm với Upstash Redis đối với các truy vấn cơ sở dữ liệu.
Trong bài đăng trên blog này, chúng ta sẽ khám phá cách tích hợp Upstash Redis với Prisma vào bộ nhớ đệm truy vấn bằng cách sử dụng kỹ thuật dành riêng bộ nhớ đệm, giảm tải cơ sở dữ liệu và tăng hiệu suất ứng dụng.
Prisma là gì?
Trước khi thiết lập Prisma, hãy cùng tìm hiểu một số thuật ngữ và chức năng của Prisma.
Thứ nhất, Prisma là một công cụ Ánh xạ quan hệ đối tượng (ORM) cung cấp giao diện giữa ứng dụng và cơ sở dữ liệu.
ORM là một kỹ thuật lập trình cho phép các nhà phát triển tương tác với cơ sở dữ liệu bằng cách sử dụng mã hướng đối tượng, cấp cao thay vì viết các truy vấn SQL thô. Nói một cách đơn giản, nó cung cấp cầu nối kết nối cơ sở dữ liệu quan hệ và ngôn ngữ lập trình hướng đối tượng.
ORM ánh xạ các bảng cơ sở dữ liệu tới các lớp hoặc mô hình ngôn ngữ lập trình. Mỗi hàng trong bảng tương ứng với một thể hiện của một lớp. Về cơ bản, đây là mô hình hóa dữ liệu mà chúng tôi thực hiện trong các ứng dụng được viết bằng ngôn ngữ hướng đối tượng. ORM tạo ra điều này cho chúng ta và nó cung cấp các phương thức thay vì viết các truy vấn SQL. Lập trình viên có thể gọi các phương thức trên đối tượng hoặc lớp để thực hiện các thao tác CRUD.
Ví dụ:truy vấn users bảng trong SQL thô trông như thế này:
SELECT * FROM users WHERE id = 1; Khi sử dụng ORM, truy vấn tương tự có thể trông giống như sau:
const user = await user.findUnique({ where: { id: 1 } }); Vì vậy, ORM thực hiện công việc cần thiết để tương tác với cơ sở dữ liệu và làm cho dữ liệu được rút vào chương trình đã thực thi có thể sử dụng được trong mã, mang lại sự tiện lợi lớn cho nhà phát triển.
Prisma là một trong những ORM phổ biến và dễ sử dụng nhất trong các ứng dụng phần mềm.
Dưới đây là một số dấu hiệu cho thấy tại sao Prisma là một lựa chọn ORM tốt:
-
Truy vấn loại an toàn :Prisma tự động tạo ứng dụng khách TypeScript dựa trên lược đồ cơ sở dữ liệu của bạn, đảm bảo bạn phát hiện lỗi trong quá trình phát triển thay vì trong thời gian chạy.
-
Đơn giản hóa việc tạo mô hình dữ liệu :Với
schema.prismatệp, bạn có thể xác định cấu trúc cơ sở dữ liệu của mình bằng cú pháp khai báo mà Prisma sẽ dịch thành các lệnh gọi SQL hoặc API cần thiết. Chúng ta sẽ xem một ví dụ về cách viết mô hình trong tệp này để tạo bảng thông qua Prisma. -
Hỗ trợ đa cơ sở dữ liệu :Prisma hoạt động với các cơ sở dữ liệu phổ biến như PostgreSQL, MySQL, SQLite, MongoDB, v.v. Bạn có thể tìm hiểu cơ sở dữ liệu trong tài liệu Prisma.
-
Quản lý di chuyển :Prisma cung cấp một hệ thống di chuyển dễ sử dụng để giữ cho lược đồ cơ sở dữ liệu của bạn được đồng bộ hóa với cơ sở mã của bạn.
Prisma cũng cung cấp CLI và Studio (GUI cơ sở dữ liệu dựa trên web) để giúp việc quản lý cơ sở dữ liệu trở nên dễ dàng hơn.
Thiết lập Prisma
Bây giờ, hãy xem nó được cài đặt như thế nào và hoạt động như thế nào trong một ứng dụng.
Vì trọng tâm chính của bài đăng trên blog này là lưu trữ các truy vấn Prisma vào bộ nhớ đệm nên chúng ta chỉ cần sử dụng cơ sở dữ liệu SQLite rất đơn giản cục bộ để thực hiện một số thao tác Prisma nhằm chứng minh Prisma hoạt động.
Chúng ta nên cài đặt sqlite3 trước tiên để đảm bảo rằng ứng dụng của chúng tôi có thể kết nối và tương tác với cơ sở dữ liệu SQLite. Như tôi đã đề cập, thiết lập SQLite chỉ để minh họa cách Prisma hoạt động với cơ sở dữ liệu. Nếu có bất kỳ tùy chọn nào khác, bạn có thể tìm thấy phần tích hợp loại cơ sở dữ liệu của mình với Prisma trong tài liệu Prisma.
Đi tới thư mục dự án trong terminal và cài đặt SQLite tại đây.
npm install sqlite3 Bây giờ chúng ta nên cài đặt Prisma CLI để có thể sử dụng Prisma ORM.
npm install prisma --save-dev
Sau đó khởi tạo Prisma. Việc khởi tạo này sẽ tạo ra một prisma thư mục có schema.prisma tập tin. schema.prisma tệp là nơi bạn xác định cấu trúc cơ sở dữ liệu của mình (mô hình, trường, v.v.)
npx prisma init
Bây giờ, chúng ta sẽ xác định lược đồ Prisma. Hãy mở prisma/schema.prisma tập tin trong một trình soạn thảo.
Tập tin này bao gồm ba khối. Khối đầu tiên là trình tạo cấu hình Prisma để tạo ứng dụng khách được sử dụng trong ứng dụng Node.js của bạn. Thứ hai là khối nguồn dữ liệu. Trong khối này, chúng tôi sẽ cung cấp thông tin cần thiết về cơ sở dữ liệu của chúng tôi để kết nối Prisma. Khối cuối cùng chứa các mô hình cơ sở dữ liệu mà chúng ta có thể xác định các bảng trong cơ sở dữ liệu và các trường của chúng, bao gồm các kiểu dữ liệu và các ràng buộc.
Hãy xem một ví dụ bên dưới.
generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "sqlite"
url = env("DATABASE_URL")
}
model user {
id Int @id @default(autoincrement())
name String
email String @unique
age Int?
}
Như chúng ta có thể thấy, chúng tôi cung cấp url cơ sở dữ liệu bằng cách chỉ ra loại của nó. Nhân tiện, đừng quên đặt biến môi trường DATABASE_URL trong dự án của bạn. Để kết nối các loại cơ sở dữ liệu khác, bạn có thể kiểm tra tài liệu Prisma. Trong trường hợp mẫu của chúng tôi, chúng tôi chỉ có thể đặt nó thành file:./dev.db .
Ngoài ra, chúng tôi còn xác định user bảng bằng cách xác định các cột của nó với các kiểu và ràng buộc của chúng. Bạn có thể tạo các mô hình phức tạp hơn với các loại cơ sở dữ liệu khác nhau tùy theo nhu cầu của bạn. Nhưng đối với bản demo này, chúng ta có thể thực hiện cài đặt cơ bản này.
Để đồng bộ hóa lược đồ của chúng tôi với cơ sở dữ liệu bằng cách tạo các bảng cần thiết, chúng tôi nên chạy lệnh di chuyển. –name cờ đặt tên cho quá trình di chuyển này, giúp việc theo dõi các thay đổi trong lược đồ trở nên dễ dàng hơn.
npx prisma migrate dev --name init
Cơ sở dữ liệu SQLite của chúng tôi với Prisma ORM hiện đã sẵn sàng.
Cài đặt Redis Upstash
Đây là phần nhanh nhất để hoàn thành. Chúng tôi đã thực hiện bước này hàng nghìn lần. Tuy nhiên, chúng tôi cũng sẽ thực hiện nhanh các bước ở đây để biến bài đăng blog này thành hướng dẫn đầy đủ ngay từ đầu. Bất kỳ ai đã thực hiện bất kỳ bước nào trong số này đều có thể chuyển sang các bước họ cần.
Chúng tôi sẽ tạo cơ sở dữ liệu Redis thông qua bảng điều khiển Upstash.
Hãy tạo cơ sở dữ liệu Redis bằng cách nhấp vào nút “Tạo cơ sở dữ liệu” và hoàn thành các bước trong phương thức bật lên.
Đừng quên chọn các bản sao đã đọc của cơ sở dữ liệu Upstash Redis khi chọn vùng cơ sở dữ liệu. Bạn có thể tìm hiểu những lợi ích của Redis toàn cầu trong bài đăng blog trước đây của tôi.

Cơ sở dữ liệu Redis đã sẵn sàng. Điều duy nhất còn lại trong quá trình thiết lập Upstash Redis của chúng tôi là khởi tạo ứng dụng khách Redis trong ứng dụng của chúng tôi. Để làm được điều này, trước tiên chúng ta cần cài đặt Upstash Redis SDK.
npm install @upstash/redis Sau đó, chúng ta nên sử dụng điểm cuối và mật khẩu Redis từ Bảng điều khiển Upstash. Sau đó, định cấu hình ứng dụng khách Redis trong mã mà chúng ta sẽ kết nối với Upstash Redis.
Lưu truy vấn Prisma vào bộ nhớ đệm bằng Upstash Redis
Như tôi đã đề cập trước đó trong blog này, chúng tôi sẽ sử dụng chiến lược dành riêng bộ đệm. Để làm điều đó, trước tiên chúng tôi sẽ kiểm tra bộ đệm xem dữ liệu được yêu cầu bởi truy vấn đã cho có tồn tại hay không. Nếu tồn tại thì chúng tôi sẽ lấy nó từ Upstash Redis và trả lại. Nếu không, chúng tôi sẽ truy vấn cơ sở dữ liệu SQL bằng cách sử dụng ứng dụng khách Prisma được tạo trong phần trên và điền dữ liệu được truy xuất từ cơ sở dữ liệu SQL vào bộ đệm.
import { Redis } from '@upstash/redis';
import { PrismaClient } from "@prisma/client";
const prisma = new PrismaClient();
const redis = new Redis({
url: '<UPSTASH-REDIS-ENDPOINT>',
token: '<UPSTASH-REDIS-TOKEN>',
})
async function getUser(userId: string) {
const cacheKey = `user:${userId}`;
// Check cache
const cachedUser = await redis.get(cacheKey);
if (cachedUser) {
console.log("Cache hit");
return JSON.parse(cachedUser);
}
// Query database
console.log("Cache miss");
const user = await prisma.user.findUnique({
where: { id: userId },
});
// Store in cache
if (user) {
await redis.set(cacheKey, JSON.stringify(user), { ex: 3600 }); // Cache for 1 hour
}
return user;
}
Như có thể thấy trong ví dụ này, prisma.<tableName>.findUnique() phương thức với tham số xác định các điều kiện của truy vấn cho phép các nhà phát triển truy vấn cơ sở dữ liệu SQL ở định dạng mã.
Ví dụ:chúng ta có thể truy xuất tất cả người dùng trong bảng người dùng bằng cách sử dụng findMany() hoạt động như sau:
const user = await prisma.user.findMany(); Kết luận
Trong bài đăng trên blog này, chúng tôi đã hướng dẫn cách tích hợp Prisma với Upstash Redis để lưu vào bộ nhớ đệm các truy vấn Prisma.
Cả Prisma và Upstash Redis đều khá đơn giản và dễ sử dụng. Ngoài kiến trúc thân thiện với nhà phát triển, chúng còn có tác động khá lớn. Prisma có thể tiết kiệm rất nhiều thời gian phát triển nhờ tính năng ánh xạ cho phép quản lý cơ sở dữ liệu ở định dạng mã hóa. Bộ nhớ đệm truy vấn Prisma bằng Upstash Redis cũng có thể giảm đáng kể độ trễ của quá trình truy xuất dữ liệu và giảm tải cho cơ sở dữ liệu SQL chính của ứng dụng.
Tôi hy vọng blog này sẽ giúp ích cho tất cả các bạn!