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

Redis 7.0 RC1 เปิดตัว: ฟีเจอร์ใหม่และประสิทธิภาพที่ดียิ่งขึ้น

เวอร์ชันใหม่นี้เป็นขั้นตอนวิวัฒนาการของฟีเจอร์บางส่วนของ Redis เพิ่มฟีเจอร์ใหม่ และมอบกำลังดิบที่มากขึ้นด้วยการใช้ทรัพยากรที่ดีกว่า

วันนี้ เรายินดีประกาศการเปิดตัว Release Candidate แรก (RC1) ของ Redis v7.0 เวอร์ชัน 7.0 เป็นไมล์스톤สำคัญของโครงการที่พัฒนามาเกือบปีเต็ม การปล่อย Major version นี้เป็นโอกาสในการทำการเปลี่ยนแปลงที่รุนแรงขึ้นในแง่ของฟังก์ชันและภายใน เราคาดว่าจะปฏิบัติตามรอบการปล่อยปกติ ดังนั้นวางแผนจะมีอีก 2 Release Candidates โดยแต่ละตัวห่างกันประมาณ 3 สัปดาห์ ก่อน General Availability ของ Redis 7.0

Redis 7.0 เพิ่มฟีเจอร์ใหม่มากมาย เช่น Functions, ACL v2, Sharded Pub/Sub และอื่นๆ เราจะครอบคลุมในโพสต์นี้และซีรีส์ต่อไป นอกจากนี้ งานส่วนมากที่วางลงในเวอร์ชันนี้มุ่งเน้นการปรับปรุงและเพิ่มประสิทธิภาพส่วนต่างๆ ของ Redis ที่ผู้ใช้ทั่วไปมองไม่เห็น ความพยายามนี้ครอบคลุมทุก Subsystem ของ Redis เกือบทั้งหมด รวมถึง Persistence, Replication, Network, Memory และ Compute Usage ผลลัพธ์คือ Redis ที่เร็วกว่า เสถียรกว่า และประหยัดกว่าที่เคย

Redis เวอร์ชันใหม่ไม่ได้นำ Data Structures ใหม่มา หรือผลักดันแง่ปฏิบัติการไปสู่ระดับใหม่ แต่เป็นการมองกลับสู่โครงการ ท้าทายสมมติฐานการออกแบบเดิม ก้าวไปสู่การปรับปรุงโครงสร้างพื้นฐานอย่างกล้าหาญ และทำให้ความต้องการและ Use cases ของชุมชนเป็นของตัวเอง

Redis Functions เป็นตัวอย่างของข้างต้น Functions 属于 广义的 Redis Programmability 主题 即编程 Redis 的能力。“编程 Redis”意味着让服务器执行用户逻辑,主要是为了数据局部性。Programmability 一直是 Redis 的一部分,自从 2.6 版引入 Lua 脚本以来(详情请参阅 Eval Scripts 简介)。

Redis 用户对 Lua 脚本的采用率一直在上升。脚本提供了一种有效且简单的方法,用核心 Redis 操作和控制结构来组合服务端工作流。它们可以作为应用程序原生代码中底层数据结构的抽象。应用程序的一组 Lua 脚本实现其逻辑操作(例如“添加用户”或“下单”脚本)。

由于脚本是一个存在已久的流行 Redis 功能,我们收集了大量关于它的反馈。我们发现大多数需求归纳为三大类:

  1. 独立性:脚本是应用程序的一部分。它们反映其内部结构,因此与实现紧密耦合。应用程序需要嵌入脚本源代码并在运行时加载。这种纠缠增加了应用程序生命周期每个阶段的复杂性,从开发、测试到部署。
  2. 执行引擎:Redis 中编写脚本只有一种语言:Lua。此外,由于无数技术原因,Redis 一直使用相同的 Lua 5.1。许多人希望有更新版本。大多数人想要完全不同的语言。
  3. 健壮性:Redis 中 Lua 脚本的设计和实现,像任何其他软件一样,都有假设和限制。在某些情况下,这使得扩展机制变得极其复杂,甚至不可能。缺乏基础阻碍我们添加潜在有价值的功能(例如事件处理和集群脚本)。

这就引出了 Redis Functions。在 Redis 7.0 中,Functions 完全独立于应用程序。因此,Functions 是可执行的软件工件,是第一类数据库公民。Redis 服务器像管理用户数据一样管理 Functions,因此它们会被持久化和复制以保证可用性。将 Functions 加载到数据库不再是应用程序在运行时的责任,而变成了一项可以计划和管理的管理维护任务。

让 Functions 驻留在服务器上下文中,使应用程序摆脱 Functions 的实现细节。相反,应用程序依赖函数签名作为其与嵌入式逻辑的 API,完全不知道正在使用的 Redis 命令和类型。它允许不同的应用程序共享 Functions。还能在没有强制依赖应用程序的情况下开发、测试和维护 Functions。

Redis Functions 的设计是引擎无关的。虽然 Redis 7.0 只支持用 Lua 5.1 编写的 Functions,但内部实现几乎已准备好挂钩其他执行引擎。我们计划未来添加对更多类型执行引擎的支持。

Functions 带来的另一个范式转变是使用 Libraries。Library 可以包含一个或多个已注册的 Functions 和任何额外的内部 Functions。Registered Functions 是 Library 的入口点和应用程序的契约 API。另一方面,Internal Functions 可以在 Library 内部原生调用以实现代码复用。

我们预计 Redis 7.0 引入 Functions 是将 Redis 的 Programmability 推向下一阶段的重要一步。如果你已经在应用程序中使用 Lua 脚本,迁移到使用 Functions 是可选且简单的(详见 Redis Functions)。更好的是,展望未来,Functions 为改进和创新 Redis Programmability 提供了更好的基础。