본문 바로가기

Redis

Redis가 싱글스레드임에도 높은 성능을 보장하는이유 분산된 서버에서 데이터를 저장하거나, TTL을 설정하거나, 동시성을 제어하기위해 등등 여러용도로 Redis는 많이사용되고있다. 프로젝트에서도 Redis를 사용하면서 싱글스레드기반으로 동작되기 때문에 동시성문제를 제어하는데 있어서 문제는 없지만싱글스레드기반이기 때문에 성능에 문제가 있지 않을까? 하는 의문은 한번 쯤은 해봤던 것 같다. 이 의문점을 풀기위해 글을 작성합니다.  왜 Redis는 높은 성능을 보장하는가 ? 1. 메모리 기반 데이터 저장- Redis는 모든 데이터를 메인 메모리에 저장하고 주기적으로 스냅샷을 디스크에 저장한다. 2. 싱글 스레드 및 이벤트 루트 시스템Redis는 Node.js와 같이 이벤트루프와 I/O Multiplexing을 통해 싱글 스레드 모델임에도 높은 동시성을 보장한다... 더보기
Redis - Pipelining Redis하면 뭐가 떠오를까 ? - 캐시이므로 빠른 성능 - key-value - 인메모리 db - Single thread - atomic Single thread vs Multi Thread redis는 부분적으로 Single thread와 Multi Thread를 함께 사용한다. 클라이언트로 부터 전송된 네트워크를 읽는 부분과 전송하는 부분은 Multi Thread로 구현되어있으며 우리가 redis에 요청한 명령을 실행하는 부분은 Single thread로 구현되어 있다. 때문에 single thread의 장점인 Atomic한 요청 처리가 가능한 것이다. I/O : 네트워크 connection Event Loop : 명령 실행부분 위와 같은 방식을 활용한다면 클라이언트가 네트워크 패킷을 여러번 보냈.. 더보기
실습으로 배우는 선착순 이벤트 시스템 - review 실습으로 배우는 선착순 이벤트 시스템이란 것을 인프런에서 시청했다. kafka를 통해 영감을 받거나 새로운 insight를 얻은 것을 정리하려고 한다. https://www.inflearn.com/course/%EC%84%A0%EC%B0%A9%EC%88%9C-%EC%9D%B4%EB%B2%A4%ED%8A%B8-%EC%8B%9C%EC%8A%A4%ED%85%9C-%EC%8B%A4%EC%8A%B5/dashboard 실습으로 배우는 선착순 이벤트 시스템 - 인프런 | 강의 선착순 이벤트 시스템을 구현할 때 어떤 문제가 발생할 수 있고 어떻게 해결할 수 있는지 배워봅니다., - 강의 소개 | 인프런 www.inflearn.com 쿠폰 서비스 개발하기 100개의 쿠폰을 선착순으로 개발할 예정이고 1000명이 해당 쿠.. 더보기
PUB/SUB 채팅서비스 redis ? kafka 이번 소프트웨어마에스트로 서비스에서 채팅서비스를 운영하면서 웹소켓의 stomp구조를 사용하게되었다. STOMP란 무엇일까 ? (Simple/Stream Text Oriented Message Protocol) websocket 위에서 동작하는 문자 기반 메세징 프로토콜로써 클라이언트와 서버가 전송할 메세지의 유형 형식 내용들을 정의하는 매니즘 TCP와 웹소켓과 같은 신뢰할 수 있는 양방향 스트리밍 네트워크 프로토콜 기본적으로 pub/sub 구조이며, 메세지 전송하고 받아 처리하는 부분이 확실히 정해져 있다. http 와 마찬가지로 frame을 사용해 전송하는 프로토콜 여기서 pub/sub 란 무엇인지 또 알아보겠습니다. 1. 이벤트메세지를 발행하는 publisher가 존재하고, publisher는 특정 .. 더보기
동시성문제 -> Redis Redisson 재시도가 필요하지 않은 Lock은 Lettuce를 활용할 것이고 재시도가 필요한 경우에는 Redisson을 사용할 것 입니다. setnx 메소드는 만약 키가 존재하지 않는다면 설정하게 되는 것이므로 Redis 에 계속해서 LockKeyName 이 존재하는지 확인해야만 합니다. 따라서 순회하는 동안 계속해서 Redis 에 요청을 보내게 되는 것이므로 스레드 혹은 프로세스가 많다면 Redis 에 부하가 가게 될 것이기 때문에 재시도가 필요한 경우에는 Redisson 방식을 사용할 것입니다 Redisson - Pub-Sub 기반으로 Lock 구현 제공 - Pub-Sub 방식이란, 채널을 하나 만들고, 락을 점유중인 스레드가, 락을 해제했음을, 대기중인 스레드 에게 알려주면 대기중인 스레드가 락 점유를 시도하는.. 더보기
Redis_Crud_Example Cache란? "오랜시간이 걸리는 작업" 혹은 "반복적으로 요청하는 작업"의 결과를 메모리에 저장해서 데이터 접근의 시간과 비용을 줄이는 기법을 의미합니다. application.yml 이번 실습에서는 Cache 저장소로는 Database 저장소로는 OracleDB 를 사용하며, ORM은 JPA를 사용합니다. spring.datasource.driver-class-name=oracle.jdbc.OracleDriver spring.datasource.url=URL주소 spring.datasource.username=아이디 spring.datasource.password=비번 logging.level.org.hibernate=info ##jpa spring.jpa.database=oracle spring.j.. 더보기
[Redis] 사용하는이유 이번 토이 프로젝트에서 Redis를 도입해보기전에 Redis가 무엇인지 학습하고 내용을 정리해보겠습니다. Redis(Remote Dictonaryt Server)란 ? in-memmory 형태의 No-SQL로써 Key-Value 쌍의 해쉬 맵 형태의 데이터베이스입니다. Remote Dictionary Server in-memory: disk가 아닌 memory에 저장하기 때문에 disk I/O 작업이 발생하지 않아 속도가 빠르며, 휘발성입니다. No-SQL: Not Only SQL를 뜻하며 RDBMS에 비해 속도가 빠른 장점이 있습니다. No-SQL종류: Redis,Cassandra,HBase,MongoDB,Firebase 실시간데이터베이스 Redis 특징 1. 다양한 데이터 구조 Redis는 Strin.. 더보기