Computer >> Máy Tính >  >> Lập trình >> Redis

Giới thiệu Redis OM cho Python

Lập bản đồ đối tượng trực quan và Truy vấn thông thạo cho Redis và Python

Tôi rất vui được giới thiệu Redis OM cho Python, một thư viện mới mạnh mẽ tập trung vào nhà phát triển dành cho Redis cung cấp cho bạn các tính năng như ánh xạ đối tượng, xác thực dữ liệu, v.v.

Bản phát hành xem trước này của Redis OM cho Python cho phép bạn lập mô hình dữ liệu bằng mô hình khai báo điều đó sẽ mang lại cảm giác thoải mái cho người dùng các trình lập bản đồ quan hệ đối tượng (ORM) như SQLAlchemy, Peewee và Django ORM.

Nhưng còn nhiều hơn thế nữa! Mọi mô hình Redis OM cũng là mô hình Pydantic, vì vậy bạn có thể sử dụng các tính năng xác thực dữ liệu mạnh mẽ và có thể mở rộng của Pydantic. Hơn nữa, các mô hình Redis OM sẽ hoạt động ở bất kỳ đâu mà thư viện Python mong đợi các mô hình Pydantic. Vì vậy, bạn có thể sử dụng mô hình Redis OM với FastAPI để tự động xác thực và tạo tài liệu API cho các điểm cuối API.

Một tính năng khác mà tôi yêu thích là Redis OM hỗ trợ các biểu thức truy vấn thông thạo và các chỉ mục phụ. Redis OM cho Python cũng hỗ trợ cả lập trình không đồng bộ (asyncio) và lập trình đồng bộ trong cùng một thư viện. Và danh sách các tính năng tuyệt vời tiếp tục!

Tiếp tục đọc để tìm hiểu về cách tôi xây dựng thư viện này và một số chi tiết hậu trường về một vài tính năng chính. Hoặc, nếu bạn đã sẵn sàng chơi với mã, hãy xem hướng dẫn bắt đầu.

Các mô hình khai báo cho Redis

Các nhà phát triển thường truy cập Redis thông qua thư viện khách hàng để tạo Redis cấu trúc dữ liệu (ví dụ:Hàm băm) và sau đó là lệnh chống lại họ.

Nhiều người thích giao diện dựa trên lệnh này vì nó đơn giản hơn so với việc viết các truy vấn SQL với cơ sở dữ liệu quan hệ. Nhưng lần cuối cùng bạn viết SQL là khi nào? Các nhà phát triển sử dụng các khuôn khổ web hiện đại có xu hướng sử dụng ORM để thay thế, đặc biệt là với các mô hình khai báo.

Điều tôi thích ở ORM là chúng loại bỏ rất nhiều sự phức tạp không liên quan đến vấn đề bạn đang cố gắng giải quyết. Chúng tôi đã tạo Redis OM để cuối cùng bạn có thể có trải nghiệm tương tự với Redis.

Hàm băm hoặc JSON, sự lựa chọn của bạn

Redis OM cho Python bao gồm hai lớp mô hình cơ sở mà bạn có thể sử dụng để xây dựng mô hình của mình: HashModel JsonModel.

Người dùng Redis nguồn mở có thể sử dụng HashModel để lưu trữ dữ liệu trong Redis dưới dạng Hashes, trong khi người dùng đã cài đặt mô-đun RedisJSON Redis hoặc đang sử dụng Redis Enterprise Cloud hoặc Software có thể sử dụng JsonModel để lưu trữ dữ liệu nguyên bản dưới dạng các đối tượng JSON. Tôi sẽ nói thêm về sự khác biệt giữa các lớp này sau, nhưng hiện tại, chúng tôi sẽ sử dụng HashModel.

Định nghĩa mô hình ngắn gọn

Hãy xem ví dụ này, mã Redis OM xác định Khách hàng và sử dụng nó để lưu dữ liệu vào Redis:

