본문 바로가기

반응형

전체 글

24.Redis, 데이터 처리량 확장을 위한 분산 기법에 대해서 알아보자구요.^^ 레디스의 처리 성능을 증대시키는 방법은? 결론) 복제와 샤딩을 통해서 처리 성능을 증대 시킬 수 있음. 그럼, 복제와 샤딩에 대해서 간단히 알아볼께요 ^^; 복제 클라이언트가 어느 노드에 접근하더라도 동일한 데이터를 읽을 수 있도록 데이터를 각 노드에 복제하여 저장하는 것을 말함. 샤딩 데이터를 특정 조건에 따라 나누어 저장하는 것. ex) 처리 데이터가 9개 있다고 가정할 때, 3대(A,B,C)의 노드를 사용하여 샤딩을 수행한다고 가정하면, 1~3 데이터는 A 노드 4~6 데이터는 B 노드 7~10 데이터는 C 노드 다시말해서, 각각의 데이터를 분할 저장하는 것을 샤딩이라고 함. 샤드(Shard)란? 위의 예시처럼 3개의 노드를 사용하여 데이터를 분할 저장할 때, 각 노드를 샤드라고 부름. 만약, 각 .. 더보기
23.Redis, 레디스 공유객체에 대해서 알아볼께요. Redis 공유객체란? 이전에 문자열 데이터 인코딩에서 잠시 살펴본것 같이, Redis 는 자주 사용되는 값을 전역변수인 공유객체에 저장해 두고 사용함. 공유객체에 포함하고 있는 값 리스트 에러메시지 프로토콜을 위한 문자열 자주 사용되는 문자열 0~9999 까지의 숫자 기타 등등. 모든 값은 redisObject 구조체를 사용해서 표현됨. redisObject 구조체 선언 redis 공유객체 선언 server.h 헤더 파일 레디스 서버는 server.c 소스파일의 main 함수를 통해서 시작됨. main 함수 시작 시 Redis 가 사용할 라이브러리와 서버의 기본 설정 변수등을 초기화하고 redis.conf 설정 파일을 읽어서 레디스 서버에 적용함. main 함수 주요소스 int main(int argc.. 더보기
22.Redis, 레디스문자열 구현에 대해서 알아볼께요. Redis 문자열 처리및 구현에 대해서.. 문자열을 메모리에 저장할 때 C언어의 char* 를 사용해서 저장함. 단, 문자열을 단순히 char* 만 사용하여 저장한다고 하면, 문자열 길이를 확인하기 위해 항상 저장된 메모리 크기를 확인해야해서 이와 같이 처리하게되면, 성능상 큰 단점이 될 수 있음. Redis 는 위의 단점을 극복하고, 빠른 연산을 위해서 특별한(?) 구조체를 사용해서 위의 단점을 풀어냄. 그럼 어떻게 이런 단점을 극복했을까요? ^^; 그답은 아래에 설명하겠습니다! 답) 문자열 표현을 위한 SDS(Simple Dynamic Strings) 구조체를 사용함. /* Note: sdshdr5 is never used, we just access the flags byte directly. * .. 더보기
21.Redis, 레디스 인코딩 중 셋 데이터 인코딩 에 대해서 알아볼께요.^^ 셋데이터 인코딩에 대해서 생각정리를 해볼께요..^^ Set 데이터의 시간 복잡도 O(1) 해당 시간 복잡도를 제공하기위해서 내부적으로 Hash 테이블 구조로 구현되어 있다고 함. Set 데이터의 인코딩 OBJ_ENCODING_HT 기본 인코딩. OBJ_ENCODING_INTSET 메모리를 절약하기 위한 특별한 인코딩. 환경설정(redis.conf) set-max-intset-entries 설정에서 지정됨. 숫자 데이터로 한정됨. 초기 설정 인코딩인 OBJ_ENCODING_INTSET이 OBJ_ENCODING_HT 으로 변경되면 다시 OBJ_ENCODING_INTSET으로 변경되지 않음. 즉, 숫자 데이터가 아니면 항상 OBJ_ENCODING_HT 인코딩으로 변환됨. Set 데이터의 인코딩 변화 확인 예시.. 더보기
20.Redis, 레디스 인코딩 중 리스트 데이터 인코딩 에 대해서 알아볼께요.^^ 리스트 데이터 인코딩에 대해서.. 버전 3.2.0 이전 ZIPLIST(small lists), LINKEDLIST 이었음. OBJ_ENCODING_ZIPLIST OBJ_ENCODING_LINKEDLIST but, 버전 3.2.0 부터 QUICKLIST하나로 통일되어 사용됨. OBJ_ENCODING_QUICKLIST 인코딩 타입에 대한 선언 소스 코드 server.h 인코딩에 대한 설명 레디스 버전 3.2.0 이전 OBJ_ENCODING_ZIPLIST member 갯수가 512개 까지이거나, 값의 길이가 64까지는 ziplist이다. 이것은 redis.conf에 list-max-ziplist-entries 512, list-max-ziplist-value 64 로 설정할 수 있다. OBJ_ENCODING_.. 더보기
19.Redis, 레디스 인코딩 중 문자열 데이터 인코딩 에 대해서 알아볼께요.^^ 레디스 인코딩에 대해서.. Redis 는 데이터의 주 저장소로 메모리를 사용함. 메모리 운영 체제의 관점에서 한정적인 자원이며 매우 비싼 리소스임. Redis 개발자는 제한적인 환경에서 데이터를 효율적으로 저장하기 위해서 인코딩을 사용함. 문자열 데이터 인코딩 문자열을 저장하기 위해서 3가지 인코딩을 사용함. OBJ_ENCODING_INT value가 정수임을 나타낸다. 실수(소숫점 포함)는 string으로 분류된다. 단, 숫자가 0으로 시작하면 string이다. 예를 들어 123은 int이고 0123은 embstr이다. 그리고, 64bit 환경에서 long int형의 max 값(9223372036854775807)을 벗어나면 embstr 임. 참고#1) 64bit 환경의 long int형 범위 -9,2.. 더보기
18.Redis, 레디스 객체(Redis Object)에 대해서 알아볼까요? 레디스 객체(Redis Object)에 대해서... Redis 는 저장된 데이터를 관리하기 위하여 redisObject 객체를 사용함. 문자열데이터와 Hash 데이터는 모두 redisObject 객체를 사용하여 저장함. redisObject 가 관리하는 정보 저장된 객체의 데이터형과 인코딩 정보 객체가 참조된 횟수 LRU(Least Recently Used) 시간 정보 레디스객체는 레디스의 거든 모든 소스코드에서 사용됨. 저장된 모든 데이터와 Key 의 표현에 사용됨. 레디스에서 가장 기본적인 데이터 표현 방식이고, 레디스의 내부구조를 이해하기 위해서 가장 중요한 객체이기도함. redisOjbect 구조체(Redis-5.0.5 기준) 콜론(:) 기호 란? 위의 소스에서 콜론 기호는 C 언어의 구조체에서 .. 더보기
17.Redis, 제디스(Jedis) 사용한 간단한 프로그램 예시를 코딩해 볼께요.^^ Redis의 데이터 처리 및 통신 Redis 서버는 기본적으로 TCP/IP 기반으로 데이터를 처리함. 그리고, 클라이언트-서버 방식으로 동작함. 즉, 클라이언트로 부터 요청을 받고 요청에 대한 처리 결과를 돌려주는 구조. 클라이언트 입장에서 네트워크를 통해 Redis 서버로 데이터를 전송하고 수신하는 시간은 실제 데이터를 처리하는 시간에 포함됨. 이를 RTT 로 표기함. RTT 란? Round Trip Time 의 약자임. 네트워크 왕복시간 = 네트워크를 통해서 서버로 명령을 전송하는데 걸리는 시간 + 명령의 처리 결과를 수신하는데 걸리는 시간 제디스(Jedis)를 사용한 간단한 샘플 프로그램 간단한 SET/GET 프로그램 Maven 사용 pom.xml 추가 실행화면 redis-cli 툴을 사용해서 확인.. 더보기

반응형