Redis 활용한 동시성 처리‘광고 슬로건 이벤트’ 로직을 구현하면서 상품 개수에 대해 동시성 문제를 처리해야 했다.Spring 환경에서 동시성을 처리하기 위해서는 여러 방법이 있는데, 나는 Redis Lua Script를 활용해서 처리했다. 방법 1) Spring synchronized, reentrantlock위 방법 같은 경우에는 멀티 스레드 환경에서 동시성을 보장하기 위한 방법이다.이는 멀티 스레드 환경에서 단일 스레드처럼 실행되도록 하여 동시성을 보장하는 방법이다. 현재 개발하고 있는 기능은 실시간으로 선착순에 따라 상품을 지급해야 해서 더 빠른 방법으로 처리해야 했다. 방법 2) RDB 비관적 락 걸기DB로는 MySQL을 사용했는데, 동시성 처리를 해결하기 위해 이벤트 상품 테이블에 Lock..
본 성능 테스트는 Docker compose를 활용하여 Redis, Redis-exporter, Prometheus, Grafana를 구축했습니다.Pipeline을 통한 데이터 처리와 단일 처리의 처리 속도와 네트워크 I/O 량을 분석하며, 어떠한 성능 차이가 있는지 분석하였습니다. 추가적으로, Redis를 모니터링할 때 어떤 Metric을 확인하는 것이 좋은지 정리하였습니다. Redis Pipeline 성능 테스트1. 단일 처리 총 10,000개의 데이터 생성을 테스트했을 때 1.99초가 소요됐습니다. 더보기단일 처리 코드 확인하기 (Python)def single_insert(): num_keys = 10000 r = redis.Redis(host="localhost", port=6379..
Stream 사용한 이유pub/sub 구조Consumer Group을 통해 데이터 중복 없이 동시 처리 가능XACK, PEL 을 통해 메시지 처리 여부 확인 가능일정 기간 동안 ACK을 받지 못한 메시지는 다른 소비자가 재처리Redis StreamsRedis Stream is a data structure that acts like an append-only log and complex consumption strategies, such as consumer group. we can use streams to record and simultaneously syndicate events in real time.➡️ random access in O(1) Redis Stream은 append-only 특성으..
Redis PersistenceRedis는 In-Memory 기반 저장소이다.서버 재시작 시 모든 데이터 유실됩니다.복제 기능을 사용해도 사람의 실수 발생 시 데이터 복원이 발생할 수 있다.Redis를 캐싱 이외의 용도로 사용 시 데이터 백업이 필요하다. ➡️ 이를 개선하기 위해 AOF, RDB 파일을 활용한다. AOF (append only file)데이터를 변경하는 커맨드가 요청되면, 커맨드를 그대로 모두 저장합니다.AOF는 모든 쓰기 작업을 기록하므로, 파일 크기가 점점 커진다. ➡️ AOF는 주기적으로 압축해서 재작성되는 과정을 거쳐야 한다. (파일 크기 줄이기 위해)여기서 압축 작업이란 동일한 결과를 만들 수 있도록, 명령어 로그를 재작성하여 더욱 간결한 명령어 집합을 만드는 것을 의미한다.자동..