레디스 XTRIM

Lediseu Xtrim



Redis 스트림의 하위 수준 세부 정보

Redis 스트림은 메모리 효율적인 스토리지 메커니즘과 함께 일련의 고효율 읽기 및 삽입 작업을 제공하는 추가 전용 데이터 구조입니다. 내부적으로 Redis 스트림은 메모리 효율성이 높은 공간 최적화 트리인 Radix 트리 데이터 구조를 사용합니다.

Redis 스트림은 각 항목이 키-값 쌍으로 구성된 항목 목록으로 데이터를 저장합니다. 낮은 수준에서 이러한 항목은 다음과 같이 매크로 노드로 압축됩니다.









이 기사에서는 XTRIM 명령을 사용하여 스트림 항목을 제거하는 데 중점을 두며 위에서 언급한 개념은 제거 작업의 효율성에 밀접한 영향을 미칩니다. 일반적으로 Redis 스트림 항목 제거는 매크로 노드 수준에서 수행되지만 항목 수준에서는 수행되지 않는 경우 매우 효율적입니다. 이 메커니즘은 다음 섹션에서 논의할 XTRIM 명령으로 구현됩니다.



XTRIM 명령

XTRIM 명령은 주어진 임계값을 기반으로 스트림의 항목을 차단하는 데 사용됩니다. 임계값은 스트림당 최대 항목 수 또는 이전 항목 ID일 수 있습니다. XTRIM 명령은 임계값 유형을 명령 인수로 받아들입니다. XTRIM 명령의 구문은 다음과 같습니다.





XTRIM 스트림 키 MAXLEN | 미니 [ = | ~ ] 임계치 [ LIMIT개 ]

스트림_키 : Redis 스트림의 키입니다.

맥슬렌 : 항목을 트리밍한 후 스트림의 최대 길이입니다. 임계값으로 지정된 스트림 길이를 초과하는 모든 항목은 제거됩니다. 이 인수는 양의 정수입니다.

미니 : 항목을 트리밍한 후 남아 있어야 하는 최소 스트림 ID입니다. 지정된 임계값보다 낮은 ID를 가진 모든 항목이 제거됩니다. 이 매개변수를 지정할 때마다 임계값이 스트림 ID가 됩니다.

= 연산자 : 지정하면 임계값을 기준으로 정확한 트리밍이 수행됩니다.

~ 연산자 : 지정하면 임계값과 매크로 노드 크기를 기반으로 거의 정확한 트리밍이 수행됩니다.

임계치 : MAXLEN 또는 MINID 인수를 기반으로 하는 임계값입니다.

LIMIT개 : 제거할 최대 항목 수입니다.

사용 사례 01 – 최대 길이를 기반으로 스트림 항목 제거

관광 회사가 관광 정보를 추적하기 위해 Redis 스토어를 유지한다고 가정해 보겠습니다. Redis 스트림 데이터 구조는 각 관광객의 정보를 키-값 쌍으로 저장하는 데 사용되었습니다. 시간이 지남에 따라 스트림이 증가했으며 최신 항목 1000개만 보관할 계획입니다. 따라서 그들은 스트림의 최대 길이가 언제든지 1000이어야 함을 식별했습니다. 이를 위해 XTRIM 명령이 사용되었습니다.

데모 목적으로 먼저 다음과 같이 10개의 항목이 있는 스트림을 만듭니다. XADD 명령을 사용하여 삽입을 수행했습니다.

xadd 관광 정보 * 이름 잭 컨트리 이탈리아 familymems 5
xadd 관광 정보 * 이름 해리 컨트리 미국 familymems
xadd 관광 정보 * 이름 니코미타 국가 일본 familymems
xadd 관광 정보 * 이름 zakaria 국가 인도 familymems
xadd 관광 정보 * 이름 redmond country brazil familymems 6
xadd 관광 정보 * 이름 발견 국가 일본 familymems
xadd 관광 정보 * 이름 Maryjohn 국가 미국 familymems
xadd 관광 정보 * 이름 liza 국가 이탈리아 familymems 5
xadd 관광 정보 * 이름 nimshikaa 국가 일본 familymems
xadd 관광 정보 * 이름 nisha 국가 이탈리아 familymems 5

