Redis XTRIM

Redis Xtrim



Chi tiết Cấp thấp của Luồng Redis

Các luồng Redis là một cấu trúc dữ liệu chỉ có phần phụ cung cấp một tập hợp các thao tác đọc và chèn hiệu quả cao với cơ chế lưu trữ hiệu quả về bộ nhớ. Bên trong, các luồng Redis sử dụng cấu trúc dữ liệu cây Radix là một cây được tối ưu hóa không gian với hiệu quả bộ nhớ cao.

Các luồng Redis lưu trữ dữ liệu dưới dạng danh sách các mục nhập trong đó mỗi mục nhập bao gồm các cặp khóa-giá trị. Ở mức thấp, các mục này được đóng gói thành các nút vĩ mô, như thể hiện trong hình sau.









Trong bài viết này, chúng tôi đang tập trung vào việc loại bỏ các mục nhập luồng bằng lệnh XTRIM và khái niệm nêu trên ảnh hưởng chặt chẽ đến hiệu quả của hoạt động loại bỏ. Thông thường, việc xóa mục nhập luồng của Redis rất hiệu quả nếu nó được thực hiện ở cấp nút vĩ mô nhưng không phải ở cấp mục nhập. Cơ chế này được thực hiện với lệnh XTRIM mà chúng ta sẽ thảo luận trong phần sau.



Lệnh XTRIM

Lệnh XTRIM được sử dụng để cắt các mục nhập của một luồng dựa trên một giá trị ngưỡng nhất định. Ngưỡng có thể là số lượng mục nhập tối đa trên mỗi luồng hoặc id mục nhập cũ hơn. Lệnh XTRIM chấp nhận loại ngưỡng làm đối số lệnh. Cú pháp của lệnh XTRIM như sau.





XTRIM stream_key MAXLEN | MINID [ = | ~ ] giá trị ngưỡng [ LIMIT số ]

stream_key : Chìa khóa của dòng Redis.

MAXLEN : Độ dài tối đa của luồng sau khi cắt bớt các mục nhập. Tất cả các mục nhập sẽ bị xóa vượt quá độ dài của luồng, được chỉ định bởi giá trị ngưỡng. Đối số này là một số nguyên dương.

MINID : Id luồng tối thiểu sẽ còn lại sau khi cắt bớt các mục nhập. Tất cả các mục nhập có ID thấp hơn ngưỡng được chỉ định sẽ bị xóa. Bất cứ khi nào bạn chỉ định thông số này, ngưỡng sẽ trở thành ID luồng.

= toán tử : Khi được chỉ định, việc cắt tỉa chính xác sẽ được thực hiện dựa trên giá trị ngưỡng.

~ toán tử : Khi được chỉ định, việc cắt gần chính xác sẽ được thực hiện dựa trên giá trị ngưỡng và kích thước nút macro.

giá trị ngưỡng : Giá trị ngưỡng dựa trên đối số MAXLEN hoặc MINID.

LIMIT số : Số lượng mục nhập tối đa được xóa.

Trường hợp sử dụng 01 - Xóa mục nhập luồng dựa trên độ dài tối đa

Giả sử rằng một công ty du lịch duy trì một cửa hàng Redis để theo dõi thông tin du lịch. Cấu trúc dữ liệu luồng Redis đã được sử dụng để lưu trữ thông tin của từng khách du lịch dưới dạng các cặp khóa-giá trị. Theo thời gian, luồng đã phát triển và họ đang có kế hoạch chỉ giữ lại 1000 mục mới nhất. Vì vậy, họ đã xác định độ dài tối đa của luồng nên là 1000 bất kỳ lúc nào. Lệnh XTRIM đã được sử dụng để đạt được điều này.

Đối với mục đích trình diễn, trước tiên, chúng tôi sẽ tạo một luồng với 10 mục nhập như sau. Lệnh XADD đã được sử dụng để thực hiện việc chèn.

xadd touristinfo * tên jack country italy familymems 5
xadd touristinfo * tên harry country usa familymems hai
xadd touristinfo * tên nikomita country japan familymems 3
xadd touristinfo * tên zakaria đất nước india familymems hai
xadd touristinfo * tên redmond country brazil familymems 6
xadd touristinfo * tên tìm thấy đất nước nhật bản familymems 3
xadd touristinfo * tên maryjohn country usa familymems hai
xadd touristinfo * tên liza country italy familymems 5
xadd touristinfo * tên nimshikaa country japan familymems 3
xadd touristinfo * tên nisha country italy familymems 5

