티스토리 뷰
Redis란?
Redis는 In-Memory Store로써, String, List, Set, Hash 등 다양한 자료구조를 제공하고 빠른 데이터 입출력을 제공합니다
Redis single thread
- 명령어를 실행하는 코어부분은 single thread
- 결국은 싱글스레드라 atomic 유지
- I/O Socket read/write를 할때 멀티쓰레드 동작합니다
- 클라이언트가 전송한 명령을 읽어서 파싱하는 부분
- 명령이 처리된 결과 메시지를 클라이언트에게 전달하는 부분
- 단일 스레드를 사용하여 불필요한 context switching 및 lock을 고려할 필요가 없고 deadlock이 없어 성능 소모가 없습니다
- 주요 명령어들은 O(1) 의 성능을 보이지만, 데이터가 많을 경우 여러개의 키를 다루는 명령어가 O(n) 성능을 보입니다
keys : Redis에 존재하는 모든 key를 조회함으로써 long-time 수행을 일으킴 (Redis 매뉴얼에도 운영환경에서는 사용하지 말것을 권고함)
smem : 'Set' 자료구조의 모든 member들을 조회함으로써 long-time 수행을 일으킴
flushall : 전체 데이터를 지우는 명령어로, 키 갯수에 비례한 수행시간을 갖음
Redis persistent
Redis는 휘발성 Memory에 데이터를 저장하기때문에 Persistent를 지원하기 위해 RDB 와 AOF를 지원합니다.
RDB
- Redis는 Single thread로 동작하기 때문에 Snapshot을 뜨는 (SAVE) 시점에서는 모든 명령어 수행이 제한 대신 백그라운드에서 스냅샷을 뜨는 (BGSAVE)를 지원합니다.
AOF
- Redis에 데이터를 저장하기 전에 수행되는 명령어들을 별도로 저장하여 해당 명령어로 persistent를 유지 할 수 있도록 해줍니다.
Redis transaction
레디스 템플릿을 빈으로 띄울때 트랜잭션 설정을 true로 하면 @Trascational 어노테이션 사용시 트랜잭션 동작합니다
@Bean
public RedisTemplate<String, Object> redisTemplate(){
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(redisConnectionFactory());
redisTemplate.setEnableTransactionSupport(true); //트랜잭션 설정
redisTemplate.setKeySerializer(new StringRedisSerializer());
return redisTemplate;
}
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Today
- Yesterday
링크
TAG
- observable
- jvm
- exception
- 메인보드#asrock b650m #조립pc #후기이벤트
- Spring
- Design Pattern
- Serializable
- jdk11
- object
- reactive stream
- JMeter
- Concurrecy
- template method
- reactive
- 부하테스트
- Effective JAVA
- Serialize
- strategy
- Observer Pattern
- template
- concurrency
- 디자인패턴
- nosql
- Redis
- in-memory
- LAMBDA
- Java
- iterable
- gslb
- 영속성
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함