본문 바로가기

Redis

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 : 명령 실행부분 위와 같은 방식을 활용한다면 클라이언트가 네트워크 패킷을 여러번 보냈.. 더보기
redis 서버에 외부서버가 접근하는 방법 docker-compose.yml db-mysql: restart: always image: mysql:8.0 environment: MYSQL_DATABASE: ${MYSQL_DATABASE} MYSQL_ROOT_HOST: ${MYSQL_ROOT_HOST} MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD} ports: - 3306:3306 command: - "mysqld" - "--character-set-server=utf8mb4" - "--collation-server=utf8mb4_unicode_ci" volumes: - ./db:/var/lib/mysql redis: hostname: ${REDIS_HOSTNAME} container_name: redis image.. 더보기
PUB/SUB 채팅서비스 redis ? kafka 이번 소프트웨어마에스트로 서비스에서 채팅서비스를 운영하면서 웹소켓의 stomp구조를 사용하게되었다. STOMP란 무엇일까 ? (Simple/Stream Text Oriented Message Protocol) websocket 위에서 동작하는 문자 기반 메세징 프로토콜로써 클라이언트와 서버가 전송할 메세지의 유형 형식 내용들을 정의하는 매니즘 TCP와 웹소켓과 같은 신뢰할 수 있는 양방향 스트리밍 네트워크 프로토콜 기본적으로 pub/sub 구조이며, 메세지 전송하고 받아 처리하는 부분이 확실히 정해져 있다. http 와 마찬가지로 frame을 사용해 전송하는 프로토콜 여기서 pub/sub 란 무엇인지 또 알아보겠습니다. 1. 이벤트메세지를 발행하는 publisher가 존재하고, publisher는 특정 .. 더보기
Lock 정리(낙관적 락과 비관적 락, 분산락, 데드락) 및 활용까지 낙관적 락(optimistic Lock) - 충돌이 발생하지 않는다고 낙관적이라고 가정함. - DB가 제공하는 락 기능이 아니라 어플리케이션에서 제공하는 버전관리 기능을 사용함. - version 등의 구분칼럼을 사용하여 충돌방지 - 트랜잭션을 커밋하는 시점에 충돌을 알 수 잇다. - 최근 업데이트 과정에서만 락을 점유하기 때문에 락 점유시간을 최소화하여 동시성을 높일 수 있다. 예) 1. A가 먼저 접근 후 바로 뒤이어 B가 접근한다. 2. A가 해당 ROW와 version 을 업데이트한다. 3.B가 커밋 시점에 해당 ROW를 업데이트하려고 version을 체크해보니 처음과 다른 경우 어플리케이션은 예외를 발생시키고 첫번째 A의 커밋만 적용하여 정합성을 유지한다. 4. 실패된 커밋을 어플리케이션에서 후.. 더보기
동시성문제 -> Redis Redisson 재시도가 필요하지 않은 Lock은 Lettuce를 활용할 것이고 재시도가 필요한 경우에는 Redisson을 사용할 것 입니다. setnx 메소드는 만약 키가 존재하지 않는다면 설정하게 되는 것이므로 Redis 에 계속해서 LockKeyName 이 존재하는지 확인해야만 합니다. 따라서 순회하는 동안 계속해서 Redis 에 요청을 보내게 되는 것이므로 스레드 혹은 프로세스가 많다면 Redis 에 부하가 가게 될 것이기 때문에 재시도가 필요한 경우에는 Redisson 방식을 사용할 것입니다 Redisson - Pub-Sub 기반으로 Lock 구현 제공 - Pub-Sub 방식이란, 채널을 하나 만들고, 락을 점유중인 스레드가, 락을 해제했음을, 대기중인 스레드 에게 알려주면 대기중인 스레드가 락 점유를 시도하는.. 더보기
CrudRepository 와 JPARepository의 차이 CrudRepository CRUD 기능을 제공하는 인터페이스. org.springframework.data.repository 인터페이스 Repository를 확장함. 사용 더보기 @Repository public interface PersonRepository extends CrudRepository { // ... } CrudRepository의 메서드 long count() 가용 entity의 수를 반환함 리포지토리의 데이터 개수 확인 Delete void delete(T entity) 주어진 entity를 삭제함 entity가 null이면 IllegalArgumentException을 던짐 void deleteById(ID id) 주어진 id를 가진 엔티티를 삭제함 id가 null이면 Illeg.. 더보기
Redis 용어정리 Redis 명령어 정리 string : get hash : hgetall lists : lrange sets : smembers sorted sets : ZRANGEBYSCORE 데이터 타입에 따른 더 다양한 명령어는 Redis 공식문서 참고 key : key1, value : value1 key : key2, value : value2 키값 입력하기 set key1 value1 set key2 value2 전체 키 확인 keys * 전체 키 삭제 flushall 전체 키 확인 keys * 💻 Programming redis-cli 를 이용한 elasticache 데이터 조회 아직 redis-cli 설치가 안되어있다면 redis-cli 설치를 참고해주세요 https://minwoo-it-factory.t.. 더보기
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.. 더보기