XRANGE 명령을 사용하여 다음과 같이 touristinfo 스트림을 검사해 보겠습니다.

xrange 관광 정보 - +

산출:

예상대로 이 명령으로 10개의 스트림 항목이 표시되었습니다.

데모 목적으로 최대 길이가 5가 되는 스트림을 트리밍합니다.

xtrim touristinfo 맥스렌 5

XRANGE 명령을 사용하여 스트림 항목을 다시 검사해 보겠습니다.

예상대로 스트림에서 5개의 항목이 제거되었으며 길이는 5입니다.

사용 사례 02 – 스트림 ID를 기반으로 스트림 항목 제거

날씨 회사가 Redis 스트림을 사용하여 특정 위치의 날씨 정보를 추적하는 예를 들어보겠습니다. 이제 더 이상 필요하지 않은 오래된 항목을 삭제하려고 합니다. 다음과 같이 MINID 전략을 사용하여 XTRIM 명령을 사용할 수 있습니다.

먼저 weatherinfo라는 스트림을 만들고 여기에 다음과 같이 5개의 항목을 추가합니다.

xadd 날씨 정보 * 온도 10 습기 오십
xadd 날씨 정보 * 온도 이십 습기 70
xadd 날씨 정보 * 온도 12 습기 65
xadd 날씨 정보 * 온도 열 다섯 습기 88
xadd 날씨 정보 * 온도 18 습기 오분의 사

산출:

XTRIM 명령을 사용하여 지정된 임계값보다 낮은 ID를 가진 항목을 제거해 보겠습니다.

xtrim 날씨 정보 MINID 1660485503248 - 0

지정된 최소 ID는 세 번째 항목과 연결됩니다. 따라서 ID가 낮은 세 번째 항목 이후의 항목은 삭제됩니다.

산출:

= 또는 ~ 인수를 명시적으로 지정하지 않았으므로 명령은 기본적으로 = 연산자를 사용합니다. 따라서 두 사용 사례 모두에서 정확한 트리밍이 수행되었습니다. ~ 연산자를 명시적으로 지정하면 다음과 같이 거의 정확한 트리밍이 수행됩니다.

위 그림과 같이 XTRIM 명령어는 ~ 연산자와 함께 사용되었습니다. 우리는 명령에 길이 100을 초과하는 모든 항목을 제거하도록 요청합니다. XTRIM 명령이 정확한 트리밍을 수행하도록 강제하지 않으므로 트리밍 작업의 효율성에 중점을 둡니다. 따라서 동일한 매크로 노드에 속한 즉각적인 항목을 제거하지 않습니다. 동일한 매크로 노드에 있는 다음 세 항목을 유지하고 그 이후의 모든 매크로 노드를 제거합니다. 이는 명령이 추가 노력을 가하도록 하는 정확한 트리밍 접근 방식보다 상당한 양의 성능 향상을 제공합니다. 임계값이 항목 ID를 기반으로 하는 경우에도 동일한 절차가 수행됩니다.

LIMIT 인수는 지정된 스트림에서 축출된 항목의 수를 제한하여 성능을 조금 더 향상시키는 데 사용할 수 있습니다.

결론

간단히 말해서 XTRIM 명령은 임계값을 기반으로 스트림 항목을 제거하는 데 사용됩니다. 임계값의 유형은 MAXLEN 및 MINID 명령 인수를 사용하여 지정되는 컨텍스트로 변경할 수 있습니다. 논의된 바와 같이, 트리밍은 트리밍 작업이 임계값을 정확한 또는 대략적인 한계로 간주하는 두 가지 방법으로 수행될 수 있습니다. 기본적으로 이 명령은 정확한 트리밍에 사용되는 = 연산자를 사용합니다. ~ 연산자를 사용하면 위 섹션에서 언급한 대로 대략적인 트리밍을 수행할 수 있습니다. 전반적으로 대략적인 트리밍 접근 방식과 LIMIT 인수는 XTRIM 명령으로 상당한 성능 향상을 얻는 데 도움이 됩니다.