본문 바로가기
NoSQL/redis

[Redis 1] Redis 는 무엇이며 언제 사용하는가?

by 무대포 개발자 2022. 1. 4.
728x90
반응형

목차는 redis 목차 에 있습니다.

source 는 Github 에 있습니다.

[Redis 1편] Redis 는 무엇이며 언제 사용하는가?

Redis 는 무엇인가?

  • 시스템의 메모리를 사용하는 key, value 데이터 스토어입니다.
  • 디스크까지 접근해서 데이터를 가져오는 방식이 아니라 메모리를 통해 데이터를 가져오는 방식이기에 RDB 보다 접근 속도가 빠릅니다.
  • single 스레드로 동작하여 Atomic 을 보장합니다.

Redis 는 언제 사용하는가?

  • 디스크 I/O 가 빈번하게 발생할 때, 매번 디스크에 접근해 I/O 처리를 한다면 속도가 느릴 것입니다. 이를 해결하기 위해 Redis 를 이용해서 데이터를 캐싱해놓고 빈번하게 발생하는 요청을 처리하는 것입니다.
  • 또한, 이렇게 빈번하게 데이터를 처리하고 RDB 나 NoSQL 에 데이터를 업데이트 하도록 설계할 수도 있습니다.
  • 실제 사례를 들면, API 결과 값에 대해 캐싱을 하거나 세션 값을 캐싱하거나 빈번하게 요청되는 요청에 대해 캐싱하는 사례가 있습니다.

Redis 자료 구조

Hash

  • 하나의 키에 다양한 value 가 올 수 있습니다.
  • 예를 들면, 1234567890 이라는 키를 가지고 column1:value1 column2:value2 이런식으로 저장이 가능합니다
  • RDB 의 PK (key) 나머지 컬럼을 value 로 이해하면 됩니다. 일부를 가져올 수 있고, 전체를 다 가져올 수 있습니다.
    • Member 라는 테이블의 PK 는 member_id 이며, name:test, age:20 이 value 입니다.
    • Name 만 가져올 수도 있고, name, age 전부 가져올 수 있습니다.

List

  • 자바의 연결리스트 입니다. 데이터 삽입 시간복잡도는 O(1) 입니다. (맨 앞이나 맨 뒤에 넣기에)
  • 큐나 스택으로 사용할 수 있습니다.
  • List 의 길이를 고정된 길이로 사용 가능합니다. (즉, 데이터가 넘치면 버리는 구조입니다.)
  • 사용 예시 1
    • 사용자가 들어갔던 페이지를 저장하고 그것을 웹페이지에 보여주고 싶습니다. 보여줄 때는, 최근에 저장된 순으로 보여주고 싶습니다. (예를 들면, 쇼핑몰 에서 여러 상품 페이지를 클릭하고 내가 최근에 클릭한 페이지 순으로 보여주는 기능이라고 가정하겠습니다.)
    • 위와 같은 상황일 때, List 를 사용해서 데이터가 들어올 때마다 순차적으로 데이터를 쌓아주고 조회가 필요할 때는 순차적으로 보여주면 됩니다. (Stack 방식)
    • 데이터를 너무 많이 쌓기만 해서는 안되므로 특정 페이지 개수를 넘어서면 기존 오래된 페이지를 지우는 방법으로 계속해서 업데이트를 해야할 것입니다.
  • 사용 예시 2
    • 타임 라인, 최근 방문자 등에 사용 가능

Set

  • Set 데이터는 순서 보장이 안되지만, 중복을 허용하지 않습니다. 데이터를 찾고 지우고 추가하는 것이 O(1) 시간복잡도입니다.
  • 하나의 key 에는 여러 개의 Element 가 올 수 있습니다.
  • Set의 예를 들면, 123456(key) 가 있고, “test”,”test1”,”test2” 이런식으로 데이터를 저장합니다.

Sorted Set

  • Set 데이터에서 Value 에 가중치를 부여하여 정렬 기능이 있는 자료구조입니다.
    • 조금 더 상세하게 얘기하면 Key 하나에 여러 score 와 value 로 이루어졌습니다.
    • Score 를 기준으로 정렬이 이루어집니다.
  • 실제 업무 개발할 때, 정렬 기능이 필요할 경우 해당 자료구조를 사용하는 것에 대해 고려해볼 수 있지만 다른 자료 구조형으로 더 좋은 시간복잡도와 공간복잡도로 해결이 가능한지 비교해봐야 합니다.

Bit

  • 0과 1로 표현할 수 있는 자료구조입니다. (자바의 boolean 과 유사합니다)
  • 예를 들면, 10000(key), 0 (value ) / 10001(key), 1(value)
  • 0과 1을 통해 count 를 할 수도 있고, false, true 로 사용할 수 있습니다.

결론

  • Redis 는 여러 가지의 자료구조를 제공하고 있으며, 용도에 맞는 것을 사용하면 됩니다.
  • Spring data redis 의 경우 opsForList, opsForSet 등의 메소드를 통해 Redis 의 자료구조를 사용할 수 있도록 제공하고 있습니다.

Refrence

댓글