วันนี้เราจะมาประกาศ @upstash/redis
v1.0.0.
@upstash/redis
เป็นไคลเอ็นต์ Redis ที่ไม่มีการเชื่อมต่อ (อิง HTTP) เพียงตัวเดียวที่ออกแบบมาสำหรับเซิร์ฟเวอร์ไร้เซิร์ฟเวอร์และเข้ากันได้กับ Cloudflare Workers และรวดเร็ว
มีอะไรใหม่ใน v1.0.0
เวอร์ชัน 1.0.0 เป็นการเขียนซ้ำโดยสมบูรณ์ของไลบรารีก่อนหน้า คำขอคุณลักษณะที่ใหญ่ที่สุดที่เราได้รับ ได้แก่ การสนับสนุนไปป์ไลน์และความปลอดภัยในการพิมพ์ที่ได้รับการปรับปรุง เนื่องจากลักษณะของคุณลักษณะใหม่เหล่านี้ v1
ไม่สามารถใช้งานร่วมกันได้แบบย้อนหลัง อย่างไรก็ตาม เวอร์ชันเก่าจะยังคงทำงานต่อไปเนื่องจาก REST API พื้นฐานไม่เปลี่ยนแปลง
คำสั่งส่วนใหญ่ใช้รูปแบบเดียวกับที่คุณใช้จาก Redis เช่น redis.setex("key", 2, "value")
. สำหรับอื่นๆ เช่น hset
เราขอเสนอ API ที่ใช้งานง่ายขึ้นเพื่อลดจำนวน (de)serialization ที่คุณต้องทำเอง:
await redis.hset("123", {
id: "123",
name: { first: "andreas" },
});
สิ่งนี้จะถูกจัดลำดับภายในเป็น hset 123 id 123 name {"first":"andreas"}
และส่งไปยังอัพสแตช โปรดทราบว่าออบเจ็กต์จะถูกจัดลำดับโดยอัตโนมัติและคุณไม่ต้องทำเองอีกต่อไป
หากคุณไม่แน่ใจว่าจะใช้คำสั่งได้อย่างไร typescript จะช่วยคุณได้หากโปรแกรมแก้ไขของคุณรองรับ Intellisense ตรวจสอบการทดสอบที่ครอบคลุมทุกอย่างและสามารถเป็นตัวอย่างได้
การเปลี่ยนแปลงที่สำคัญที่สุดมีดังนี้:
- การตรวจสอบสิทธิ์อย่างชัดแจ้ง
- ปรับให้เหมาะสมสำหรับแพลตฟอร์มต่างๆ (Node.js, Cloudflare Workers และรวดเร็ว)
- ปรับปรุงระบบประเภท
- เกิดข้อผิดพลาด
- รองรับท่อ
การตรวจสอบสิทธิ์อย่างชัดแจ้ง
การรับรองความถูกต้องอัตโนมัติเมื่อนำเข้าเฉพาะฟังก์ชันเฉพาะทำให้เกิดปัญหาซึ่งลักษณะการทำงานจริงแตกต่างจากที่คาดไว้ และทำให้เสียเวลาในการดีบักปัญหาที่อาจป้องกันได้ โดยเฉพาะบนแพลตฟอร์มต่าง ๆ ที่จัดการตัวแปรสภาพแวดล้อมต่างกัน นั่นเป็นเหตุผลที่เราต้องการให้คุณตรวจสอบลูกค้าของคุณอย่างชัดแจ้ง
เราเข้าใจดีว่าสำหรับกรณีการใช้งานส่วนใหญ่ คุณจะต้องจัดเก็บไว้ในสภาพแวดล้อมของคุณและต้องการเพียงครั้งเดียวสำหรับการตั้งค่าไคลเอนต์ Redis ของคุณ @upstash/redis
เสนอทางลัดที่นี่:สิ่งที่คุณต้องทำคือตั้งค่า UPSTASH_REDIS_REST_URL
และ UPSTASH_REDIS_REST_TOKEN
เป็นตัวแปรสภาพแวดล้อมแล้วโหลดบนแพลตฟอร์มการปรับใช้ที่คุณเลือก ในกรณีที่ไม่ได้กำหนดค่าอย่างเหมาะสม จะเกิดข้อผิดพลาด
Node.js
import { Redis } from "@upstash/redis";
const redis = Redis.fromEnv();
พนักงาน Cloudflare
import { Redis } from "@upstash/redis/cloudflare";
const redis = Redis.fromEnv();
ประเภทสคริปต์
เวอร์ชันใหม่รองรับประเภทที่เข้มงวดสำหรับทุกคำสั่ง และทำให้แน่ใจว่าคุณจะพบข้อผิดพลาดได้เร็วกว่าในภายหลัง ประเภทเป็นทางเลือก และโดยค่าเริ่มต้น เราจะอนุมานประเภทต่างๆ หากเป็นไปได้
import { Redis } from "@upstash/redis";
const redis = new Redis({
/* auth */
});
type User = {
id: string;
email: string;
};
const user = {
id: "abc",
email: "[email protected]",
};
await redis.set<User>("userKey", user);
const user = await redis.get<User>("userKey");
// -> user is typed as User
Redis เสนอคำสั่งมากมายพร้อมอาร์กิวเมนต์ที่เป็นตัวเลือกและชุดค่าผสมที่แตกต่างกัน typescript ให้คุณตรวจสอบชุดค่าผสมที่ไม่ถูกต้องก่อนที่จะรันโค้ดบรรทัดเดียว
redis.set("key", "value", {
ex: 60, // expire in 60 seconds
nx: true, // only create if the key does not yet exist
});
การจัดการข้อผิดพลาด
เวอร์ชันก่อนหน้าส่งคืนการตอบสนองดิบจาก Upstash HTTP API ไม่มากก็น้อย นั่นทำให้คุณต้องดูแลตรวจสอบว่ามีข้อผิดพลาดเกิดขึ้นหรือไม่ จากนั้นจึงโยนมันทิ้ง ในจาวาสคริปต์ คุณมักจะคาดหวังว่าจะมีข้อผิดพลาดเกิดขึ้นเมื่อมีบางอย่างผิดพลาด ดังนั้นเราจึงทำอย่างนั้น
จากนี้ไป คำสั่งจะส่งคืนเฉพาะข้อมูลและโยนโดยอัตโนมัติหากมีสิ่งผิดปกติเกิดขึ้น
// `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");
ท่อ
Upstash นำเสนอคำสั่ง pipelining Redis ผ่าน HTTP ไปยังคำขอแบบกลุ่มและส่งเป็นกลุ่ม ซึ่งสามารถลดเวลาดำเนินการและประหยัดเงินได้บ้าง โดยเฉพาะอย่างยิ่งเมื่อใช้ฟังก์ชันแบบไร้เซิร์ฟเวอร์
:::noteการดำเนินการของไปป์ไลน์ไม่ใช่อะตอมมิก แม้ว่าแต่ละคำสั่งในไปป์ไลน์จะถูกดำเนินการตามลำดับ คำสั่งที่ส่งโดยไคลเอนต์อื่นสามารถแทรกซ้อนกับไปป์ไลน์ได้:::
คุณสามารถสร้างไปป์ไลน์ใหม่จาก redis
. ที่มีอยู่ของคุณ ตัวอย่าง
import { Redis } from "@upstash/redis";
const redis = new Redis({
/* auth */
});
const p = redis.pipeline();
เราออกแบบไปป์ไลน์ API เพื่อให้สามารถเชื่อมโยงหลายคำสั่งได้ หลังจากที่คุณเพิ่มคำสั่งทั้งหมดไปยังไปป์ไลน์ของคุณแล้ว คุณสามารถส่งคำขอและรับอาร์เรย์ที่ทุกองค์ประกอบสอดคล้องกับคำสั่งในลำดับเดียวกัน
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)
ฉันจะเริ่มต้นได้อย่างไร
ตรงไปที่ console.upstash.com และสร้างฐานข้อมูลใหม่ จากนั้นทำตามคำแนะนำในคู่มือเริ่มใช้งานฉบับย่อ
หากคุณเคยใช้เวอร์ชันที่เก่ากว่า คุณสามารถดูส่วนการโยกย้ายไปยัง v1 บน GitHub เพื่อเริ่มต้นได้
งานในอนาคต
Upstash Redis เพิ่งได้รับการอัปเดตเพื่อให้เข้ากันได้กับ redis v6.2
ซึ่งรวมถึงคำสั่งใหม่และขยายคำสั่งอื่นๆ @upstash/redis
จะสนับสนุนเร็วๆ นี้
ในฐานะที่เป็นแพลตฟอร์มเพิ่มเติม เรากำลังวางแผนที่จะสนับสนุน deno ในอนาคตอันใกล้นี้
ปิดคำ
นี่เป็นการเปลี่ยนแปลงครั้งใหญ่และจะต้องดำเนินการบางอย่างจากคุณเพื่ออัปเดต โปรดแจ้งให้เราทราบประสบการณ์ของคุณ
เรายินดีรับฟังข้อเสนอแนะเพื่อปรับปรุงประสบการณ์ของคุณเมื่อทำงานกับผลิตภัณฑ์ Upstash อย่าลังเลที่จะติดต่อ GitHub, Discord หรือ Twitter สำหรับข้อบกพร่องหรือหากคุณสนใจที่จะมีส่วนร่วม ต้องการขอคุณลักษณะหรือต้องการความช่วยเหลือ