일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- Spring Batch
- it
- Oracle
- MySQL
- elasticsearch
- 요리
- tool
- Web Server
- php
- redis
- Design Patterns
- IntelliJ
- ubuntu
- laravel
- Git
- linux
- jenkins
- Spring
- Spring Boot
- java
- AWS
- db
- Gradle
- springboot
- jsp
- JVM
- devops
- 맛집
- ReactJS
- javascript
- Today
- Total
목록redis (15)
아무거나
Redis 관련 내용 정리대표적인 구조Look Aside Cache (보편적으로 사용)Client -> Application -> Cache 에 데이터가 있으면 Cache 에서 가져옴 만약 없으면 DB 에서 데이터를 읽어오고 해당 데이터를 Cache 에 저장Write BackClient -> Application -> Cache 에 먼저 데이터를 저장하고 특정 시점마다 DB 에 저장이렇게 하면 DB 에 저장될 때 건별로 Insert 쿼리를 날리는 것 보다 한 번에 쿼리를 날리다보니 성능에 용이사용사례여러 서버들이 데이터를 공유할 때인증 토큰 등을 저장Ranking(Sorted Set)APIQueueRedis CollectionsStrings단일 KeyGET SET 멀티 KeyMSET ....MG..
Spring Batch + Redis Pipeline 으로 구현한 성능 개선코드 참고는 https://github.com/bkjeon1614/java-example-code/tree/develop/spring-batch-mybatis-codebase 에서 참고 부탁드립니다.Redis Pipeline 이란Redis의 pipeline은 여러 개의 명령어를 한 번에 보내고, 그 결과를 한 번에 받아올 수 있는 메커니즘입니다. 이를 통해 네트워크 오버헤드를 줄이고 Redis 서버의 처리 성능을 최적화할 수 있다. 또한 주의해야할 점은, Redis 서버의 처리량(capacity)을 고려하여 pipeline의 chunk size를 결정해야 한다.주의사항Request Chunk Size: 먼저 요청하는 chunk s..
Spring Batch 성능 개선 사례 정리개선 항목 점검 Flow유지보수가 좋고 코드가 직관적인 범주 내에서 최적화를 진행이후에도 성능 이슈가 발생하면 멀티 스레드 / 파티셔닝과 같은 다양한 방식으로 진행즉, 직관적인 방식과 단계적으로 진행하는 편이 좋다.개선 항목단일 UPDATE -> WHERE IN (Nos..) UPDATE 로 변경하기 코드에서 단일로 UPDATE 를 실행하면 건별로 DB의 I/O 발생이 일어난다. 만약 WHERE IN 으로 변경시 예를 들어 1000개의 단 건일 경우 WHERE IN 으로 500개씩 나누어 처리하면 최대 2건의 I/O 발생// 단일UPDATE userSET grade = 'A'WHERE id = 1;UPDATE userSET grade = 'A'WHERE id =..
[Redis 시리즈 2편] Lettuce 를 사용한 Read / Write 분리 코드는 https://github.com/bkjeon1614/java-example-code/tree/develop/bkjeon-mybatis-codebase 참고 부탁드립니다. 원활한 세팅을 위해 기존 1편에서 설치된 Redis 를 제거 후 진행하자. 환경 (Reader DNS 를 통한 Replica Node 들에 분산하는 방법으로 가정) Redis Master 1대 Slave 2대 Docker Compose 로 설치 (with. Docker) $ docker network create app-tier --driver bridge [docker-compose.yml] version: '2' networks: app-tier..
[Redis 시리즈 1편] Spring Boot 에 Redis 라이브러리인 Lettuce 적용 코드는 https://github.com/bkjeon1614/java-example-code/tree/develop/bkjeon-mybatis-codebase 참고 부탁드립니다. Lettuce Lettuce 란 Netty(비동기 이벤트 기반 고성능 네트워크 프레임워크) 기반이며 고성능, 확장가능, 스레드세이프등을 지원한다. Lettuce 를 선택한 이유 주로 java 쪽에서는 Lettuce 말고도 Jedis 도 많이 사용한다고 한다. 그러나 Jedis 에 비해 몇 배 이상의 성능, 빠른 피드백, 심플하게 디자인된 코드, 잘 기재된 공식문서 등의 이유로 Lettuce 를 많이 사용하고 있는 추세라고 한다. 환경 ..
Cache 적용 패턴 및 관리 전략 읽기 캐시 전략 Cache-Aside 캐시는 데이터베이스와 직접 연결되지 않고, 애플리케이션이 주체가 되며 보편적으로 많이 사용되는 캐시 전략, 읽기 요청에 적합 방식 (1) 캐시에 데이터가 존재하는지 확인 (2) 데이터가 존재하면 캐시 데이터 반환 (3) 데이터가 존재하지 않으면 애플리케이션에서 DB 에 데이터 요청 후 캐시에 저장하고 데이터를 반환 Read-Through 애플리케이션이 캐시를 직접 바라본다. 즉, 캐시가 주 데이터스토어로 인식되며 데이터베이스로 동기화하는 몫은 캐시에 위임, 읽기 요청에 적합 최초 호출 시 캐시에 데이터가 없으므로 첫 요청시 캐시가 갱신되게 대응 (Ex: Cache Warm up 스케쥴 작업 등..) 방식 (1) 캐시에 데이터 요청 ..
set Key와 Value를 입력 ex) set key "value" mset 여러개의 key와 value를 한번에 입력한다. ex) set key1 "value1" key2 "value2" setex key와 value, Expries(sec)설정을 입력한다. (입력된 시간이후에 소멸한다.) ex) setex key "value" 3 get key에 해당하는 value를 가져온다 mget 여러개의 key값을 입력하여 value를 동시에 리턴받는다. ex) mget key1 key2 key3 incr integer 데이터에 한해서 숫자를 1씩 증가시킨다. rpush List에 오른쪽으로 데이터를 추가시킨다. ex) rpush Key "value" lrange List의 지정한 범위 내의 값을 리턴한다...
Redis 서버 설정을 위해서 작성하는 redis.conf 파일에 대해서 정리한다. 대상 파일: https://raw.github.com/antirez/redis/2.4.15/redis.conf 요약 기본설정 daemonize (daemon으로 실행 여부 설정) pidfile (daemon 실행시 pid가 저장될 파일 경로) port (접근을 허용할 port 설정) bind (요청을 대기할 interface[랜카드] 설정) unixsocket, unixsocketperm (요청을 대기할 unix 소켓 설정) timeout (client와 connection을 끓을 idle 시간 설정) loglevel (loglevel 설정) logfile (log 파일 경로 설정) syslog-enabled (syste..
[Elasticache(Redis) 도입 사례] 검색엔진으로 들어오는 부분에 대해서 캐시를 도입했어야했다. 데이터는 현재 천만건기준으로 후에 4천만건정도 또는 그 이상일 경우를 대비하여 설계를해야 했으며 해결책은 이러했다. 1. 키를 빨리 찾고, 빨리 값을 리턴해야 한다. 2. 데이터는 메모리에 저장되어야 하고, 이상적으로 EC2 high-memory types(68GB 보다는, 17GB나 34GB) 이내에 들어가야 한다. (역자 주: EC2에서 가격이 34GB는 17GB 의 2배, 68GB는 17GB의 4배 입니다.) 3. 기존 구조에 적합해야 한다. 4. 서버가 죽어도 다시 데이터를 새로 생성하지 않도록, persistent 해야 한다. (여기의 의미는, 다른 DB나 로그에서 데이터를 다시 재생성할 ..
Redis 서버 설정을 위해서 작성하는 redis.conf 파일에 대해서 정리한다. 대상 파일: https://raw.github.com/antirez/redis/2.4.15/redis.conf 요약 기본설정 daemonize (daemon으로 실행 여부 설정) pidfile (daemon 실행시 pid가 저장될 파일 경로) port (접근을 허용할 port 설정) bind (요청을 대기할 interface[랜카드] 설정) unixsocket, unixsocketperm (요청을 대기할 unix 소켓 설정) timeout (client와 connection을 끓을 idle 시간 설정) loglevel (loglevel 설정) logfile (log 파일 경로 설정) syslog-enabled (syste..