Redis 기초1

justindevcode·2024년 5월 18일

레디스

목록 보기
3/3
post-thumbnail

Redis 기초1

Redis 개념 소개

  • Redis => REmote DIctionary Server
    • 중요한 점은 key:value형식의 dictionary 저장소라는 것.
  • In-Memory Data Structure Store
    • 프로세스로 존재하며, 보통 remote에 존재한다.
    • DB, Cache, Message Broker로 사용된다.
  • Open Source (BDS 3 License)
  • Support data structures (key:value)
    • Strings, set, sorted-set, hashes, list
    • Hyperloglog, bitmap, geospatial index
    • Stream
  • 다양한 기능을 제공
    • Build-In Replication
    • 트랜잭션
    • different levels of on-disk persistence
    • 클러스터링 등등
  • Only 1 Committer
    • Redis 소스 코드를 고칠 수 있는 권한이 있는 사람은 딱 한 명!

Cache

Redis는 캐싱을 위해 많이 사용되므로 캐싱에 대해 알면 도움이 된다.

Cache란?

  • Cache는 나중에 요청을 결과를 미리 저장해두었다가 빠르게 서비스를 해주는 것을 의미
    • ex. Factorial -> 10! = 10 * 9! (9!를 캐싱해두면 연산이 훨씬 빨라짐)
    • ex. DP
    • 운영체제도 CPU가 디스크에 접근하는 속도가 느리므로, 중간에 캐시를 많이 둬서 이를 빠르게 사용하도록 한다.
  • 파레토 법칙
    • 20:80 법칙으로, 우리 사회에서 일어나는 현상의 80%는 20%의 원인으로 인하여 발생한다. (캐싱을 잘 설명해주는 유비쿼터스)
    • 즉, 전체 요청의 80%는 20%의 사용자이다. (캐싱을 사용해야 하는 이유)

웹 서버에서 사용되는 Cache 구조

아주 추상적인 웹 서비스 구조

  • 캐싱을 적용하지 않은 구조
    • DB안에 모든 데이터가 존재하는 구조.
    • 디스크에 데이터를 저장하는 일반적인 구조.

Look aside Cache

  • Web Server는 데이터가 존재하는지 Cache를 먼저 확인한다.
    • Cache에 데이터가 있으면 Cache에서 값을 가져온다.
    • Cache에 데이터가 없다면 DB에서 데이터를 가져와서 Cache에 저장하고 값을 가져온다.
  • Write하는 방식
    • 방법1. 애플리케이션이 새로운 데이터 쓰기 혹은 업데이트할 때 캐시와 DB 모두에 같은 작업을 실행하는 방법.
    • 방법2. 애플리케이션의 모든 쓰기 작업은 DB에만 적용되고, 기존의 캐시 데이터를 무효화시키는 방법.

Write Back

  • Web Server는 모든 데이터를 Cache에만 저장한다.
    • Cache에 특정 시간동안의 데이터가 저장된다.
    • 그리고 배치처리를 통해 Cache에 있는 데이터를 DB에 저장한다.
    • DB에 저장되었다면 Cache에는 해당 데이터를 삭제한다.
  • 이 방식의 단점
    • 장애가 생기면 데이터가 날아갈 수도 있다. 안정성 부분에서 불안한다.
    • 그래서 로그를 Redis에 넣어두고 배치적으로 저장할 때 많이 사용된다.

질문 Q: insert 쿼리를 한번씩 500번 날리는 것과 insert 쿼리 한번에 500개를 붙여서 날리는 것중 어느 것이 더 빠를까?

  • 후자가 훨씬 빠르다. write back은 이 원리를 이용한 방식이다.

Redis는 언제 사용되는가?

  • Remote Data Store
    • A 서버, B 서버, C 서버에서 데이터를 공유하고 싶을 때
  • 한대에서만 필요한다면, 전역 변수를 쓰면 되지 않는가?
    • Redis 자체가 Atomic을 보장해주기 때문. (싱글 스레드라.. Thread Safe하다)
    • 물론 특정 상황에서 완벽하진 않다고 한다.
  • 주로 많이 사용되는 곳
    • 인증 토큰 등을 저장 (Strings 또는 hash)
    • Ranking 보드로 사용 (Sorted Set)
    • 유저 API Limit
    • 잡 큐 (list)

출처

https://github.com/binghe819/TIL/blob/master/DB/Redis/Redis%EB%8A%94%20%EB%AC%B4%EC%97%87%EC%9D%B4%EA%B3%A0,%20%EC%96%B4%EB%96%BB%EA%B2%8C%20%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94%20%EA%B2%83%EC%9D%B4%20%EC%A2%8B%EC%9D%80%EA%B0%80/Redis%EB%8A%94%20%EB%AC%B4%EC%97%87%EC%9D%B4%EA%B3%A0,%20%EC%96%B4%EB%96%BB%EA%B2%8C%20%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94%20%EA%B2%83%EC%9D%B4%20%EC%A2%8B%EC%9D%80%EA%B0%80.md

profile
("Hello World!");

0개의 댓글