Định nghĩa mô hình ngắn gọn này ngay lập tức cung cấp cho bạn các phương thức như `get ()` và `save () '. Hậu trường, các phương pháp này quản lý dữ liệu trong Redis Hashes.

Redis OM còn làm được nhiều hơn thế. Nó cũng tạo ra các khóa chính duy nhất và có thể sắp xếp trên toàn cầu. Phần này rất hữu ích, vì vậy hãy để tôi giải thích cách hoạt động của nó.

Các khóa chính duy nhất trên toàn cầu

Redis OM tự động tạo khóa chính duy nhất trên toàn cầu cho mọi phiên bản mô hình. Bạn có thể sử dụng khóa chính này để lưu và truy xuất dữ liệu mô hình trong Redis.

Các khóa chính này được đảm bảo là duy nhất trên toàn cầu, nhưng chúng cũng được tạo hoàn toàn trong ứng dụng khách mà không cần bất kỳ yêu cầu nào đối với Redis. Chúng cũng có thể phân loại và nhỏ gọn. Tất cả những điều này đều có thể thực hiện được nhờ vào thông số kỹ thuật Số nhận dạng có thể phân loại theo ngôn ngữ học duy nhất (ULID).

Giới thiệu Redis OM cho Python Các khóa chính của Redis OM là ULID, do python-ulid. Bạn có thể đọc thêm về đặc tả ULID tại đây. Nó rất tuyệt!

Tuy nhiên, bên cạnh các tính năng bền bỉ này, bạn cũng nhận được xác thực dữ liệu với Pydantic. Hãy cùng tìm hiểu cách xác thực hoạt động.

Xác thực dữ liệu với Pydantic

Một điểm khác biệt giữa Redis và cơ sở dữ liệu quan hệ là Redis không thực thi một lược đồ, vì vậy bạn có thể viết một chuỗi trong Redis và sau đó ghi đè nó bằng một số sau đó. Điều này linh hoạt hơn cơ sở dữ liệu quan hệ, nhưng cũng có nghĩa là các ứng dụng chịu trách nhiệm xác thực dữ liệu.

Chúng tôi nghĩ rằng bạn không cần phải tìm ra cách tốt nhất để xử lý xác thực trong các ứng dụng của mình, vì vậy mọi mô hình Redis OM cũng là một mô hình Pydantic. Điều này có nghĩa là bạn nhận được xác thực Pydantic dựa trên gợi ý loại trong mô hình của bạn và bạn có thể kiểm soát xác thực thông qua các móc Pydantic chuẩn, bao gồm cả trình xác thực tùy chỉnh.

Dưới đây là một số mã ví dụ cho thấy cách xác thực hoạt động:

Nếu Redis OM cho Python chỉ cung cấp cho bạn các phương pháp ổn định và xác thực dữ liệu, thì tôi nghĩ nó khá tuyệt. Nhưng chúng tôi muốn xử lý sự phức tạp hơn nữa cho bạn và để làm được điều đó, chúng tôi cần giúp bạn viết các truy vấn nhanh giống như bạn làm với ORM. Tiếp theo, tôi sẽ nói về cách hoạt động của những truy vấn này.

Biểu thức truy vấn thông thạo

ORM không chỉ cung cấp cho bạn các mô hình khai báo. Họ cũng cung cấp một API cho phép bạn truy vấn dữ liệu dựa trên các thuộc tính khác hơn khóa chính. Hãy tưởng tượng việc tìm kiếm tất cả khách hàng ở một độ tuổi nhất định, những khách hàng đã đăng ký trước một ngày nhất định, v.v.

Ngoài ra, Redis rất giỏi trong việc tra cứu dữ liệu bằng khóa chính. Xét cho cùng, nó là một kho lưu trữ khóa-giá trị có các giá trị là cấu trúc dữ liệu. Nhưng Redis không bao gồm hệ thống truy vấn và lập chỉ mục phụ, vì vậy nếu bạn muốn lập chỉ mục và truy vấn dữ liệu, bạn phải tự quản lý chỉ mục theo những cách phức tạp.

Ở đây một lần nữa, chúng tôi muốn giải quyết sự phức tạp này cho bạn, vì vậy chúng tôi đã xây dựng các biểu thức truy vấn thông thạo trên đầu mô-đun Redis thiết yếu:RediSearch. RediSearch là một mô-đun có sẵn nguồn cung cấp cho bạn khả năng truy vấn và lập chỉ mục còn thiếu trong Redis.

Hãy xem điều gì sẽ xảy ra nếu chúng tôi đánh dấu một vài trường trên Khách hàng của chúng tôi mô hình là `index =True`. Bây giờ, chúng ta có thể sử dụng mô hình để truy vấn:

Cú pháp biểu thức này có thể trông quen thuộc— nó là sự pha trộn của mọi thứ tôi thích về Peewee, SQLAlchemy và Django ORM.

Mô hình nhúng

Khi bạn lập mô hình dữ liệu phức tạp với Redis, chắc chắn bạn muốn lưu trữ dữ liệu nhúng. Nếu bạn đang lập mô hình dữ liệu khách hàng bằng Redis Hashes, bạn có thể muốn lưu trữ dữ liệu như địa chỉ giao hàng của khách hàng trong Hash của từng khách hàng. Rất tiếc, Redis Hashes không thể lưu trữ các vùng chứa lồng nhau như Danh sách, Bộ hoặc các hàm băm khác, vì vậy điều này không hoạt động.

Đây là nơi lưu trữ dữ liệu dưới dạng một đối tượng JSON gốc có thể có rất nhiều ý nghĩa. Nếu bạn lập mô hình dữ liệu khách hàng dưới dạng tài liệu JSON, bạn có thể nhúng bất kỳ thứ gì bạn muốn vào bên trong bản ghi cho một khách hàng.

Tuy nhiên, Redis không hỗ trợ JSON. Đây chính là lý do tại sao chúng tôi tạo mô-đun RedisJSON có sẵn nguồn. RedisJSON giúp bạn có thể sử dụng Redis làm cơ sở dữ liệu tài liệu, lưu trữ và truy vấn các đối tượng JSON phức tạp một cách dễ dàng.

Với Redis OM cho Python, nếu phiên bản Redis của bạn đã cài đặt RedisJSON, bạn có thể sử dụng JsonModel lớp. Lớp mô hình này cho phép bạn nhúng JsonModels trong JsonModels khác . Hãy tưởng tượng khách hàng có một loạt các đơn đặt hàng, mỗi đơn hàng có một loạt các mặt hàng, v.v.

Dưới đây là các mô hình JSON được nhúng trông như thế nào với Redis OM cho Python:

Bạn không chỉ có được sự linh hoạt để lưu trữ các đối tượng JSON phức tạp, mà Redis OM cho Python còn biết các cấu trúc lồng nhau này và cho phép bạn viết các biểu thức truy vấn dựa trên chúng. Tuyệt vời!

Dùng thử Redis OM cho Python

Tôi hy vọng bạn có thể cho biết tôi hào hứng như thế nào về Redis OM cho Python. Tôi đã làm việc để tập hợp một số tính năng tốt nhất của hệ sinh thái Python hiện tại lại với nhau để xử lý sự phức tạp cho các nhà phát triển Redis mà theo tôi, không ai phải xử lý.

Nếu tôi thu hút được sự quan tâm của bạn, hãy xem hướng dẫn bắt đầu. Redis OM cho Python đang ở giai đoạn rất sớm, mà chúng tôi gọi là “Xem trước”. Vì vậy, có những điểm khó khăn, bạn sẽ gặp phải lỗi và chúng tôi vẫn đang làm việc để cung cấp tài liệu đầy đủ. Nhưng tầm nhìn vẫn ở đó, và tôi khuyến khích bạn nên kiểm tra nó.

Cuối cùng, tôi sẽ nói rằng chúng tôi đã bắt đầu với các mô hình dữ liệu khai báo, nhưng chúng tôi còn rất nhiều điều mà chúng tôi muốn xây dựng— cả cho mô hình dữ liệu và hơn thế nữa. Hãy theo dõi để biết thêm các tính năng thú vị của Redis OM!