การแมปวัตถุที่ใช้งานง่ายและการค้นหาอย่างคล่องแคล่วสำหรับ Redis และ Python
ฉันตื่นเต้นที่จะแนะนำ Redis OM สำหรับ Python ซึ่งเป็นไลบรารี่ใหม่ที่เน้นนักพัฒนาซอฟต์แวร์ที่มีประสิทธิภาพสำหรับ Redis ที่ให้คุณลักษณะต่างๆ เช่น การทำแผนที่วัตถุ การตรวจสอบความถูกต้องของข้อมูล และอื่นๆ
การเปิดตัวตัวอย่าง Redis OM สำหรับ Python นี้ช่วยให้คุณสร้างโมเดลข้อมูลด้วยโมเดลการประกาศ ที่จะรู้สึกเหมือนอยู่บ้านสำหรับผู้ใช้โปรแกรมสร้างแผนที่เชิงวัตถุ (ORM) เช่น SQLAlchemy, Peewee และ Django ORM
แต่มีมากกว่านั้น! โมเดล Redis OM ทุกรุ่นยังเป็นโมเดล Pydantic ด้วย ดังนั้นคุณจึงสามารถใช้คุณสมบัติการตรวจสอบความถูกต้องของข้อมูลที่มีประสิทธิภาพและขยายได้ของ Pydantic นอกจากนี้ โมเดล Redis OM จะทำงานได้ทุกที่ที่ไลบรารี Python คาดหวังให้เป็นโมเดล Pydantic ดังนั้น คุณสามารถใช้โมเดล Redis OM กับ FastAPI เพื่อตรวจสอบความถูกต้องและสร้างเอกสาร API สำหรับปลายทาง API ได้โดยอัตโนมัติ
คุณสมบัติอีกอย่างที่ฉันชอบคือ Redis OM รองรับนิพจน์การสืบค้นที่คล่องแคล่วและดัชนีรอง Redis OM สำหรับ Python ยังสนับสนุนทั้งแบบอะซิงโครนัส (asyncio) และการเขียนโปรแกรมแบบซิงโครนัสในไลบรารีเดียวกัน และรายการฟีเจอร์สุดเจ๋งก็ดำเนินต่อไป!
อ่านต่อเพื่อเรียนรู้เกี่ยวกับวิธีที่ฉันสร้างห้องสมุดนี้ และรายละเอียดเบื้องหลังบางประการเกี่ยวกับคุณสมบัติหลักบางประการ หรือถ้าคุณพร้อมที่จะเล่นกับโค้ดแล้ว ให้ดูบทแนะนำการเริ่มต้นใช้งาน
แบบจำลองการประกาศสำหรับ Redis
นักพัฒนามักจะเข้าถึง Redis ผ่านไลบรารีของไคลเอ็นต์เพื่อสร้าง โครงสร้างข้อมูลของ Redis (เช่น แฮช) แล้วตามด้วย คำสั่ง ต่อต้านพวกเขา
หลายคนชอบอินเทอร์เฟซที่ใช้คำสั่งนี้เพราะมันง่ายกว่าการเขียนแบบสอบถาม SQL ด้วยฐานข้อมูลเชิงสัมพันธ์ แต่ครั้งสุดท้ายที่คุณเขียน SQL คือเมื่อไหร่? นักพัฒนาซอฟต์แวร์ที่ใช้เว็บเฟรมเวิร์กสมัยใหม่มักจะใช้ ORM แทน โดยเฉพาะกับโมเดลที่เปิดเผย
สิ่งที่ฉันชอบเกี่ยวกับ ORM คือ การขจัดความซับซ้อนมากมายที่ไม่เกี่ยวข้องกับปัญหาที่คุณกำลังพยายามแก้ไข เราได้สร้าง Redis OM เพื่อให้คุณได้รับประสบการณ์แบบเดียวกันกับ Redis ในที่สุด
แฮชหรือ JSON แล้วแต่คุณ
Redis OM สำหรับ Python มีคลาสโมเดลพื้นฐานสองคลาสที่คุณสามารถใช้สร้างโมเดลของคุณ:HashModel และ JsonModel
ผู้ใช้โอเพ่นซอร์ส Redis สามารถใช้ HashModel เพื่อจัดเก็บข้อมูลใน Redis เป็นแฮช ในขณะที่ผู้ใช้ที่ติดตั้งโมดูล RedisJSON Redis หรือกำลังใช้ Redis Enterprise Cloud หรือซอฟต์แวร์สามารถใช้ JsonModel เพื่อเก็บข้อมูลโดยกำเนิดเป็นวัตถุ JSON ฉันจะพูดถึงความแตกต่างระหว่างคลาสเหล่านี้ในภายหลัง แต่ตอนนี้ เราจะใช้ HashModel
คำจำกัดความของแบบจำลองที่กระชับ
ดูตัวอย่างโค้ด Redis OM ที่กำหนด ลูกค้า จำลองและใช้เพื่อบันทึกข้อมูลไปยัง Redis:
คำจำกัดความของโมเดลที่รัดกุมนี้จะให้เมธอดเช่น `get()` และ `save()` แก่คุณในทันที เบื้องหลัง วิธีการเหล่านี้จะจัดการข้อมูลใน Redis Hashes
Redis OM ทำได้มากกว่านั้นมาก นอกจากนี้ยังสร้างคีย์หลักที่ไม่ซ้ำกันและจัดเรียงได้ทั่วโลก ส่วนนี้มีประโยชน์มาก ให้ฉันอธิบายวิธีการทำงาน
คีย์หลักที่ไม่ซ้ำกันทั่วโลก
Redis OM จะสร้างคีย์หลักที่ไม่ซ้ำกันทั่วโลกโดยอัตโนมัติสำหรับอินสแตนซ์ทุกรุ่น คุณสามารถใช้คีย์หลักนี้เพื่อบันทึกและเรียกข้อมูลโมเดลใน Redis
คีย์หลักเหล่านี้รับประกันว่าจะไม่ซ้ำกันทั่วโลก แต่ยังสร้างขึ้นทั้งหมดในไคลเอนต์โดยไม่ต้องร้องขอ Redis ใดๆ พวกเขายังจัดเรียงได้และกะทัดรัด ทั้งหมดนี้เป็นไปได้ด้วยข้อกำหนด Universally Unique Lexicographically Sortable Identifiers (ULID)
คีย์หลัก Redis OM คือ ULID ซึ่งได้รับความอนุเคราะห์จาก python-ulid คุณสามารถอ่านเพิ่มเติมเกี่ยวกับข้อกำหนด ULID ได้ที่นี่ มันเจ๋งมาก!นอกเหนือจากคุณสมบัติการคงอยู่เหล่านี้แล้ว คุณยังได้รับการตรวจสอบความถูกต้องของข้อมูลด้วย Pydantic มาดูกันว่าการตรวจสอบทำงานอย่างไร
การตรวจสอบข้อมูลด้วย Pydantic
ข้อแตกต่างอย่างหนึ่งระหว่าง Redis และฐานข้อมูลเชิงสัมพันธ์คือ Redis ไม่ได้บังคับใช้สคีมา ดังนั้นคุณจึงสามารถเขียนสตริงใน Redis แล้วเขียนทับด้วยตัวเลขในภายหลัง ซึ่งมีความยืดหยุ่นมากกว่าฐานข้อมูลเชิงสัมพันธ์ แต่ยังหมายถึงแอปพลิเคชันมีหน้าที่ตรวจสอบความถูกต้องของข้อมูลด้วย
เราคิดว่าคุณไม่ควรต้องหาวิธีที่ดีที่สุดในการจัดการการตรวจสอบความถูกต้องในแอปพลิเคชันของคุณ ดังนั้นโมเดล Redis OM ทุกรุ่นจึงเป็นโมเดล Pydantic ด้วยเช่นกัน ซึ่งหมายความว่าคุณจะได้รับการตรวจสอบ Pydantic ตามคำแนะนำประเภทในโมเดลของคุณ และคุณควบคุมการตรวจสอบผ่าน Pydantic hook มาตรฐานได้ รวมถึงเครื่องมือตรวจสอบที่กำหนดเอง
นี่คือตัวอย่างโค้ดบางส่วนที่แสดงวิธีการตรวจสอบความถูกต้อง:
หาก Redis OM สำหรับ Python ให้วิธีการคงอยู่และการตรวจสอบความถูกต้องของข้อมูลแก่คุณเท่านั้น ฉันคิดว่ามันค่อนข้างเจ๋ง แต่เราต้องการจัดการกับความซับซ้อนที่มากขึ้นให้กับคุณ และในการทำเช่นนั้น เราจำเป็นต้องช่วยคุณเขียนข้อความค้นหาที่สื่อความหมายได้เหมือนกับที่คุณทำกับ ORM ต่อไป ฉันจะพูดถึงวิธีการทำงานของข้อความค้นหาเหล่านี้
นิพจน์การค้นหาที่คล่องแคล่ว
ORM ไม่เพียงแต่ให้แบบจำลองที่เปิดเผยเท่านั้น พวกเขายังจัดเตรียม API ที่ช่วยให้คุณค้นหาข้อมูลตามแอตทริบิวต์ อื่นๆ กว่าคีย์หลัก ลองนึกภาพหาลูกค้าที่อายุเกินที่กำหนด ลูกค้าที่สมัครก่อนวันที่กำหนด ฯลฯ
นอกกรอบ Redis นั้นยอดเยี่ยมในการค้นหาข้อมูลด้วยคีย์หลัก ท้ายที่สุดแล้วมันคือที่เก็บคีย์-ค่าที่มีค่าเป็นโครงสร้างข้อมูล แต่ Redis ไม่ได้รวมระบบการสืบค้นและการจัดทำดัชนีรอง ดังนั้นหากคุณต้องการจัดทำดัชนีและสืบค้นข้อมูล คุณต้องจัดการดัชนีด้วยตนเองด้วยวิธีที่ซับซ้อน
อีกครั้ง เราต้องการจัดการกับความซับซ้อนนี้ให้กับคุณ เราจึงสร้างนิพจน์การค้นหาอย่างคล่องแคล่วที่ด้านบนของโมดูล Redis ที่จำเป็น:RediSearch RediSearch เป็นโมดูลที่มีแหล่งที่มาซึ่งให้ความสามารถในการสืบค้นและจัดทำดัชนีที่ขาดหายไปจาก Redis
มาดูกันว่าจะเกิดอะไรขึ้นหากเราทำเครื่องหมายบางฟิลด์ใน ลูกค้า . ของเรา โมเดลเป็น `index=True` ตอนนี้ เราสามารถใช้โมเดลเพื่อสอบถาม:
ไวยากรณ์นิพจน์นี้อาจดูคุ้นเคย ซึ่งเป็นการผสมผสานของทุกอย่างที่ฉันชอบเกี่ยวกับ Peewee, SQLAlchemy และ Django ORM
โมเดลแบบฝัง
เมื่อคุณสร้างแบบจำลองข้อมูลที่ซับซ้อนด้วย Redis คุณย่อมต้องการจัดเก็บข้อมูลที่ฝังไว้อย่างหลีกเลี่ยงไม่ได้ หากคุณกำลังสร้างแบบจำลองข้อมูลลูกค้าโดยใช้ Redis Hash คุณอาจต้องการจัดเก็บข้อมูล เช่น ที่อยู่สำหรับจัดส่งของลูกค้าภายใน Hash ของลูกค้าแต่ละราย ขออภัย Redis Hashes ไม่สามารถจัดเก็บคอนเทนเนอร์ที่ซ้อนกัน เช่น รายการ ชุด หรือแฮชอื่นๆ ดังนั้นจึงใช้ไม่ได้
นี่คือจุดที่การจัดเก็บข้อมูลเป็นวัตถุ JSON ดั้งเดิมนั้นสมเหตุสมผลมาก หากคุณสร้างแบบจำลองข้อมูลลูกค้าเป็นเอกสาร JSON คุณสามารถฝังสิ่งที่คุณต้องการภายในบันทึกสำหรับลูกค้ารายเดียวได้
อย่างไรก็ตาม Redis ไม่รองรับ JSON โดยกำเนิด นี่คือเหตุผลที่เราสร้างโมดูล RedisJSON ที่พร้อมใช้งานต้นทาง RedisJSON ทำให้สามารถใช้ Redis เป็นฐานข้อมูลเอกสาร จัดเก็บและสืบค้นวัตถุ JSON ที่ซับซ้อนได้อย่างง่ายดาย
ด้วย Redis OM สำหรับ Python หากอินสแตนซ์ Redis ของคุณมี RedisJSON ติดตั้งอยู่ คุณสามารถใช้ JsonModel ระดับ. คลาสโมเดลนี้ให้คุณฝัง JsonModels ภายใน JsonModels อื่นๆ . ลองนึกภาพลูกค้ามีอาร์เรย์ของคำสั่งซื้อ ซึ่งแต่ละรายการมีรายการต่างๆ เป็นต้น
นี่คือลักษณะโมเดล JSON แบบฝังตัวกับ Redis OM สำหรับ Python:
ไม่เพียงแต่คุณจะได้รับความยืดหยุ่นในการจัดเก็บออบเจ็กต์ JSON ที่ซับซ้อนเท่านั้น แต่ Redis OM สำหรับ Python ยังรับรู้ถึงโครงสร้างที่ซ้อนกันเหล่านี้ และให้คุณเขียนนิพจน์คิวรีเทียบกับพวกมันได้ สุดยอด!
ลองใช้ Redis OM สำหรับ Python
ฉันหวังว่าคุณจะรู้ว่าฉันตื่นเต้นกับ Redis OM สำหรับ Python แค่ไหน ฉันได้ทำงานเพื่อนำระบบนิเวศ Python ที่ดีที่สุดในปัจจุบันมารวมกันเพื่อจัดการกับความซับซ้อนสำหรับนักพัฒนา Redis ซึ่งในความคิดของฉัน ไม่มีใครควรต้องรับมือ
หากฉันทำให้คุณสนใจ โปรดดูบทแนะนำการเริ่มต้นใช้งาน Redis OM สำหรับ Python อยู่ใน ระยะเริ่มต้นมาก ซึ่งเราเรียกว่า “การแสดงตัวอย่าง” ดังนั้นจึงมีจุดคร่าวๆ คุณจะพบข้อบกพร่อง และเรายังคงดำเนินการส่งเอกสารฉบับสมบูรณ์ แต่วิสัยทัศน์อยู่ที่นั่น และฉันขอแนะนำให้คุณลองดู
สุดท้าย ฉันจะบอกว่าเราเริ่มต้นด้วยตัวแบบข้อมูลที่เปิดเผย แต่เรายังมีอีกมากที่เราต้องการสร้าง—ทั้งสำหรับการสร้างแบบจำลองข้อมูลและอื่น ๆ คอยติดตามฟีเจอร์ Redis OM ที่น่าตื่นเต้น!