Redis 고급 기능

S_H_H·2025년 2월 28일
0

실전 레디스

목록 보기
2/7
post-thumbnail

파이프 라인

파이프라인은 이전 요청의 응답을 기다리지 않고 새로운 요청을 보낼 수 있는 기능입니다. 여러 명령어를 동시에 송신하여 네트워크 RTT를 절약할 수 있습니다.
GET/SET 을 N개 처리보다는 MGET/MSET으로 한번에 처리하는 것이 좋습니다.
파이프라인 내에서는 명령의 순서가 보장되기 떄문에 여러 명령어를 빠르게 전송하고 응답은 나중에 한꺼번에 처리하는 것이 효과적입니다.

redis-cli나 다른레디스 라이브러리는 대량의 데이터를 삽입하기 위한 기능을 지원합니다.
--pipe 옵션을 사용해 실행하면 성공한 명령어의 개수는 replies 오류가 발생한 명령어의 개수는 errors로 표시됩니다.

루아

레디스는 내장 스크립트 언어로 루아를 채택하고 있습니다. 레디스의 명령어만으로는 구현하기 어려운 유연한 처리와 기능 확장 등을 루아를 통해 빠른 속도로 구현할 수 있습니다.

단순히 명령어를 조합하는 것 이상의 복잡한 작업을 하려고 할 때, app에서 한꺼번에 처리 작업을 진행할 수도 있습니다. 하지만 이 경우, 앞에서 언급한 것처럼 지연 시간이나 실행 속도 문제가 따라옵니다.

루아를 사용하면 파이프라인과 달리 레디스에서 모든 작업을 원자적으로 처리할 수 있습니다. 파이프 라인은 편리하지만 한편으로 다음과 같은 문제가 있습니다.

  • 여러 종류의 명령어를 처리할 수 있지만, 조건 분기 등 로직 기반 처리는 할 수 없습니다.
  • 쓰기와 읽기가 모두 포함된 작업을 진행할 때, 쓰기 작업 이전에 읽기 작업 결과를 기다려야 합니다. 이로 인해 지연시간이 발생할 수 있습니다.

만약 위와 같은 상황이라면 루아는 다음과 같은 특징이 있으므로 좋은 선택지가 될 수 있습니다.

  • 조건 분기와 같은 복잡한 로직을 기술할 수 있습니다.
  • 쓰기와 읽기 지연 시간을 최소화하도록 설계되었습니다.

레디스는 오랫동안 이페머럴 스크립트로 루아를 실행할 수 있었지만, 레디스 7.0 이후에는 레디스 함수로 루아를 실행할 수 있게 되었습니다.

트랜잭션

MULTI/EXEC 명령어 실행 중에는 다른 클라이언트의 간섭 없이 원자적 처리를 할 수 있습니다. 트랜잭션은 MULTI 명령어 뒤에 선언된 명령어를 큐에 넣어 처리합니다.
트랜잭션을 실행할 때는 다음과 같은 이유로 실패하는 경우도 있습니다.

  • 명령어를 큐에 넣는 데 실패한 경우, 명령어의 문법 오류나 Out Of Memory 등
  • EXEC 명령어를 실행할 때

첫 번째 경우 처름 큐에 넣을 때 오류가 발생하면, 트랜잭션 실행을 거부하고 파기하는 방식으로 동작합니다.
두 번쨰 경우 큐에 들어간 명령어는 모두 실행되면 부분 오류는 실패가 됩니다.

레디스 트랜잭션은 RDBMS에서 제공하는 롤백 기능을 지원하지 않고, 명령어 실패 시 그대로 남은 작업을 계속 처리합니다.

모듈

모듈 기능은 레디스 소스코드를 수정하지 않고도 C 언어로 구현하여 레디스 서버에 독립적으로 추가할 수 있습니다. 호환성을 위해 레디스는 모듈만을 위한 API를 만들어 이를 통해 레디스와 연동할 수 있습니다.

  • 새롭게 정의한 자료형 추가
  • 고수준 API, 저수준 API
  • 자동 메모리 관리 기능

키 공간 알림

레디스 서버에 저장된 데이터 세트를 변경하거나 레디스 서버에 어떤 이벤트가 발생하면 알림을 제공하는 시스템
특정 키의 삭제 혹은 만료, 특정 자료형 명령어가 실행 등의 경우에 다른 처리를 수행하도록 트리거를 설정할 수 있습니다.

Pub/Sub 기능을 사용하여 수신하는 시스템으로, 클라이언트 측에서 해당 기능의 명령어를 사용해야 합니다.

클라이언트 측 캐싱

레디스 서버 내 데이터를 가져오기 위해 클라이언트가 레디스 서버로 매번 접속하면 그때마다 서버로의 요청과 응답으로 인한 지연 시간이 발생합니다. 이 시간을 없애서 성능 향상을 노리는 방식이 바로 클라이언트 측 캐싱 기능입니다.

클라이언트가 로컬에 데이터를 캐시로 저장하면, 다른 클라이언트가 캐싱된 키를 업데이트할 때 데이터의 정합성을 보장하기 위한 처리가 필요합니다. 레디스는 기본 모드로 서버 측에서 무효화 테이블이라 불리는 하나의 전역 테이블에 캐신된 키를 갖는 클라이언트의 목록을 기록해둡니다.

profile
LEVEL UP

0개의 댓글