본문 바로가기

전체 글

(177)
[OSSCA2024] Redis 자료구조 - 5주차 온라인 미팅 제가 공부한 내용을 정리하는 블로그입니다. 아직 많이 부족하고 배울게 너무나도 많습니다. 틀린내용이 있으면 언제나 가감없이 말씀해주시면 감사하겠습니다😁레디스 내부에서 해시를 다루는 방법Redis에 주요 자료구조 이해server.c/initServer서버에 필요한 내용 초기화signal handler 설정signal(SIGHUP, SIG_IGN);signal(SIGPIPE, SIG_IGN);setupSignalHandlers();thread io => thread poolEvent Loop 설정server.el = aeCreateEventLoop(server.maxclients+CONFIG_FDSET_INCR); if (server.el == NULL) { serverLog(LL_WAR..
[Redis] Redis 고급 및 캐싱전략 제가 공부한 내용을 정리하는 블로그입니다. 아직 많이 부족하고 배울게 너무나도 많습니다. 틀린내용이 있으면 언제나 가감없이 말씀해주시면 감사하겠습니다😁데이터의 영속성레디스는 스냅샷 기능을 제공하여 메모리의 내용을 .rdb 파일로 저장. 해당 시점으로 복구 가능.기본-복제 아키텍처를 제공(복구 기능 및 확장)기본-복제 아키텍처를 사용하여 비동기식 복제를 지원하여 데이터가 여러 복제 서버에 복제 될 수 있음.따라서 main 서버가 장애가 발생하는 경우 요청이 여러 서버로 분산될 수 있음으로 향상된 읽기 성능과 더 빠른 복구 기능 사용.scalue-up, scale-in, scale-out을 제공하여 클러스터를 확장하여 일관된 성능과 안정성을 제공.Single Thread레디스는 싱글 스레드 아키텍처를 사용..
[Redis] Redis Data Type 제가 공부한 내용을 정리하는 블로그입니다. 아직 많이 부족하고 배울게 너무나도 많습니다. 틀린내용이 있으면 언제나 가감없이 말씀해주시면 감사하겠습니다😁 String 유형문자열을 Value로 사용하는 것은 가장 단순한 형태.문자열을 Value로 사용하고, html 문자열을 캐시하는 식의 활용 방식이 있음.특징Value에 string, number들을 저장. => 저장시 별도의 타입이 존재하지 않음.SET값을 세팅할 때는 SET을 사용# 값이 이미 있으면 실패 : nx# 값이 이미 있을 때만 성공 : xxSET [keyName] [value]GET값을 찾아올 때는 GET을 사용.GET [keyName] INCR, DECR값이 정수인 경우, INCR과 DECR(increment, decrement) 명령어 ..
[Redis] Redis 기본 제가 공부한 내용을 정리하는 블로그입니다.아직 많이 부족하고 배울게 너무나도 많습니다. 틀린내용이 있으면 언제나 가감없이 말씀해주시면 감사하겠습니다😁RedisKey-Value Store의 하나의 DBRemote Dictionary Server의 약자로, 원격 Dictionary 자료구조 서버라는 뜻Key로 올 수 있는 자료형은 기본적으로 String이지만, Value는 다양한 타입을 지원함.메모리 기반 데이터베이스이기 때문에, Disk를 기반으로 하는 RDBMS보다 read가 빠름.💡 잠깐! RDBMS도 쿼리를 통해 조회해오면, 메모리에 존재하는 Buffered Cache를 이용한다고 알고 있어요. (= Cache Hit)        Buffered Cache를 활용할 때의 RDBMS와 레디스는 조..
[OSSCA2024] 과제 4 해설 제가 공부한 내용을 정리하는 블로그입니다. 아직 많이 부족하고 배울게 너무나도 많습니다. 틀린내용이 있으면 언제나 가감없이 말씀해주시면 감사하겠습니다😁과제 4 설명echo2 abc라고 보내면 abc가 응답이 아닌 echo2_abc가 응답으로 오도록bulk 단위Respv2 기준 하나의 명령을 나타내는 blockex) $4\r\npong\r\necho abc 라고 명령을 입력했을 때c → argc = 2 =>명령어의 길이c → argv[0] = “echo” => 첫번째 명령어c → argb[1] = “abc” => 두번째 명령어robj(server object)type: 4bit2^4 ⇒ 16개의 타입 가능encoding: 4bitlru: 24bitlru, lfu 쓸때 모두 사용.type + encodin..
[OSSCA2024] Redis 과제4 실패.. 제가 공부한 내용을 정리하는 블로그입니다. 아직 많이 부족하고 배울게 너무나도 많습니다. 틀린내용이 있으면 언제나 가감없이 말씀해주시면 감사하겠습니다😁이번 과제는 지난 과제 3이였던 echo 명령을 개선하는 과제이다.이번 힌트는 sds 구조체 분석이다. 과제 3 세팅먼저 이전 과제 3번을 세팅하면이전 과제에서는 직접 command.def 파일에 정의했다면 json 파일을 통해 정의하는 방법으로 진행하겠다.src/commands 아래에 echo2.json 파일을 다음과 같이 생성한다. document와 함께 def 파일을 정의하기 위해 redis에서는 다음과 같이 json으로 빌드 시에 def 파일에 정의할 수 있도록 하였다.{ "ECHO2": { "summary": "Returns t..
[OSSCA2024] Cache - 2주차 온라인 미팅 제가 공부한 내용을 정리하는 블로그입니다. 아직 많이 부족하고 배울게 너무나도 많습니다. 틀린내용이 있으면 언제나 가감없이 말씀해주시면 감사하겠습니다😁Cache 적용 후 Select Query 비교캐시는 얼마나 Hit 되는지가 중요한 요소SELECT는 캐시 Hit 이후 평균 시간이 급격하게 감소UPDATE는 캐시 Hit가 있을 수 없으므로 캐시 적용 전과 비슷.CPU 사용량서비스에 따라 다르지만 SELECT가 DB에 도착하지 않으므로(캐시를 사용하므로) CPU 사용량이 줄어듦.DB에 레플리카를 만들어서 SELECTWRITE에는 다른 트릭을 적용해서 CPU 사용량을 줄일 수 있음.💡 Performance Toolgatling, locust, 엥그라이드, jmeter가 존재. 최근에는 gatling, l..
[OSSCA2024] 3주차 Redis 과제 3번 해설 제가 공부한 내용을 정리하는 블로그입니다. 아직 많이 부족하고 배울게 너무나도 많습니다. 틀린내용이 있으면 언제나 가감없이 말씀해주시면 감사하겠습니다😁2024년 4월 27일 온라인 강의 내용레디스의 echo 명령: 받은 내용 그대로 전달.set a 123/* * set a 123이라는 명령이 들어올 때.. * argv[0]: set * argv[1]: a * argv[2]: 123 * argc: 2 */Redis 실행 flowServerCommandArgServerCommandgenerate-command-code.py해당 파일에서 make_cmd를 자동적으로 만들어줌.comand_list에 들어가는 내용과 JSON을 읽어와서 명령어를 추가.Document와 함수를 한번에 처리하기 위해 JSON을 추가..