Một API fluent và mô hình đối tượng cho .NET và Redis
Redis là một công nghệ tuyệt vời được yêu thích bởi hàng triệu nhà phát triển vì hai lý do: tốc độ và sự đơn giản. Redis cung cấp một giao diện native trực quan được tổ chức logic thành các cấu trúc dữ liệu mà các lập trình viên đã biết. Hơn nữa, những cấu trúc đó đơn giản để sử dụng và được tối ưu hóa tuyệt vời. Chính sự kết hợp tuyệt vời của tốc độ và đơn giản đó là mục tiêu của chúng tôi với việc phát hành một thư viện client mới cho .NET, Redis OM.
Redis OM .NET là gì?
Redis OM là object mapping (ánh xạ đối tượng) và nhiều hơn nữa cho Redis. Động lực đằng sau Redis OM là trả lời câu hỏi "Làm thế nào nhà phát triển có thể tận dụng tối đa Redis mà không cần học tất cả các lệnh Redis?" Đối với bản phát hành preview đầu tiên này, chúng tôi muốn giải quyết câu hỏi, "Làm thế nào chúng ta có thể lưu trữ và tìm kiếm domain objects của mình trong Redis?" Bản phát hành preview của Redis OM .NET là một object mapper, một trình xây dựng chỉ mục thứ cấp (secondary index builder), và một trình xây dựng truy vấn (query builder) đơn giản và mạnh mẽ. Tất cả đều nhằm giúp bạn lưu trữ và tìm kiếm domain objects của bạn với Redis.
Module Redis
API Module đã thay đổi trò chơi cho Redis. Các module thêm một lượng lớn sự linh hoạt cho nền tảng trong khi cung cấp một số tính năng thiết yếu cho Redis. RedisJSON, đặc biệt, mở khóa một lượng lớn chức năng, đặc biệt là xung quanh chỉ mục thứ cấp và mô hình hóa tài liệu. Mặc dù Redis OM hoạt động tốt với Redis cốt lõi, Redis OM thực sự phát huy tác dụng khi bạn thêm RedisJSON, tận dụng tối đa RedisJSON để tạo ra một API phong phú và mạnh mẽ cho việc mô hình hóa đối tượng và truy vấn chúng trong Redis.
Khả năng
Phiên bản preview của Redis OM .NET có bốn khả năng chính:
- Mô hình hóa đối tượng (Object modeling)
- Tạo chỉ mục (Index creation)
- Truy vấn fluent (Fluent queries)
- Tổng hợp fluent (Fluent aggregations)
Cách nó hoạt động
Trước khi bắt đầu với Redis OM, bạn cần cài đặt gói trong dự án của mình. Để làm vậy, chỉ cần chạy
dotnet add package Redis.OM. Logic kết nối chính trong thư viện Redis OM tồn tại trong
RedisConnectionProvider. Provider này cung cấp quyền truy cập vào ba đối tượng khác nhau bạn có thể dùng để giao tiếp với Redis:
IRedisConnection
cho phép bạn giao tiếp trực tiếp với Redis sử dụng phương thứcExecute
vàExecuteAsync
.RedisCollection<T>
là một collection các đối tượng có kiểu generic. Giao diện này cung cấp API truy vấn fluent.RedisAggregationSet<T>
cho phép bạn xây dựng và thực thi các pipeline aggregation trong Redis sử dụng một Fluent API.
Kết nối đến Redis
Để kết nối Redis OM đến Redis trong ASP.NET Core, bạn nên inject một instance của
RedisConnectionProviderinstance như một singleton. Để làm điều này, bạn sẽ dùng một Redis URI. Nếu bạn dùng .NET 6, điều này có nghĩa là mở file
program.csvà thêm:
Đối với .NET 5, sử dụng file Startup.cs, bạn có thể thêm sau vào
Startup.ConfigureServices:
Mô hình hóa và tìm kiếm đối tượng
RedisJSON cho phép bạn lưu trữ đối tượng JSON trong Redis bản địa và truy vấn những đối tượng đó. Nhưng để truy vấn JSON của bạn, bạn cần trước tiên định nghĩa chỉ mục của bạn. Để làm cho quá trình này dễ dàng hơn, chúng tôi đã giới thiệu một mô hình khai báo (declarative model) trong Redis OM .NET để cho phép bạn định nghĩa các chỉ mục này qua một giao diện khai báo. Nếu bạn muốn khai báo một lớp để lưu trữ trong Redis và lập chỉ mục các thuộc tính của nó, bạn trang trí lớp đó với một attribute
Documentvà sau đó trang trí các thuộc tính riêng lẻ với attribute
Indexedhoặc
Searchable.
Indexedngụ ý một chỉ mục tiêu chuẩn, trong khi
Searchablechỉ áp dụng cho chuỗi và có nghĩa là thuộc tính đó sẽ có thể truy vấn với tìm kiếm toàn văn. Tiếp theo, bạn có thể tạo chỉ mục trong Redis bằng cách truyền kiểu mới được trang trí của bạn vào phương thức
IRedisConnection.CreateIndex. Vì vậy, ví dụ, nếu bạn muốn khai báo một lớp Customer với chỉ mục, bạn sẽ làm như sau:
Truy vấn
Với một chỉ mục đã tạo, bạn bây giờ có thể dùng
RedisCollection<T>để truy vấn đối tượng trong Redis. Vì vậy, nếu bạn có John lưu trong Redis như một đối tượng Customer, bạn có thể truy vấn anh ấy:
Bạn cũng có thể dễ dàng làm range query. Ví dụ, hãy tìm tất cả Customer chưa đến tuổi nghỉ hưu:
Với
RedisCollectionvà RedisJSON, bạn có thể xây dựng các truy vấn phong phú và phức tạp như bạn thường làm trong LINQ, và Redis OM sẽ quản lý việc dịch sang ngôn ngữ truy vấn của Redis cho bạn.
Tổng hợp (Aggregations)
Ngoài truy vấn, bạn có thể dùng Redis Aggregations để xây dựng các pipeline aggregation có thể làm nhiều thứ. Ví dụ, giả sử bạn muốn tìm tuổi của mỗi khách hàng trong 3 năm tới, bạn có thể làm với một phép toán số học đơn giản bên trong một biểu thức
Apply, sẽ dịch sang một pipeline aggregation định dạng đúng trong Redis:
Bạn cũng có thể nhóm các bản ghi lại và tính thống kê tóm tắt trên chúng. Vì vậy nếu bạn muốn nhóm khách hàng theo họ của họ, bạn có thể tính thống kê tóm tắt. Ví dụ, đây là cách bạn tính tuổi trung bình:
Kết thúc
Đây chỉ là một tổng quan ngắn gọn về khả năng của Redis OM cho .NET. Nếu bạn muốn tìm hiểu thêm, bạn có thể xem hướng dẫn và lướt qua tài liệu API. Chúng tôi dự định thêm nhiều tính năng hơn cho Redis.OM sớm, và, để đó, chúng tôi rất mong nhận được phản hồi từ cộng đồng. Hãy đến và thử nó. Nếu bạn tìm thấy vấn đề hoặc nghĩ đến thứ gì bạn muốn thấy thêm vào thư viện, hãy mở một issue trên GitHub. Và tự nhiên, chúng tôi luôn chào đón đóng góp từ cộng đồng, nên PR luôn được chào đón :).