Hãy sử dụng lệnh XRANGE để kiểm tra luồng touristinfo như sau.

xrange touristinfo - +

Đầu ra:

Như mong đợi, 10 mục luồng đã được hiển thị bằng lệnh này.

Đối với mục đích trình diễn, chúng tôi sẽ cắt bớt luồng trong đó độ dài tối đa của nó sẽ là 5.

xtrim touristinfo maxlen 5

Hãy kiểm tra lại các mục nhập luồng bằng lệnh XRANGE.

Như dự kiến, 5 mục nhập đã bị xóa khỏi luồng và độ dài của nó là 5.

Trường hợp sử dụng 02 - Xóa mục nhập luồng dựa trên ID luồng

Hãy lấy một ví dụ trong đó một công ty thời tiết theo dõi thông tin thời tiết của một vị trí nhất định bằng cách sử dụng các luồng Redis. Bây giờ, họ muốn xóa các mục cũ không còn cần thiết. Chúng ta có thể sử dụng lệnh XTRIM bằng cách sử dụng chiến lược MINID, như được hiển thị trong hình sau.

Đầu tiên, chúng ta sẽ tạo một luồng có tên weatherinfo và thêm 5 mục vào đó như sau.

xadd weatherinfo * nhiệt độ 10 độ ẩm năm mươi
xadd weatherinfo * nhiệt độ hai mươi độ ẩm 70
xadd weatherinfo * nhiệt độ 12 độ ẩm 65
xadd weatherinfo * nhiệt độ mười lăm độ ẩm 88
xadd weatherinfo * nhiệt độ 18 độ ẩm Bốn năm

Đầu ra:

Hãy sử dụng lệnh XTRIM để xóa các mục nhập có ID thấp hơn giá trị ngưỡng được chỉ định.

xtrim weatherinfo MINID 1660485503248 - 0

Id tối thiểu được chỉ định được liên kết với mục nhập thứ ba. Do đó, các mục nhập sau mục nhập thứ ba có id thấp hơn sẽ bị xóa.

Đầu ra:

Vì chúng ta chưa chỉ định rõ ràng các đối số = hoặc ~ nên lệnh sử dụng toán tử = theo mặc định. Do đó, việc cắt tỉa chính xác đã được thực hiện trong cả hai trường hợp sử dụng. Nếu bạn đã chỉ định toán tử ~ một cách rõ ràng, việc cắt tỉa gần như chính xác sẽ được thực hiện, như thể hiện trong hình sau.

Như trong hình trên, lệnh XTRIM đã được sử dụng với toán tử ~. Chúng tôi yêu cầu lệnh xóa tất cả các mục nhập vượt quá độ dài 100. Vì chúng tôi không buộc lệnh XTRIM thực hiện cắt tỉa chính xác, nó sẽ tập trung vào hiệu quả của hoạt động cắt tỉa. Vì vậy, nó sẽ không loại bỏ các mục nhập ngay lập tức thuộc cùng một nút macro. Nó sẽ giữ ba mục tiếp theo nằm trong cùng một nút vĩ mô và sẽ xóa tất cả các nút vĩ mô sau những nút đó. Nó cung cấp một lượng cải thiện hiệu suất đáng kể so với cách tiếp cận cắt tỉa chính xác, điều này buộc lệnh phải nỗ lực nhiều hơn. Quy trình tương tự cũng diễn ra khi ngưỡng dựa trên id mục nhập.

Đối số LIMIT giới hạn số mục nhập bị loại khỏi luồng đã chỉ định, có thể được sử dụng để cải thiện hiệu suất hơn một chút.

Sự kết luận

Tóm lại, lệnh XTRIM được sử dụng để loại bỏ các mục nhập luồng dựa trên giá trị ngưỡng. Loại giá trị ngưỡng có thể được thay đổi theo ngữ cảnh đang được chỉ định bằng cách sử dụng các đối số lệnh MAXLEN và MINID. Như đã thảo luận, việc cắt tỉa có thể được thực hiện theo hai cách trong đó hoạt động cắt tỉa sẽ coi ngưỡng là giới hạn chính xác hoặc gần đúng. Theo mặc định, lệnh sử dụng toán tử = được sử dụng để cắt chính xác. Với toán tử ~, bạn có thể thực hiện cắt gần đúng như đã đề cập trong phần trên. Nhìn chung, phương pháp cắt xén gần đúng và đối số LIMIT giúp bạn đạt được hiệu suất đáng kể với lệnh XTRIM.