Redis-stream nodejs
Redis là một kho lưu trữ cấu trúc dữ liệu trong bộ nhớ, chủ yếu được sử dụng làm cơ sở dữ liệu, bộ đệm và môi giới tin nhắn. Redis cực kỳ phổ biến đối với các nhà phát triển vì tốc độ đáng kinh ngạc và hỗ trợ các loại cấu trúc dữ liệu khác nhau như chuỗi, hàm băm, danh sách, bộ, bitmap, luồng, v.v. Hơn nữa, Nó có rất nhiều tính năng tích hợp như bản sao tích hợp, tập lệnh Lua, loại bỏ LRU, giao dịch, tính bền vững trên đĩa, v.v., khiến nó trở nên nổi bật. Trong bài viết này, chúng ta sẽ tìm hiểu về một cấu trúc dữ liệu Redis có tên là stream. Chúng tôi có thể sử dụng cấu trúc dữ liệu này để xây dựng dịch vụ nhắn tin giữa những người tiêu dùng hoặc dịch vụ siêu nhỏ của chúng tôi Đơn giản, Chúng tôi có thể sử dụng nó như một nhà môi giới tin nhắn và các dịch vụ siêu nhỏ của chúng tôi có thể giao tiếp giữa chúng thông qua cấu trúc dữ liệu này. Hãy bắt đầu Luồng Redis là gì?Nói một cách đơn giản, luồng Redis là cấu trúc dữ liệu chỉ nối thêm của Redis. Nó có một số điểm tương đồng với các cấu trúc dữ liệu khác như danh sách, nhưng nó hữu ích và phức tạp hơn. Khi chúng tôi thêm một số dữ liệu/thông báo vào một biến luồng, nó sẽ có sẵn cho người tiêu dùng. Nó có API BLOCKING cho phép chúng tôi khiến người tiêu dùng chờ đợi tin nhắn mới đến. Nó mạnh mẽ về tốc độ và dễ thực hiện. Nó cũng cung cấp Nhóm người tiêu dùng cho phép gửi một tập hợp con tin nhắn khác nhau đến những người tiêu dùng khác nhau Ví dụ trường hợp sử dụngVí dụ: giả sử chúng ta có hai dịch vụ siêu nhỏ - MS-1 và MS-2. Các dịch vụ siêu nhỏ này muốn giao tiếp giữa chúng hoặc muốn trao đổi một số dữ liệu giữa chúng. Trong trường hợp này, các dịch vụ nhắn tin xuất hiện. Luồng Redis giữ vị trí giữa MS-1 và MS-2 và hoạt động như một nhà môi giới. Nó trao đổi tin nhắn/dữ liệu MS-1 sang MS-2 và ngược lại thông qua một số biến luồng trong Redis. Để rõ ràng hơn, giả sử MS-1 nối thêm một số dữ liệu vào luồng. MS-2 đang lắng nghe luồng đó liên tục. Ngay khi MS-1 thêm dữ liệu vào luồng đó, MS-2 sẽ nhận được dữ liệu đó Hoạt động cơ bảnMục nhập luồng không chỉ là một chuỗi mà thay vào đó bao gồm một hoặc nhiều cặp giá trị trường. Về cơ bản, chủ yếu có hai loại hoạt động, Thêm dữ liệu vào luồng và Lấy dữ liệu từ luồng Thêm dữ liệuLệnh ghi cơ bản là XADD, nối thêm một mục mới trong luồng đã chỉ định > XADD profile-information * name alex age 27 hair blackSample Output Lệnh trên sẽ thêm một mục mới vào luồng tại khóa “thông tin hồ sơ. “ Hãy giải thích lệnh này từng phần một để hiểu rõ
Ngoài ra còn có một lệnh hữu ích có thể cho chúng tôi biết số lượng mục bên trong Luồng > XLEN profile-informationSample Output
Bây giờ chúng tôi có thể nối thêm dữ liệu trong luồng thông qua lệnh XADD. Bây giờ là lúc tìm hiểu cách đọc các mục từ luồng. Chủ yếu có ba loại hoạt động để lấy dữ liệu. Hãy thảo luận từng cái một Truy vấn theo phạm vi. XRANGE & XREVRANGETrước khi tìm hiểu cách hoạt động của truy vấn phạm vi, chúng ta cần hiểu thêm một chút về ID. Các ID được trả về bởi lệnh XADD trông như thế này - 1627796743670–0, có định dạng
Phần mili giây là thời gian cục bộ trong nút Redis cục bộ và số thứ tự được sử dụng để phân biệt các mục nhập nếu chúng được tạo trong cùng một mili giây. Redis đảm bảo rằng các ID này theo thứ tự tăng dần đều. Phần đầu tiên của ID về cơ bản là dấu thời gian, do đó, nó cũng cung cấp cho chúng tôi truy vấn phạm vi dựa trên thời gian. Để thực hiện một truy vấn phạm vi, chúng ta cần chỉ định hai ID — tương ứng là bắt đầu và kết thúc. Xin lưu ý rằng phạm vi của truy vấn là bao gồm, nghĩa là phạm vi được trả về sẽ bao gồm phần tử có đầu hoặc cuối là ID > XRANGE profile-information - +Sample Output
Truy vấn phạm vi thời gian Chúng tôi có thể bỏ qua phần trình tự cho truy vấn dựa trên thời gian và chỉ đặt dấu thời gian cho thời gian bắt đầu và thời gian kết thúc. Khi chúng tôi bỏ qua phần trình tự, trình tự bắt đầu sẽ tự động đặt thành 0 và trình tự kết thúc sẽ là số trình tự tối đa có sẵn > XRANGE profile-information 1627796743670 1627799297560 Chúng tôi có thể chỉ định một tùy chọn COUNT trong truy vấn ở cuối. Nó sẽ nhận được N mục đầu tiên từ một phạm vi > XRANGE profile-information - + COUNT 2 XREVRANGE hoạt động chính xác như XRANGE theo thứ tự ngược lại > XREVRANGE profile-information + - COUNT 2 Nó sẽ trả về N phần tử theo thứ tự ngược lại của phạm vi Nhận các mục mới với XREADChúng tôi có thể đăng ký các mục mới đến luồng. Khái niệm này trông giống như Pub/Sub, nhưng có sự khác biệt đáng kể. Điểm giống nhau chính là, Một luồng có thể có nhiều người tiêu dùng và theo mặc định, một mặt hàng mới sẽ được gửi tới mọi người tiêu dùng đang chờ tin nhắn. Điều này khá giống với công nghệ quạt ra như Pub/Sub. Sự khác biệt chính là, trong khi Pub/Sub hoạt động như lửa và quên phương tiện sau khi phân phát thông báo, nó sẽ bị xóa khỏi Redis, thì Luồng hoạt động theo cách khác về cơ bản. Các luồng lưu giữ các tin nhắn với ID của chúng. Bên cạnh Luồng, Nhóm người tiêu dùng cung cấp mức độ kiểm soát mà Pub/Sub hoặc danh sách chặn không thể đạt được XREAD là lệnh lắng nghe các tin nhắn mới đến một luồng > XREAD COUNT 1 STREAMS profile-information 0
Chúng ta có thể biến XREAD thành lệnh chặn một cách dễ dàng ________số 8_______
Nhóm người tiêu dùngBây giờ chúng ta đang ở trong một phần thú vị. XREAD đã cung cấp cho chúng tôi một công nghệ quạt ra rất tốt. Nhưng chúng tôi có thể xem xét một trường hợp khác khi chúng tôi có thể có nhiều người tiêu dùng và chúng tôi muốn phân phối tập hợp con các thông báo giữa họ. Đơn giản, Chúng tôi không muốn gửi cùng một thông điệp đến những người tiêu dùng khác nhau. Ví dụ: Giả sử chúng ta có hai người tiêu dùng — C1, C2 và chúng ta có 7 tin nhắn có ID là 1, 2, 3, 4, 5, 6, 7. Bây giờ chúng tôi muốn phân phối các tin nhắn này giữa C1 và C2 như thế này - 1 -> C1 Bạn có thể nhận thấy rằng chúng tôi không đẩy cùng một thông báo tới nhiều khách hàng. Chúng tôi đang gửi các thông điệp khác nhau đến các khách hàng khác nhau. Trong kịch bản này, Nhóm người tiêu dùng tham gia vào bức tranh này Tạo nhóm người tiêu dùng Giả sử tôi đã có sẵn một "thông tin hồ sơ" chính của luồng loại, thì lệnh sau sẽ tạo một nhóm người tiêu dùng > XLEN profile-informationSample Output0
> XLEN profile-informationSample Output1 Tiêu thụ từ một nhóm Redis cung cấp một tên lệnh XREADGROUP rất giống và cung cấp tùy chọn BLOCK tương tự; . Có một tùy chọn bắt buộc NHÓM với hai đối số — tên của Nhóm người tiêu dùng và tên của người tiêu dùng đang cố đọc > XLEN profile-informationSample Output2
Đây gần như là tất cả những điều cơ bản về Redis Streams. Tôi đã lấy các khái niệm và thông tin từ bài báo này được xuất bản trên trang web chính thức. Nếu bạn đọc bài viết gốc, bạn có thể tìm hiểu thêm. Tôi đã thu hẹp bài viết chính và cố gắng trình bày một cách nhìn hữu ích về luồng Redis. Tôi hy vọng nó có thể giúp ích cho bạn và nếu có, hãy chia sẻ điều này với bạn bè của bạn. Mã hóa vui vẻ |