Redis
 Computer >> コンピューター >  >> プログラミング >> Redis

Python用のRedisOMの紹介

RedisとPythonの直感的なオブジェクトマッピングと流暢なクエリ

オブジェクトマッピングやデータ検証などの機能を提供する、Redis用の強力な新しい開発者中心のライブラリであるRedis OMforPythonを紹介できることをうれしく思います。

このRedisOMfor Pythonのプレビューリリースでは、宣言型モデルを使用してデータをモデル化できます。 これは、SQLAlchemy、Peewee、Django ORMなどのオブジェクトリレーショナルマッパー(ORM)のユーザーにぴったりです。

しかし、もっとあります!すべてのRedisOMモデルはPydanticモデルでもあるため、Pydanticの堅牢で拡張可能なデータ検証機能を使用できます。さらに、Redis OMモデルは、PythonライブラリがPydanticモデルを期待する場所であればどこでも機能します。そのため、FastAPIでRedis OMモデルを使用して、APIエンドポイントのAPIドキュメントを自動的に検証および生成できます。

私の心に大切なもう1つの機能は、RedisOMが流暢なクエリ式とセカンダリインデックスをサポートしていることです。 Redis OM for Pythonは、同じライブラリで非同期(非同期)プログラミングと同期プログラミングの両方をサポートします。そして、すばらしい機能のリストは続きます!

このライブラリをどのように構築したか、およびいくつかの主要な機能に関する舞台裏の詳細については、読み続けてください。または、コードを試す準備ができている場合は、入門チュートリアルを確認してください。

Redisの宣言型モデル

開発者は通常、クライアントライブラリを介してRedisにアクセスし、Redisデータ構造を作成します。 (例:ハッシュ)次にコマンド それらに対して。

リレーショナルデータベースを使用してSQLクエリを作成するよりも簡単なため、多くの人がこのコマンドベースのインターフェースを楽しんでいます。しかし、最後にSQLを作成したのはいつですか。最新のWebフレームワークを使用している開発者は、特に宣言型モデルでは、代わりにORMを使用する傾向があります。

ORMについて私が気に入っているのは、解決しようとしている問題とは関係のない多くの複雑さを取り除くことです。 Redis OMを作成したので、最終的にRedisで同じ体験をすることができます。

ハッシュまたはJSON、選択

Redis OM for Pythonには、モデルの構築に使用できる2つの基本モデルクラスが含まれています。 HashModel およびJsonModel。

オープンソースのRedisユーザーはHashModelを使用できます データをハッシュとしてRedisに保存し、RedisJSON Redisモジュールをインストールしているユーザー、またはRedisEnterpriseCloudまたはソフトウェアを使用しているユーザーはJsonModelを使用できます。 データをJSONオブジェクトとしてネイティブに保存します。これらのクラスの違いについては後で詳しく説明しますが、ここではHashModelを使用します。

簡潔なモデル定義

顧客を定義するこの例のRedisOMコードを見てください。 モデル化し、それを使用してデータをRedisに保存します:

この簡潔なモデル定義により、 `get()`や `save()`などのメソッドがすぐに得られます。舞台裏では、これらのメソッドはRedisハッシュのデータを管理します。

ただし、RedisOMはさらに多くのことを行います。また、グローバルに一意で並べ替え可能な主キーを生成します。この部分は非常に便利なので、どのように機能するかを説明しましょう。

グローバルに一意の主キー

Redis OMは、すべてのモデルインスタンスに対してグローバルに一意の主キーを自動的に生成します。この主キーを使用して、Redisでモデルデータを保存および取得できます。

これらの主キーはグローバルに一意であることが保証されていますが、Redisへのリクエストなしで完全にクライアントで生成されます。また、並べ替え可能でコンパクトです。これはすべて、Universally Unique Lexicographically Sortable Identifiers(ULID)仕様のおかげで可能です。

Python用のRedisOMの紹介 Redis OMの主キーはULIDであり、python-ulidの厚意により提供されています。 ULID仕様の詳細については、こちらをご覧ください。とてもかっこいいです!

ただし、これらの永続性機能とは別に、Pydanticを使用したデータ検証も可能です。検証がどのように機能するかを掘り下げてみましょう。

Pydanticによるデータ検証

Redisとリレーショナルデータベースの違いの1つは、Redisがスキーマを強制しないため、Redisで文字列を記述し、後で数値で上書きできることです。これはリレーショナルデータベースよりも柔軟性がありますが、アプリケーションがデータ検証を担当することも意味します。

アプリケーションで検証を処理するための最良の方法を見つける必要はないと考えているため、すべてのRedisOMモデルはPydanticモデルでもあります。これは、モデルのタイプヒントに基づいてPydantic検証を取得し、カスタムバリデーターを含む標準のPydanticフックを介して検証を制御できることを意味します。

検証がどのように機能するかを示すサンプルコードを次に示します。

Redis OM for Pythonが永続化メソッドとデータ検証のみを提供した場合、それはかなりクールだったと思います。しかし、私たちはあなたのためにさらに複雑な処理をしたいと思っていました。そのためには、ORMの場合と同じように表現力豊かなクエリを作成できるようにする必要がありました。次に、これらのクエリがどのように機能するかについて説明します。

