Object mapping nhanh và dễ dàng cho JavaScript và TypeScript
Tôi đã viết một thứ – thực tế là một vài người đã viết – tôi chỉ viết phiên bản Node.js. Tôi nghĩ đó là một thứ khá cool đáng được chú ý, và tôi rất hào hứng về nó. Cái thứ tôi đang nói: Redis OM cho Node.js.
Redis OM là gì? Redis OM là một thư viện giúp dễ dàng sử dụng Redis bằng cách ánh xạ cấu trúc dữ liệu Redis thẳng vào code của bạn. Phần OM là viết tắt của object mapping, nhưng chúng tôi dự định làm nhiều hơn chỉ vậy trong tương lai.
Đọc tiếp để biết thêm chi tiết.
Nhanh hơn nhanh
Bạn có thể đã biết Redis nhanh – nhanh hơn nhanh – và nó lưu trữ những thứ chương trình của bạn quan tâm: hashes, lists, sets, những thứ kiểu đó. Đây là những cấu trúc tôi nghĩ như một lập trình viên. Khi tôi giải thích Redis là gì cho một techie chưa rành, tôi nói rằng Redis là tất cả những cấu trúc dữ liệu bạn học ở đại học với một wire-protocol đặt trước chúng.
Module làm Redis thậm chí còn awesomer (tuyệt vời hơn) (biết đó không phải từ) bằng cách giới thiệu mới cấu trúc dữ liệu cho chương trình của bạn quan tâm. RedisBloom thêm cấu trúc dữ liệu xác suất như Bloom và Cuckoo filter. RedisGraph cho bạn lưu trữ và truy vấn đồ thị dùng Cypher. RedisAI cho bạn tensor cho những điều AI tuyệt vời. Rất hữu ích.
Hai module awesomest nhất
Nhưng có hai module đặc biệt làm cho Redis trở thành cơ sở dữ liệu in-memory mạnh mẽ mà mọi lập trình viên muốn: RedisJSON và RediSearch.
RedisJSON mang sự phân cấp ra bàn. Hashes tuyệt vời, nhưng nếu bạn muốn nhúng hashes vào hash của bạn thì sao? RedisJSON giúp bạn bằng cách cho lưu trữ dữ liệu phân cấp của bạn trong tài liệu JSON.
Trong khi đó, RediSearch cho bạn tìm cấu trúc dữ liệu bạn quan tâm. Chắc chắn, bạn có thể tạo chỉ mục thủ công dùng sets, nhưng cách đó giới hạn và thủ công. Ghê. RediSearch cho bạn viết truy vấn để đi thẳng đến dữ liệu bạn muốn.
Kết hợp, RediSearch và RedisJSON làm cho Redis trở thành một document database khá nifty (gọn gàng). Bạn có sự phân cấp bạn muốn và khả năng tìm những thứ trong nó mà bạn quan tâm. Best of both worlds (tốt nhất cả hai thế giới) và tất cả điều đó.
Thực tế, chúng tôi nghĩ sự kết hợp này ngon đến mức chúng tôi gộp chúng lại và chỉ gọi chúng là RedisJSON.
Redis OM cho Node.js
Ngôn ngữ truy vấn cho RediSearch mạnh mẽ. Rất mạnh mẽ. Nó cho phép bạn tìm kiếm Hashes và tài liệu JSON trong Redis theo nhiều cách đa dạng và tinh vi. Và khi tôi cần toàn bộ quyền lực đó, nó rất cool. Nhưng đôi khi tôi không cần toàn bộ quyền lực đó. Và tôi là một dev lười – tôi muốn nó dễ dàng nhất có thể (và không dễ dàng hơn).
Làm cho mọi thứ dễ dàng nhất có thể là điều tôi cố gắng khi viết Redis OM cho Node.js. Redis OM làm cho nó đơn giản để thêm Redis vào ứng dụng Node.js của bạn bằng cách ánh xạ hashes và tài liệu JSON đến các lớp bạn định nghĩa. Không lệnh phức tạp, chỉ code thuần túy với một giao diện fluent. Nhìn xem.
Định nghĩa một entity:
Tạo một entity mới và lưu nó:
Tìm kiếm entity khớp:
Bây giờ tôi khá thiên vị vì tôi viết thư viện này và tất cả, nhưng tôi nghĩ đó là pretty dadgum cool! Hãy nhìn kỹ hơn vào cú pháp này và học cách nó hoạt động.
Cách nó hoạt động
Có bốn lớp bạn cần quan tâm trong Redis OM cho Node.js. Chúng là Entity, Schema, Client, và Repository.
Entities là các lớp bạn làm việc với. Những thứ được tạo, đọc, cập nhật, và xóa. Những thứ được tìm kiếm. Bất kỳ lớp nào extends Entity là một entity. Thường, bạn sẽ định nghĩa một entity với một dòng code duy nhất, nhưng bạn có thể thêm logic tùy chỉnh trong đó cũng được:
Schemas định nghĩa các trường trên entity của bạn, kiểu của chúng, và cách chúng được ánh xạ nội bộ đến Redis. Mặc định, entity ánh xạ đến Hashes trong Redis, nhưng bạn cũng có thể ánh xạ chúng đến tài liệu JSON:
Khi bạn tạo một Schema, nó sửa đổi Entity bạn đưa cho nó, thêm getter và setter cho các thuộc tính bạn định nghĩa. Kiểu mà getter và setter đó chấp nhận và trả về được định nghĩa với thuộc tính type ở trên.
Clients kết nối bạn đến Redis. Một Client có phương thức để open, close, và thực thi lệnh thô (raw commands) đối với Redis. Bạn chủ yếu sẽ dùng open và close:
Một Schema và một Client được yêu cầu để khởi tạo một Repository. Repositories cung cấp phương tiện để đọc, ghi, và xóa entity. Và phương tiện để tìm kiếm chúng:
Khi chúng ta có một repository, chúng ta có thể dùng nó để tạo, đọc, cập nhật, và xóa entity. Ở đây tôi đang làm chính điều đó với một album yêu thích của tôi của Mushroomhead:
Chúng ta cũng có thể dùng nó để tìm kiếm entity:
Và, cho sự tiện lợi copy-paste của bạn, đây là mẫu đó như một khối code lớn:
Và đó là Redis OM cho Node.js trong, như họ nói, một vỏ hạt dẻ.
Kết thúc
Đây đã là một tổng quan nhanh về những gì Redis OM cho Node.js có thể làm. Nếu bạn muốn tìm hiểu thêm, có một tutorial sẽ hướng dẫn bạn xây dựng một service đơn giản với Redis OM. Và nếu bạn muốn đi sâu hơn, và bạn hoàn toàn nên, hãy xem README và API docs trên GitHub.
Tất nhiên, đây là phần mềm hoàn toàn mới chưa được test trong thực tế. Bạn là thực tế đó. Hãy thử nó. Kick the tires (thử thách). Cố gắng phá nó. Xem cái gì có và cái gì có thể có. Và khi bạn tìm thấy bug đó hoặc nghĩ ra tính năng hoàn hảo đó, cho tôi biết bằng cách mở issue hoặc gửi pull request. Sự giúp đỡ của bạn làm Redis OM tốt hơn được trân trọng thành tâm. Cảm ơn!