Fluent API และ object model สำหรับ .NET และ Redis
Redis เป็นเทคโนโลยีเก๋ๆ ที่ถูกชื่นชอบโดยล้านๆ นักพัฒนา 2 เหตุผล: ความเร็วและความเรียบง่าย Redis ให้ native interface ที่直觉的 จัดระเบียบอย่างเป็นตรรกะเข้าโครงสร้างข้อมูลที่โปรแกรมเมอร์รู้จักแล้ว นอกจากนี้ โครงสร้างเหล่านั้นใช้งานง่ายและ optimize ได้อย่างลุ่มลึก มันคือการผสมผสานความเร็วและความเรียบง่ายสูงสุดที่เรามุ่งมั่นด้วยการปล่อย client library ใหม่สำหรับ .NET คือ Redis OM
Redis OM .NET คืออะไร?
Redis OM คือ object mapping และมากกว่านั้นสำหรับ Redis แรงจูงใจเบื้องหลัง Redis OM คือการตอบคำถาม “นักพัฒนาจะได้ประโยชน์สูงสุดจาก Redis โดยไม่ต้องเรียนคำสั่ง Redis ทั้งหมดอย่างไร?” สำหรับ preview release ครั้งแรก เรากำลังมุ่งตอบคำถาม “เราจะจัดเก็บและค้นหา domain objects ของเราใน Redis ได้อย่างไร?” Preview release ของ Redis OM .NET คือ object mapper, secondary index builder และ simplified powerful query builder ทั้งหมดนี้มุ่งช่วยให้คุณจัดเก็บและค้นหา domain objects ของคุณกับ Redis
Redis modules
Module API เป็น game changer สำหรับ Redis โมดูลเพิ่มความยืดหยุ่นทREMENDOUS ให้แพลตฟอร์มพร้อมให้ฟีเจอร์สำคัญบางอย่างสำหรับ Redis RedisJSON โดยเฉพาะปลดล็อกฟังก์ชันมหาศาล โดยเฉพาะเรื่อง secondary indexing และ document modeling แม้ Redis OM จะทำงานได้ดีกับ core Redis Redis OM จริงๆ แล้ว hit its stride เมื่อคุณเพิ่ม RedisJSON ใช้ประโยชน์เต็มที่จาก RedisJSON เพื่อสร้าง API ที่ทรงพลังและครบครันสำหรับการสร้างโมเดล objects และ query พวกเขาใน Redis
ความสามารถ
Preview version ของ Redis OM .NET มี 4 ความสามารถหลัก:
- Object modeling
- Index creation
- Fluent queries
- Fluent aggregations
วิธีการทำงาน
ก่อนเริ่มใช้ Redis OM คุณต้องติดตั้ง package ในโปรเจกต์ ทำได้โดยรัน
dotnet add package Redis.OMการเชื่อมต่อหลักภายใน Redis OM library อยู่ใน
RedisConnectionProviderProvider นี้ให้การเข้าถึง 3 objects ที่แตกต่างกันที่คุณใช้สื่อสารกับ Redis:
IRedisConnection
ให้คุณ interface กับ Redis โดยตรงใช้เมธอดExecute
และExecuteAsync
RedisCollection<T>
คือ collection ของ objects ที่มี generic type Interface นี้ให้ fluent query APIRedisAggregationSet<T>
ให้คุณสร้างและ execute aggregation pipelines ใน Redis ด้วย Fluent API
การเชื่อมต่อกับ Redis
เพื่อเชื่อมต่อ Redis OM กับ Redis ใน ASP.NET Core คุณควร inject instance ของ
RedisConnectionProviderเป็น singleton ทำได้โดยใช้ Redis URI ถ้าคุณใช้ .NET 6 หมายถึงเปิดไฟล์
program.csและเพิ่ม:
สำหรับ .NET 5 ที่ใช้ Startup.cs คุณสามารถเพิ่มต่อไปนี้ใน
Startup.ConfigureServices:
การสร้างโมเดลและค้นหา objects
RedisJSON ให้คุณจัดเก็บ JSON objects ใน Redis แบบ native และ query objects เหล่านั้น แต่เพื่อ query JSON ของคุณ คุณต้อง define indexes ก่อน เพื่อทำให้กระบวนการนี้ง่ายขึ้น เราได้นำ declarative model ใน Redis OM .NET มา ให้คุณกำหนด indexes ผ่าน declarative interface ถ้าคุณต้องการ declare class เพื่อจัดเก็บใน Redis และ index properties ของมัน คุณตกแต่ง class ด้วย attribute
Documentและแตกแต่ง properties ตัวละด้วย attributes
Indexedหรือ
Searchable
Indexedบ่งชี้ standard index ในขณะที่
Searchableใช้ได้กับ strings เท่านั้น และหมายความว่า property นั้นจะ queryable ด้วย full-text search ต่อไป คุณสามารถสร้าง index ใน Redis โดยส่ง type ที่ตกแต่งใหม่เข้าไปในเมธอด
IRedisConnection.CreateIndexดังนั้น เช่น ถ้าคุณอยาก declare Customer class พร้อม index คุณจะทำอย่างนี้:
การ Query
ด้วย index ที่สร้างแล้ว คุณสามารถใช้
RedisCollection<T>query objects ใน Redis ดังนั้น ถ้าคุณมี John จัดเก็บใน Redis เป็น Customer object คุณสามารถ query เขาได้:
คุณยังสามารถทำ range queries ได้ง่ายๆ ตัวอย่าง มาหา Customers ทั้งหมดที่ยังไม่ถึงอายุเกษียณ:
ด้วย
RedisCollectionและ RedisJSON คุณสามารถสร้าง rich complex queries ได้เหมือนปกติใน LINQ และ Redis OM จะจัดการการแปลงเป็นภาษา query ของ Redis ให้คุณ
Aggregations
นอกจาก querying แล้ว คุณสามารถใช้ Redis Aggregations สร้าง aggregation pipelines ที่ทำอะไรก็ได้ ตัวอย่าง สมมติคุณอยากหาอายุของแต่ละ customer ในอีก 3 ปี คุณทำได้ด้วย arithmetic operation ง่ายๆ ภายใน
Applyexpression ซึ่งจะแปลงเป็น aggregation pipeline ที่ formatted อย่างถูกต้องใน Redis:
คุณยังสามารถ group records และคำนวณ summary statistics ได้ ดังนั้นถ้าคุณอยาก group customers โดยนามสกุล คุณสามารถคำนวณ summary statistics ได้ ตัวอย่าง นี่คือวิธีคำนวณ average age:
สรุป
นี่คือภาพรวมสั้นๆ ของความสามารถ Redis OM สำหรับ .NET ถ้าอยากเรียนรู้เพิ่มเติม คุณสามารถดู tutorial และอ่าน API docs เราวางแผนเพิ่มฟีเจอร์มากขึ้นใน Redis.OM เร็วๆ นี้ และเพื่อนั้น เราอยากได้ feedback จากชุมชน มาลองใช้ดู หากเจอบั๊กหรือคิดถึงฟีเจอร์ที่อยากเพิ่ม เปิด issue ใน GitHub และโดยธรรมชาติ เรายินดีต้อนรับ contributions จากชุมชนเสมอ PRs welcome :)