流暢なクエリ式

ORMは、宣言型モデルを提供するだけではありません。また、属性 otherに基づいてデータをクエリできるAPIも提供します。 主キーより。特定の年齢以上のすべての顧客、特定の日付より前にサインアップした顧客などを見つけることを想像してみてください。

箱から出してすぐに、Redisは主キーを使用してデータを検索するのに優れています。結局のところ、値がデータ構造であるKey-Valueストアです。ただし、Redisにはクエリとセカンダリインデックスシステムが含まれていないため、データのインデックス作成とクエリを行う場合は、複雑な方法でインデックスを自分で管理する必要があります。

ここでも、この複雑さを処理したかったので、重要なRedisモジュールであるRediSearchの上に流暢なクエリ式を構築しました。 RediSearchは、Redisに欠けているクエリ機能とインデックス機能を提供するソース利用可能なモジュールです。

顧客のいくつかのフィールドにマークを付けるとどうなるか見てみましょう `index=True`としてモデル化します。これで、モデルを使用してクエリを実行できます:

この式の構文は見覚えがあるかもしれません。これは、Peewee、SQLAlchemy、およびDjangoORMについて私が気に入っているすべてのものをブレンドしたものです。

組み込みモデル

Redisを使用して複雑なデータをモデル化する場合、必然的に埋め込みデータを保存する必要があります。 Redisハッシュを使用して顧客データをモデル化する場合は、顧客の配送先住所などのデータを個々の顧客のハッシュ内に保存することをお勧めします。残念ながら、Redisハッシュはリスト、セット、その他のハッシュなどのネストされたコンテナを保存できないため、これは機能しません。

ここで、データをネイティブJSONオブジェクトとして保存することが非常に理にかなっています。顧客データをJSONドキュメントとしてモデル化する場合、1人の顧客のレコード内に必要なものを埋め込むことができます。

ただし、RedisはJSONをネイティブにサポートしていません。これが、ソースで利用可能なRedisJSONモジュールを作成した理由です。 RedisJSONを使用すると、Redisをドキュメントデータベースとして使用して、複雑なJSONオブジェクトを簡単に保存およびクエリできます。

Redis OM for Pythonでは、RedisインスタンスにRedisJSONがインストールされている場合、 JsonModelを使用できます。 クラス。このモデルクラスを使用すると、 JsonModelsを埋め込むことができます 他のJsonModels内 。一連の注文があり、それぞれに一連のアイテムがあるなどの顧客を想像してみてください。

埋め込まれたJSONモデルは、Redis OMforPythonでどのように表示されますか。

複雑なJSONオブジェクトを柔軟に保存できるだけでなく、Redis OM for Pythonはこれらのネストされた構造を認識しており、それらに対してクエリ式を記述できます。素晴らしい!

Python用のRedisOMを試す

私がRedisOMforPythonにどれほど興奮しているかを教えていただければ幸いです。私は、現在のPythonエコシステムの最高のものをいくつかまとめて、Redis開発者の複雑さを処理するために取り組んできました。私の意見では、誰も対処する必要はありません。

興味をそそられた場合は、入門チュートリアルをご覧ください。 Redis OM for Pythonは、非常に初期の段階です。 これを「プレビュー」と呼びます。そのため、大まかな箇所があり、バグが発生する可能性がありますが、完全なドキュメントの提供に引き続き取り組んでいます。しかし、ビジョンはそこにあります。ぜひチェックしてみてください。

最後に、宣言型データモデルから始めましたが、データモデリングとそれ以降の両方で構築したいものがたくさんあります。よりエキサイティングなRedisOM機能にご期待ください!


  1. RedisLaunchpadの紹介

    Redisコミュニティは、常にRedisの優れた点の中心にあります。このグループのおかげで、Redisは5回連続で、StackOverflowの開発者調査で最も愛されているデータベースとして選ばれました。 Redisの人気が高まるにつれ、開発者コミュニティ、業界、地域全体のユースケースも増えます。 コミュニティの愛情を込めて、単一のビジョンを通じてRedisのパワーを強化、成長、活用することが、RedisLaunchpadを夢見た理由です。本日、Redisで私たちとあなたが構築した75以上のサンプルアプリケーションのハブであるRedisLaunchpadをご紹介します。 Redis Laun

  2. ストラップ用のサーバーレスRedisキャッシング

    プロジェクトを時間どおりに提供するということは、通常、既存のテクノロジーを可能な限り活用する必要があることを意味します。カスタム実装につながるすべての決定は、独自のソリューションを維持する必要があることも考慮する必要があります。これが、Strapiのようなオープンソースツールが次のプロジェクトのRESTAPIを構築するための方法である理由です。 ストラピは最先端のヘッドレスCMSです。グラフィカルインターフェイスを使用してスキーマを定義できるため、技術者でない人でもデータをモデル化できます。開発チームは、バックエンドの実装について心配することなく、Webアプリとモバイルアプリの構築と新機能の