Redis 및 Python을 위한 직관적인 개체 매핑 및 Fluent 쿼리
개체 매핑, 데이터 유효성 검사 등과 같은 기능을 제공하는 강력하고 새로운 Redis용 개발자 중심 라이브러리인 Python용 Redis OM을 소개하게 되어 기쁩니다.
Python용 Redis OM의 이 미리 보기 릴리스를 사용하면 선언적 모델을 사용하여 데이터를 모델링할 수 있습니다. SQLAlchemy, Peewee 및 Django ORM과 같은 ORM(객체 관계형 매퍼) 사용자에게는 집처럼 느껴질 것입니다.
하지만 더 있습니다! 모든 Redis OM 모델은 Pydantic 모델이기도 하므로 Pydantic의 강력하고 확장 가능한 데이터 유효성 검사 기능을 사용할 수 있습니다. 또한 Redis OM 모델은 Python 라이브러리가 Pydantic 모델을 기대하는 모든 곳에서 작동합니다. 따라서 FastAPI와 함께 Redis OM 모델을 사용하여 API 엔드포인트에 대한 API 문서를 자동으로 검증하고 생성할 수 있습니다.
내 마음에 드는 또 다른 기능은 Redis OM이 유창한 쿼리 표현식과 보조 인덱스를 지원한다는 것입니다. Python용 Redis OM은 동일한 라이브러리에서 비동기(asyncio) 및 동기 프로그래밍도 지원합니다. 그리고 멋진 기능 목록은 계속됩니다!
계속해서 이 라이브러리를 구축한 방법과 몇 가지 주요 기능에 대한 비하인드 스토리 세부 정보에 대해 알아보세요. 또는 코드를 사용할 준비가 되었다면 시작하기 튜토리얼을 확인하세요.
Redis용 선언적 모델
개발자는 일반적으로 클라이언트 라이브러리를 통해 Redis에 액세스하여 Redis 데이터 구조를 생성합니다. (예:해시) 및 명령 반대합니다.
많은 사람들이 이 명령 기반 인터페이스를 좋아합니다. 관계형 데이터베이스로 SQL 쿼리를 작성하는 것보다 간단하기 때문입니다. 그러나 마지막으로 SQL을 작성한 것이 언제였습니까? 최신 웹 프레임워크를 사용하는 개발자는 특히 선언적 모델과 함께 ORM을 대신 사용하는 경향이 있습니다.
ORM이 마음에 드는 점은 해결하려는 문제와 관련이 없는 많은 복잡성을 제거한다는 것입니다. Redis와 동일한 경험을 할 수 있도록 Redis OM을 만들었습니다.
해시 또는 JSON, 선택
Python용 Redis OM에는 모델을 빌드하는 데 사용할 수 있는 두 가지 기본 모델 클래스가 포함되어 있습니다. HashModel 및 JsonModel.
오픈 소스 Redis 사용자는 HashModel을 사용할 수 있습니다. Redis에 데이터를 해시로 저장하기 위해 RedisJSON Redis 모듈이 설치되어 있거나 Redis Enterprise Cloud 또는 소프트웨어를 사용하는 사용자는 JsonModel을 사용할 수 있습니다. 기본적으로 JSON 객체로 데이터를 저장합니다. 이 클래스의 차이점에 대해서는 나중에 더 이야기하겠지만 지금은 HashModel을 사용하겠습니다.
간결한 모델 정의
고객 모델을 만들고 Redis에 데이터를 저장하는 데 사용합니다.
이 간결한 모델 정의는 `get()` 및 `save()`와 같은 메서드를 즉시 제공합니다. 이면에서 이러한 메서드는 Redis 해시의 데이터를 관리합니다.
Redis OM은 훨씬 더 많은 작업을 수행합니다. 또한 전역적으로 고유하고 정렬 가능한 기본 키를 생성합니다. 이 부분은 매우 유용하므로 작동 방식을 설명하겠습니다.
전역적으로 고유한 기본 키
Redis OM은 모든 모델 인스턴스에 대해 전역적으로 고유한 기본 키를 자동으로 생성합니다. 이 기본 키를 사용하여 Redis에서 모델 데이터를 저장하고 검색할 수 있습니다.
이러한 기본 키는 전역적으로 고유하다고 보장되지만 Redis에 대한 요청 없이 클라이언트에서 완전히 생성됩니다. 또한 분류가 가능하고 컴팩트합니다. 이 모든 것은 ULID(Universally Unique Lexicographically Sortable Identifiers) 사양 덕분에 가능합니다.
Redis OM 기본 키는 python-ulid에서 제공하는 ULID입니다. 여기에서 ULID 사양에 대한 자세한 내용을 읽을 수 있습니다. 정말 멋지네요!그러나 이러한 지속성 기능 외에도 Pydantic을 사용하여 데이터 유효성 검사를 받을 수도 있습니다. 유효성 검사가 어떻게 작동하는지 살펴보겠습니다.
Pydantic을 사용한 데이터 유효성 검사
Redis와 관계형 데이터베이스의 한 가지 차이점은 Redis가 스키마를 적용하지 않으므로 Redis에서 문자열을 작성한 다음 나중에 숫자로 덮어쓸 수 있다는 것입니다. 이는 관계형 데이터베이스보다 더 유연하지만 애플리케이션이 데이터 유효성 검사를 담당한다는 의미이기도 합니다.
애플리케이션에서 유효성 검사를 처리하는 가장 좋은 방법을 찾을 필요가 없다고 생각하므로 모든 Redis OM 모델도 Pydantic 모델입니다. 즉, 모델의 유형 힌트를 기반으로 Pydantic 유효성 검사를 받고 사용자 지정 유효성 검사기를 포함하여 표준 Pydantic 후크를 통해 유효성 검사를 제어할 수 있습니다.
다음은 유효성 검사가 작동하는 방식을 보여주는 몇 가지 예제 코드입니다.
Python용 Redis OM이 지속성 메서드와 데이터 유효성 검사만 제공했다면 꽤 훌륭했다고 생각합니다. 그러나 우리는 당신을 위해 훨씬 더 복잡한 것을 처리하고 싶었고 그렇게 하기 위해 당신이 ORM을 사용하는 것처럼 표현 쿼리를 작성하는 데 도움이 필요했습니다. 다음으로 이러한 쿼리가 작동하는 방식에 대해 이야기하겠습니다.
유창한 쿼리 표현
ORM은 단지 선언적 모델을 제공하지 않습니다. 또한 기타 속성을 기반으로 데이터를 쿼리할 수 있는 API를 제공합니다. 기본 키보다 특정 연령 이상의 모든 고객, 특정 날짜 이전에 가입한 고객 등을 찾는 것을 상상해 보세요.
기본적으로 Redis는 기본 키로 데이터를 찾는 데 탁월합니다. 결국 값이 데이터 구조인 키-값 저장소입니다. 그러나 Redis에는 쿼리 및 보조 인덱싱 시스템이 포함되어 있지 않으므로 데이터를 인덱싱하고 쿼리하려면 복잡한 방식으로 인덱스를 직접 관리해야 합니다.
여기서도 우리는 이러한 복잡성을 처리하기 위해 필수 Redis 모듈인 RediSearch 위에 유창한 쿼리 표현식을 구축했습니다. RediSearch는 Redis에 없는 쿼리 및 인덱싱 기능을 제공하는 소스 사용 가능한 모듈입니다.
고객 에 몇 개의 필드를 표시하면 어떻게 되는지 알아보겠습니다. 모델을 `index=True`로 지정합니다. 이제 모델을 사용하여 쿼리할 수 있습니다.
이 표현식 구문은 친숙해 보일 수 있습니다. 제가 Peewee, SQLAlchemy 및 Django ORM에 대해 좋아하는 모든 것을 혼합한 것입니다.
임베디드 모델
Redis로 복잡한 데이터를 모델링할 때 필연적으로 임베디드 데이터를 저장하고 싶을 것입니다. Redis 해시를 사용하여 고객 데이터를 모델링하는 경우 개별 고객의 해시 내에 고객의 배송 주소와 같은 데이터를 저장하고 싶을 수 있습니다. 불행히도 Redis 해시는 목록, 세트 또는 기타 해시와 같은 중첩 컨테이너를 저장할 수 없으므로 작동하지 않습니다.
여기에서 데이터를 기본 JSON 객체로 저장하는 것이 의미가 있습니다. 고객 데이터를 JSON 문서로 모델링하면 단일 고객에 대한 레코드에 원하는 것을 포함할 수 있습니다.
그러나 Redis는 기본적으로 JSON을 지원하지 않습니다. 이것이 바로 우리가 소스 사용 가능한 RedisJSON 모듈을 만든 이유입니다. RedisJSON을 사용하면 Redis를 문서 데이터베이스로 사용하여 복잡한 JSON 개체를 쉽게 저장하고 쿼리할 수 있습니다.
Redis OM for Python을 사용하면 Redis 인스턴스에 RedisJSON이 설치되어 있으면 JsonModel을 사용할 수 있습니다. 수업. 이 모델 클래스를 사용하면 JsonModels 다른 JsonModels 내 . 고객이 일련의 주문을 가지고 있다고 상상해 보십시오. 각 주문에는 일련의 항목 등이 있습니다.
Python용 Redis OM을 사용하는 임베디드 JSON 모델은 다음과 같습니다.
복잡한 JSON 객체를 유연하게 저장할 수 있을 뿐만 아니라 Python용 Redis OM은 이러한 중첩 구조를 인식하고 이에 대한 쿼리 표현식을 작성할 수 있습니다. 굉장합니다!
Python용 Redis OM 시도
제가 Redis OM for Python에 대해 얼마나 흥분했는지 알 수 있기를 바랍니다. 저는 Redis 개발자의 복잡성을 처리하기 위해 현재 Python 에코시스템의 장점 중 일부를 결합하여 아무도 처리할 필요가 없다고 생각합니다.
관심이 있다면 시작하기 튜토리얼을 확인하십시오. Python용 Redis OM은 매우 초기 단계입니다. 이를 '미리보기'라고 합니다. 따라서 거친 부분이 있고 버그가 발생하게 되며 완전한 문서를 제공하기 위해 계속 노력하고 있습니다. 하지만 그 비전은 거기에 있으므로 확인하시기 바랍니다.
마지막으로 선언적 데이터 모델로 시작했지만 데이터 모델링과 그 이상을 위해 구축하고 싶은 것이 훨씬 더 많다고 말하겠습니다. 더 흥미진진한 Redis OM 기능을 기대해 주세요!