seongeun42 / Redis-Study

4 stars 0 forks source link

[240717] 스터디 2회차 3장 질문 #3

Open seongeun42 opened 3 months ago

seongeun42 commented 3 months ago

1. 레디스 파이프라인의 장단점?

2. 루아 스크립트를 사용하는 방법 두 가지와 두 방법의 차이점?

3. 이페머럴 스크립트 실행에 사용하는 EVALEVALSHA의 차이점?

4. 파이프라인은 어떨 때 사용하는게 좋을까요

5. TTL설정이 안되는 명령어의 경우 TTL을 설정해주는 방법은?

6. 트랜잭션이 실패하는 경우는 두가지가 있다. 두 가지를 말하고 동작이 어떻게 다른지 설명해주세요

seongeun42 commented 3 months ago

1. 레디스 파이프라인의 장단점?

파이프라인은 명령어 종류와 상관없이 여러 개의 명령어를 한번에 실행함으로써 RTT를 줄일 수 있다는 장점이 있습니다. 하지만 조건 분기와 같은 복잡한 로직을 구현하기는 어렵습니다.

seongeun42 commented 3 months ago

2. 루아 스크립트를 사용하는 방법 두 가지와 두 방법의 차이점?

루아 스크립트는 이페머럴 스크립트를 사용하거나, 레디스 7.0부터 도입된 레디스 함수를 사용하는 방법이 있습니다. 이페머럴 스크립트는 클라이언트 측에서 스크립트 소스코드를 유지해야 하고, 레디스는 그럴 필요 없다는 차이가 있습니다.

seongeun42 commented 3 months ago

3. 이페머럴 스크립트 실행에 사용하는 EVAL과 EVALSHA의 차이점?

EVAL은 스크립트 자체를 인수로 넘겨 사용합니다. 매번 실행할 때마다 스크립트를 넘기고 저장하게 돼 대역폭을 많이 사용합니다. EVALSHA의 경우 스크립트를 넘겨 저장 후 만드는 SHA1 해시값을 인수로 넘겨 사용합니다. 재사용하기 좋고 대역폭을 적게 사용한다는 장점이 있습니다.

seongeun42 commented 3 months ago

4. 파이프라인은 어떨 때 사용하는게 좋을까요

조건 분기와 같은 복잡한 로직이 필요 없고, 서로 다른 종류의 명령어를 여러 개 사용하고자 할 때 사용하면 유용합니다.

seongeun42 commented 3 months ago

5. TTL설정이 안되는 명령어의 경우 TTL을 설정해주는 방법은?

몰라ㅜ

seongeun42 commented 3 months ago

6. 트랜잭션이 실패하는 경우는 두가지가 있다. 두 가지를 말하고 동작이 어떻게 다른지 설명해주세요

명령어를 큐에 넣는 것에 실패하는 경우가 있습니다. 이 경우 EXEC 명령 실행 시 실패하고 모든 명령어를 파기합니다. 다른 경우는 EXEC 명령어를 실패하는 경우입니다. 이 경우 큐에 들어간 명령어는 모두 실행하되, 실패하는 명령어는 오류 내용을 반환합니다.

kjc6735 commented 3 months ago

5. TTL설정이 안되는 명령어의 경우 TTL을 설정해주는 방법은?

p208에 나와있습니다. 명령어로 단순 실행하면 RTT 오버헤드가 발생한다. 파이프라인으로 실행하면 오버헤드를 줄일 수 있지만, 원자적 처리는 보장할 수 없다. 이페머럴 스크립트를 사용하면 RTT를 줄이면서 원자적 처리도 간단하게 구현할 수 있다.

kjc6735 commented 3 months ago

4. 파이프라인은 어떨 때 사용하는게 좋을까요

조건 분기와 같은 복잡한 로직이 필요 없고, 서로 다른 종류의 명령어를 여러 개 사용하고자 할 때 사용하면 유용합니다.

중간에 다른 클라이언트의 간섭이 있어도 상관 없는 케이스도 추가하면 좋을거 같습니다.