Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Redis

ประกาศ Upstash Redis SDK v1.0.0

วันนี้เราจะมาประกาศ @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: "andreas@upstash.com",
};

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 สำหรับข้อบกพร่องหรือหากคุณสนใจที่จะมีส่วนร่วม ต้องการขอคุณลักษณะหรือต้องการความช่วยเหลือ