Redis로 동시성 제어해보기
·
Back-End/Redis
❐ Description과거 위웃 프로젝트를 담당하고 있던 때, 초대코드 `입력시 동시성 이슈 + Dead Lock` 를 마주친 적이 있다.빠른 대응이 우선되었기 때문에, 비관적 잠금을 통해 이슈를 대응했다. 하지만, 위와 같이 잠금 매커니즘으로 대응하는 방법은 추후 `Dead Lock`을 유발할 수 잇는 위험성이 있다.아니나 다를까 간헐적으로 CannotAcquireLockException이 Slack(Sentry 연동) 알람으로 날아온 기억이 난다.따라서 추후에 DB 잠금을 걸지 않고 Redis로 동시성을 제어하도록 개선한 경험이 있는데 이것을 기록해봐야겠다.테스트 도구로 JMeter를 사용했다.     ❐ 과거 문제 및 재현1. 문제 상황120명이 동시에 A라는 사람의 초대코드를 사용해서 회원가입을..
레디스 데이터 백업 방식
·
Back-End/Redis
❐ Descriptionredis를 캐시가 아닌 영구 저장소와 같은 용도로 사용한다면, 데이터를 디스크에 주기적으로백업하는 것이 안전하다. 데이터를 안전하게 저장하기 위해 Redis에서는 RDB와 AOF 두 가지백업 방식을 지원한다. 오늘은 각 백업 방식의 특징과 차이점을 학습해보자.     ❐ RDB1. RDB란?RDB 파일은 레디스에서 데이터를 백업하기 위한 가장 단순한 방법이다.원하는 시점에 메모리  자체를 스냅숏 찍듯 저장할 수 있다.바이너리 파일이다.AOF 파일보다 사이즈가 작아서, 로딩 속도가 더 빠르다. 2. 저장 시점 정하기save 900 1           #900초(15분) 동안 1번 이상 key 변경이 발생하면 저장save 300 10         #300초(5분) 동안 10번 이..
Redis를 캐시로 사용하기
·
Back-End/Redis
❐ Description주로 고정적인 데이터나, 변화가 적은 데이터에 대해서 캐싱을 많이 사용해왔다. 물론 앞으로도 많이사용할 것 같은데, Redis를 캐시로 더 잘 사용하는 법과 주의할 점에 대해서 알아보고 숙지하자.     ❐ Redis와 캐시1. Warming-up캐시를 사용하게 되면 아래의 이점을 챙길 수 있다.원본 데이터를 가지고 오는 시간을 단축 ➪ API latency 단축애플리케이션 자체의 리소스 최적화RDB에 장애가 생기더라도 캐시에서 데이터를 가지고 올 수 있음 ➪ 장애 시간 단축 그렇다면 어떤 특지을 갖는 데이터를 대상으로 캐싱을 해야할까?변화가 적은 데이터 (상단 배너 공고)자주 검색되는 데이터(최근 검색 이력) 2. Redis as a Cache그렇다면 Redis를 캐시의 용도로 ..
Redis 자료구조 활용 사례
·
Back-End/Redis
❐ DescriptionRedis의 자료구조를 적절히 활용해 애플리케이션 성능을 향상 시키며,동시에 개발의 단순성과 편의성을 증대할 수 있는 방법에 대해서 알아보자.+ ) 실무에서 발생할 수 있는 요구 사항을 생각해서 직접 예제를 만들고 실습까지 해보자.   ❐ sorted set을 이용한 사례ChatGPT에게 예제 데이터를 만들어 달라고 했다.Redis의 자료구조 sorted set으로 리더보드 예시를 만들꺼야.2024년 12월 1일 부터 18일까지, 예제 데이터를 만들어 줘.template : ZADD daily-score: user:각 요일마다 데이터수는 10개 이상이고 같은 날에 user의 id는 중복될 수 없어.(다른 날은 상관 없어) 1. 실시간 리더보드 & 랭킹 합산sorted set은 ..
Redis 기본 개념
·
Back-End/Redis
❐ DescriptionRedis의 다양한 자료구조의 종류와 그 특징에 대해서 알아보고,Redis의 키를 관리하는 법을 학습하자.  redis-cli 한글 깨짐  ❐ Redis Data Structure1. String가장 간단한 자료구조 512MB의 문자열 데이터를 저장할 수 있다.모든 종류의 문자열이 binary-safe하다. INCR, INCRBY와 같은 커맨드는 string 자료 구조에 저장된 숫자를 원자적(atomic)으로 조작할 수 있다.이러한 커맨드는 Race condition을 발생시킬 일이 없다.A와 B가 동시에 10이라는 데이터를 가지고 있는 키에 INCR 커맨드를 수행하더라도 하나의 커맨드만 수행돼11이 저장되는 상황이 발생하지 않는다.  2. list하나의 list에는 최대 42억여..
Redis 설정하기
·
Back-End/Redis
❐ Description나는 Docker 환경에서 redis를 설정하기 때문에 책의 가이드와 약간은 차이가 있었다.책 내용 + 공부 과정에서 알게된 지식을 기록해보자.     ❐ Open files 확인아래의 커맨드로 현재 설정된 maxclients 설정 값을 확인할 수 있다.127.0.0.1:6379> config get maxclients1) "maxclients"2) "10000"`maxclients`는 레디스 프로세스에서 받아들일 수 있는 최대 클라이언트 수를 의미한다.  모든 I/O 작업(파일, 소켓, 파이프 등)은 파일 디스크립터를 통해 이루어지기 때문에Redis는 클라이언트의 연결마다 파일(소켓)을 생성한다. 이때 Redis에 설정된 '파일 디스크립터'의 수가 'maxclients 수 + 3..
마이크로서비스 아키텍쳐와 레디스
·
Back-End/Redis
❐ Redis의 특징1. 실시간 응답 (빠른 성능)데이터베이스는 대부분 디스크에 Block 단위로 보조 기억장치에 데이터를 저장한다.따라서 데이터를 조회할 때 직접 디스크에서 데이터를 Block 단위로 조회해서 속도가 느리다. 하지만 레디스와 같은 인메모리 형태의 데이터베이스에서는 모든 데이터가 컴퓨터의 메모리에서 관리된다.디스크에 접근하는 과정이 필요 없기 때문에 데이터의 처리 성능이 굉장히 빠르다는 장점을 갖는다.  2. 단순성레디스는 키-값 형태로 데이터를 관리할 수 있는 데이터 저장소다. String 뿐만 아니라 hash, hashSet 등더욱 복잡하고 다양한 데이터 구조를 저장할 수 있도록 지원하며, 이런 데이터 타입은 프로그래밍의기본 자료 구조와 밀접한 관련이 있어 추가적인 데이터의 가공 없이..
ReadMe
·
Back-End/Redis
❐ Description회사에서는 Redis를 주로 캐시 용도로만 사용하곤 했다. 이번 기회에 Redis에 대한 기본 개념 정리와실무에 투입됐을 때 능숙하게 Redis를 활용할 수 있는 실력을 만드는 것이 목표다.  개발자를 위한 레디스를 바탕으로 학습하며, 실제 예제는 ChatGPT를 활용하여 만들고, 실습을 진행할 계획이다. [전자책]개발자를 위한 레디스 - 예스24◈ 요약 ◈개발자가 인메모리 데이터베이스인 레디스를 잘 활용할 수 있도록 초점을 맞춘 포괄적인 안내서다. 레디스를 처음 배우는 독자나 NoSQL 데이터베이스의 개념을 쌓고자 하는 개발자를www.yes24.com