티스토리 뷰

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
링크
«   2024/05   »
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
글 보관함