Hôm nay, chúng tôi thông báo @upstash/redis v1.0.0.
@upstash/redis là client Redis duy nhất không kết nối (dựa trên HTTP) được thiết kế cho serverless và tương thích với Cloudflare Workers và fastly.
Có gì mới trong v1.0.0?
Phiên bản 1.0.0 là viết lại hoàn toàn thư viện trước. Trong những yêu cầu tính năng lớn nhất chúng tôi nhận được là hỗ trợ pipeline và type safety cải tiến. Do bản chất của các tính năng mới này, v1 không tương thích ngược, tuy nhiên phiên bản cũ sẽ tiếp tục hoạt động vì REST API bên dưới không thay đổi.
Hầu hết lệnh tuân theo cú pháp bạn quen thuộc từ Redis như redis.setex("key", 2, "value"). Đối với những lệnh khác, như hset, chúng tôi cung cấp API dễ dùng hơn để giảm lượng (de)serialization bạn phải tự làm:
await redis.hset("123", {
id: "123",
name: { first: "andreas" },
});Điều này nội bộ sẽ được serialize thành hset 123 id 123 name {"first":"andreas"} và gửi đến Upstash. Lưu ý đối tượng được serialize tự động và bạn không còn phải tự làm nữa.
Nếu bạn không chắc lệnh nào dùng như thế nào, typescript sẽ giúp nếu editor hỗ trợ intellisense. Cũng xem test bao phủ mọi thứ và có thể làm ví dụ.
Dưới đây là những thay đổi quan trọng nhất:
- Xác thực tường minh
- Tối ưu cho các nền tảng khác nhau (Node.js, Cloudflare Workers và fastly)
- Hệ thống kiểu cải tiến
- Lỗi được ném ra (throw)
- Hỗ trợ pipeline
Xác thực tường minh
Xác thực tự động khi chỉ import các hàm cụ thể gây ra vấn đề nơi hành vi thực tế khác kỳ vọng và dẫn đến lãng phí thời gian debug vấn đề có thể phòng tránh. Đặc biệt trên các nền tảng khác nhau xử lý biến môi trường khác nhau. Đó là lý do chúng tôi yêu cầu bạn xác thực client tường minh.
Chúng tôi hiểu rằng cho hầu hết trường hợp bạn sẽ lưu chúng trong môi trường và chỉ yêu cầu một lần để thiết lập client Redis. @upstash/redis cung cấp lối tắt: Tất cả bạn cần làm là đặt UPSTASH_REDIS_REST_URL và UPSTASH_REDIS_REST_TOKEN làm biến môi trường và tải chúng trên nền tảng triển khai bạn chọn. Nếu chúng không được cấu hình đúng, lỗi sẽ được ném ra.
Node.js
import { Redis } from "@upstash/redis";
const redis = Redis.fromEnv();Cloudflare Workers
import { Redis } from "@upstash/redis/cloudflare";
const redis = Redis.fromEnv();Typescript
Phiên bản mới hỗ trợ kiểu nghiêm ngặt cho mọi lệnh và đảm bảo bạn tìm thấy lỗi sớm hơn là muộn. Kiểu là tùy chọn và mặc định chúng ta suy luận kiểu khi có thể.
import { Redis } from "@upstash/redis";
const redis = new Redis({ /* auth */ });
type User = { id: string; email: string; };
const user = { id: "abc", email: "andreas@upstash.com", };
await redis.set("userKey", user);
const user = await redis.get("userKey");
// -> user is typed as User Redis cung cấp nhiều lệnh với tham số tùy chọn và tổ hợp khác nhau có thể. Typescript cho phép kiểm tra mọi tổ hợp không hợp lệ trước khi thực thi một dòng mã nào.
redis.set("key", "value", {
ex: 60, // expire in 60 seconds
nx: true, // only create if the key does not yet exist
});Xử lý lỗi
Phiên bản trước trả về phản hồi thô từ Upstash HTTP API. Điều đó yêu cầu bạn kiểm tra lỗi tồn tại và ném nó. Trong javascript bạn thường mong đợi lỗi được ném khi có sự cố, nên chúng tôi làm chính điều đó.
Từ nay, lệnh chỉ trả về dữ liệu và tự động ném nếu có sự cố.
// `v0.2.1`
const { data, error } = await set("key", "value");
if (error) {
throw new Error(error);
}// '^v1.0.0'
const data = await redis.set("key", "value");Pipelines
Upstash cung cấp pipeline các lệnh Redis qua HTTP để gom request lại với nhau và gửi hàng loạt. Điều này có thể giảm thời gian thực thi và tiết kiệm tiền, đặc biệt khi dùng serverless functions.
:::note Thực thi pipeline không phải atomic. Dù mỗi lệnh trong pipeline sẽ thực thi theo thứ tự, lệnh gửi bởi client khác có thể xen kẽ với pipeline. :::
Bạn có thể tạo pipeline mới từ instance redis hiện có.
import { Redis } from "@upstash/redis";
const redis = new Redis({ /* auth */ });
const p = redis.pipeline();Chúng tôi thiết kế API pipeline để cho phép chuỗi nhiều lệnh. Sau khi thêm tất cả lệnh vào pipeline, bạn có thể gửi request và nhận mảng nơi mỗi phần tử tương ứng lệnh theo cùng thứ tự.
p.set("key", 2);
// or chain directly
p.incr("key").decrby("key", 2);
const res = await p.exec();
// res[0] => "OK" | the result of p.set("key", 2)
// res[1] => 3 | the result of p.incr("key")
// res[2] => 1 | the result of p.decrby("key", 2)Làm sao để bắt đầu?
Ghé console.upstash.com và tạo database mới. Sau đó làm theo hướng dẫn trong quick-start guide.
Nếu bạn đã dùng phiên bản cũ, bạn có thể xem Migrate to v1 section trên GitHub để bắt đầu.
Công việc tương lai
Upstash Redis gần đây nhận cập nhật tương thích redis v6.2, bao gồm lệnh mới và mở rộng lệnh khác. @upstash/redis sẽ hỗ trợ những này sớm.
Là nền tảng bổ sung, chúng tôi dự định hỗ trợ deno trong tương lai gần.
Kết luận
Đây là thay đổi lớn và sẽ yêu cầu công sức từ bạn để cập nhật. Hãy cho chúng tôi biết trải nghiệm của bạn.
Chúng tôi hoan nghênh mọi phản hồi để cải thiện trải nghiệm khi làm việc với sản phẩm Upstash. Đừng ngần ngại liên hệ trên GitHub, Discord hoặc Twitter cho bug hoặc nếu bạn quan tâm đóng góp, yêu cầu tính năng hoặc cần giúp đỡ.