Redis

박경희·2023년 6월 25일
0

공부를 해보자

목록 보기
14/38

Redis를 알아보자

*참고 - https://www.youtube.com/watch?v=92NizoBL4uA
-> 대부분 유튜브에 나온 영상을 내가 이해하기 위해 글로 타이핑 한 것이므로 그림과 함께 자세한 내용을 알고자 한다면 유튜브를 보도록 하자.

1. redis 캐시로 사용하기.

  • redis는 전 세계에서 가장 유명한 caching 솔루션이다.

  • 캐시란?
    -> 데이터의 원래 소스보다 더 빠르고 효율적으로 액세스 할 수 있는 임시 데이터 저장소다.

  • 대부분의 어플리케이션에서는 속도 향상을 위하여 cache를 사용하고 있다.
    캐시가 유용하게 사용되려면 일단 먼저 캐시에 접근하는게 원본에 접근하는 것보다 빨라야 한다.

    동일한 데이터에 대해 반복적으로 액세스하는 상황이 많을 때 캐시를 사용하는 것이 좋다.
    즉, 데이터의 재사용 횟수가 한번 이상이어야 캐시가 의미있게 된다.

    또한 잘 변하지 않는 데이터일수록 캐시를 사용할 때 더 효율적이다.
    -> 그러므로 redis는 캐시를 사용하기에 딱 좋은 솔루션이다.

redis의 장점

  • 사용이 편리하다.
  • 단순하게 key -value형태로 저장할 수 있기 때문에 어떤 데이터라도 쉽게 저장할 수 있다.
  • redis는 모든 데이터를 메모리에 올려두는 인메모리 데이터 스토어이다(RAM).
    ==> 이것은 굉장히 빠르다는 것을 의미한다.

⭐️ 1. 캐싱 전략-읽기(Caching Strategies)

  • redis를 cache로 사용할 때 어떻게 배치하는가가 시스템의 성능에 큰 영향을 끼치기도 한다.

    -> 데이터의 유형과 해당 데이터에 대한 액세스 패턴을 잘 고려해서 선택해야 한다.

    1-1. look-aside(어플리케이션에서 데이터를 읽는 작업이 많을 때 사용하는 전략)

  • 레디스를 캐시로쓸 때 가장 일반적으로 사용하는 방법이다.
    어플리케이션은 데이터를 찾을 때 캐시에 먼저 확인을 한다. 찾는 데이터가 캐시에 있으면 그것을 가져오는 작업을 반복하면 되지만, 데이터가 없으면 DB에 접근해서 가져와 저장하는 작업을 한다. 따라서 캐시는 찾는 데이터가 없을 때에만 입력되기 떄문에 lazy loading 이라고도 부른다.

⭐️ 2. 캐싱 전략-쓰기(Caching Strategies)

  • cache warminㅡdb에서 쓰는 쓰기전략

    2-1. write-Around방식

  • DB에만 데이터를 저장한다.

  • 모든 데이터를 저장하고, 캐시 미스가 발생한 경우 캐시 데이터를 끌어오게 된다.
    이 경우 캐시 내의 데이터의 db내의 데이터가 다를 수 있다는 단점이 있다.

    2-2. Write-Through방식

  • DB에 데이터를 저장할 때 캐시에도 함께 저장하는 방식이다.

  • 캐시가 항상 최신 정보를 가지고 있다는 장점이 있지만 저장할 때마다 두 단계의 스텝을 거쳐야 하기 때문에 상대적으로 느리다고 볼 수 있다.

  • 또한 저장한 데이터가 재사용되지 않을 수 있는데, 이를 모두 저장해 두는 것은 일종의 리소스 낭비라고 볼 수 있다.

  • expire time을 설정해 주는 것이 좋다.
    -> 몇분 혹은 몇시간만 데이터를 보관하겠다는 의미로 사용하는 것이다.

2. Redis의 데이터 타입

redis는 자체적으로 많은 자료구조를 제공하고 있다.

string타입(counting 적절)

  • set커맨드를 이용해 저장되는 데이터는 모두 String 형태로 들어간다.

bitmap타입

  • String의 변형이라고 볼 수 있고 bit단위로 연산도 가능하다.

List (Messaging 적절)

  • 데이터를 순서대로 저장하기 때문에 큐로 사용하기에 적절하다.

Hashes

  • 하나의 키 안에 또다시 여러 개의 필드와 밸류 쌍으로 데이터를 저장한다.

Set

  • 중복되지 않은 문자열의 집합이다.

Sorted Set

  • set처럼 중복되지 않은 값을 저장하지만 모든 값은 score라는 숫자값으로 정렬 된다.
    데이터가 저장될 때무터 score순으로 정렬되며 만약 score가 같으면 사전 순으로 정렬된다.

Hyperloglogs (counting 적절)

  • 굉장히 많은 데이터를 다룰 때 주로 쓰며 중복되지 않는 값의 개수를 카운트할 때 사용한다.
  • 모든 스트링 데이터 값을 유니크하게 구분할 수 있다. 이는 set과 비슷하지만 대량의 데이터를 카운팅 할 때 훨씬 더 적절하다.
  • 저장되는 데이터 개수에 상관없이 모든 값이 12KB로 고정되어 저장되기 때문이다. (몇백만 건이건)
    대신 저장된 데이터는 다시 확인할 수 없다.
  • 경우에 따라 데이터를 보호하기 위한 목적으로도 적절하게 사용할 수 있다.

Stream (Messaging 적절)

  • log를 저장하기 가장 좋은 자료구조이다.

이 다음부터는 아직 이해 되지 않아 계속 공부를 해보며 참고 영상을 봐야할 것 같다.

0개의 댓글