Phiên bản mới là một bước tiến hóa đối với một số tính năng của Redis, thêm các tính năng mới và cung cấp nhiều năng lượng thô hơn với việc sử dụng tài nguyên tốt hơn.
Hôm nay, chúng tôi tự hào thông báo về sự sẵn có của ứng cử viên phát hành đầu tiên của Redis v7 (RC1). Phiên bản 7.0 là một cột mốc quan trọng đối với dự án đang được phát triển trong giai đoạn tốt hơn của năm ngoái. Bản phát hành chính này là cơ hội để thực hiện những thay đổi cơ bản hơn về chức năng và nội bộ. Chúng tôi dự kiến sẽ tuân theo chu kỳ phát hành thông thường của mình, vì vậy, hai ứng cử viên khác, mỗi ứng viên cách nhau khoảng ba tuần, được lên kế hoạch trước khi Redis 7.0 ra mắt chung.
Redis 7.0 bổ sung nhiều tính năng mới, chẳng hạn như Chức năng, ACL v2, Pub / Sub được chia nhỏ và hơn thế nữa. Chúng tôi sẽ đề cập đến những điều này trong phần này và một loạt các bài đăng sau. Ngoài ra, rất nhiều công việc được đưa vào phiên bản này tập trung vào việc cải thiện và tối ưu hóa các phần của Redis mà hầu hết người dùng ít nhìn thấy. Nỗ lực này thực tế kéo dài trên mọi hệ thống con của Redis, đề cập đến tính bền bỉ, sao chép, mạng, bộ nhớ và tính toán sử dụng. Kết quả là Redis nhanh hơn, ổn định hơn và tiết kiệm hơn bao giờ hết.
Phiên bản Redis mới không báo trước cấu trúc dữ liệu mới hoặc đẩy các khía cạnh hoạt động của nó sang các lĩnh vực mới. Thay vào đó, nó thiên về việc xem xét một cách nội tâm dự án, thách thức một số giả định thiết kế hiện có, thực hiện các bước mạnh mẽ hơn để cải thiện cơ sở hạ tầng và nội dung hóa các nhu cầu và trường hợp sử dụng của cộng đồng.
Redis Functions là một ví dụ về điều trên. Các hàm thuộc chủ đề rộng hơn của Redis Programmability, có nghĩa là khả năng lập trình Redis. Để "lập trình Redis" có nghĩa là để máy chủ thực thi logic của người dùng, chủ yếu cho vùng dữ liệu. Khả năng lập trình đã là một phần của Redis kể từ khi giới thiệu các tập lệnh Lua trong phiên bản 2.6 (vui lòng tham khảo Giới thiệu về Tập lệnh Đánh giá để biết thêm chi tiết).
Việc người dùng Redis chấp nhận các tập lệnh Lua đã tăng lên kể từ đó. Tập lệnh cung cấp một cách hiệu quả và đơn giản để soạn quy trình công việc phía máy chủ từ các hoạt động và cấu trúc điều khiển cốt lõi của Redis. Chúng có thể đóng vai trò là phần tóm tắt của các cấu trúc dữ liệu cơ bản từ mã gốc của ứng dụng. Tập hợp các tập lệnh Lua của một ứng dụng sẽ triển khai các hoạt động logic của nó (ví dụ:tập lệnh “thêm người dùng” hoặc “đặt hàng”).
Vì tính năng tạo tập lệnh là một tính năng phổ biến của Redis đã có từ lâu nên chúng tôi đã thu thập được rất nhiều phản hồi về tính năng này. Chúng tôi nhận thấy rằng hầu hết các yêu cầu thuộc ba nhóm:
- Độc lập :Tập lệnh là một phần của ứng dụng. Chúng phản ánh các phần tử bên trong của nó, vì vậy chúng được kết hợp chặt chẽ với nhau để thực hiện. Ứng dụng cần nhúng mã nguồn của tập lệnh và tải chúng trong thời gian chạy. Sự vướng mắc này làm tăng độ phức tạp trong mọi giai đoạn trong vòng đời của ứng dụng, từ phát triển, thông qua thử nghiệm đến triển khai.
- Công cụ Thực thi :Chỉ có một ngôn ngữ để viết script trong Redis:Lua. Hơn nữa, do vô số lý do kỹ thuật, Redis đã sử dụng cùng một Lua 5.1 trong suốt thời gian qua. Nhiều người muốn có một phiên bản mới hơn. Hầu hết đều muốn có một ngôn ngữ khác hoàn toàn.
- Độ bền :Việc thiết kế và triển khai Lua scripting trong Redis, giống như bất kỳ phần mềm nào khác, đưa ra các giả định và có giới hạn của chúng. Trong một số trường hợp, điều này làm cho việc mở rộng cơ chế trở nên vô cùng phức tạp, nếu không muốn nói là không thể. Việc thiếu nền tảng khiến chúng tôi không thể bổ sung các tính năng có giá trị tiềm năng (chẳng hạn như xử lý sự kiện và tập lệnh cụm).
Điều đó đưa chúng ta trở lại Redis Functions. Trong Redis 7.0, các chức năng hoàn toàn độc lập với ứng dụng. Kết quả là, các chức năng là tạo tác phần mềm có thể thực thi được là công dân cơ sở dữ liệu hạng nhất. Máy chủ Redis quản lý các chức năng giống như dữ liệu người dùng, vì vậy chúng được duy trì và nhân rộng để có sẵn. Việc tải các chức năng vào cơ sở dữ liệu không còn là trách nhiệm của ứng dụng trong thời gian chạy và trở thành nhiệm vụ bảo trì quản trị có thể được lên lịch và quản lý.
Việc có các chức năng nằm trong ngữ cảnh của máy chủ sẽ giải phóng ứng dụng khỏi việc triển khai các chức năng. Thay vào đó, ứng dụng dựa vào các chữ ký hàm làm API của nó đối với logic được nhúng và hoàn toàn không biết đến lệnh Redis và các kiểu đang chơi. Nó cho phép các ứng dụng khác nhau chia sẻ các chức năng. Nó cũng cho phép phát triển, thử nghiệm và duy trì các chức năng mà không cần phụ thuộc bắt buộc vào ứng dụng.
Thiết kế của Redis Functions là động cơ bất khả tri. Mặc dù Redis 7.0 chỉ hỗ trợ các chức năng được viết trong Lua 5.1, việc triển khai các nội dung gần như đã sẵn sàng để kết nối với các công cụ thực thi khác. Chúng tôi có kế hoạch bổ sung hỗ trợ cho nhiều loại công cụ thực thi hơn trong tương lai.
Một sự thay đổi mô hình khác mà các chức năng thực hiện là việc sử dụng các thư viện. Thư viện có thể bao gồm một hoặc nhiều chức năng đã đăng ký và bất kỳ chức năng nội bộ bổ sung nào. Các chức năng đã đăng ký là điểm nhập của thư viện và API hợp đồng của ứng dụng. Mặt khác, các hàm nội bộ có thể được gọi nguyên bản bên trong thư viện để có thể tái sử dụng mã.
Chúng tôi kỳ vọng rằng việc giới thiệu các chức năng trong Redis 7.0 là một bước tiến lớn trong hướng đưa khả năng lập trình của Redis sang giai đoạn tiếp theo. Nếu bạn đã sử dụng tập lệnh Lua trong ứng dụng của mình, việc chuyển sang sử dụng các chức năng là tùy chọn và đơn giản (xem Các chức năng của Redis để biết thêm). Điều tuyệt vời hơn nữa là, khi chúng tôi tiếp tục phát triển, các chức năng cung cấp nền tảng tốt hơn để cải thiện và đổi mới với khả năng lập trình của Redis.