포스트

2022-10-19-TIL

2022-10-19-TIL

Today I Learned

Redis

Redis 공식 문서는 Redis를 “data structure server”라고 소개한다. 단순히 문자열 값을 저장하는 키-값 저장소가 아니라, 값 자리에 여러 자료구조를 두고 그 자료구조에 맞는 명령을 서버에서 바로 실행한다는 뜻이다(Redis data types). 주요 자료구조와 대표적인 쓰임은 다음과 같다.

자료구조설명흔한 쓰임
String바이트 시퀀스. 가장 기본 타입캐시, 카운터
List삽입 순서를 유지하는 문자열 목록큐, 최근 항목
Set중복 없는 문자열 집합. 추가, 삭제, 포함 여부가 O(1)태그, 방문자 집합
Hash필드-값 쌍의 모음객체 한 건 저장
Sorted Set점수 순으로 정렬된 집합랭킹, 순위표
Streamappend-only 로그처럼 동작이벤트 기록과 소비

데이터를 메모리에 두기 때문에 빠르지만, 서버가 내려가면 메모리의 데이터는 사라진다. 그래서 Redis는 디스크에 남기는 방법을 두 가지 제공한다(Redis persistence).

  • RDB: 정해진 간격으로 데이터셋 전체의 스냅샷을 남긴다. 파일이 작고 재시작이 빠르지만, 마지막 스냅샷 이후의 변경은 잃을 수 있다.
  • AOF: 서버가 받은 쓰기 명령을 모두 로그로 남기고, 재시작할 때 다시 실행해 데이터를 복원한다. 기본 정책인 매초 fsync에서는 장애가 나도 약 1초 분량만 잃는다.

문서는 PostgreSQL 수준의 안전성을 원하면 둘을 함께 쓰고, 몇 분 정도의 유실을 감수할 수 있으면 RDB만 써도 된다고 안내한다. 캐시로만 쓴다면 영속성을 아예 끄기도 한다.

키마다 만료 시간을 줄 수 있다는 점도 캐시로 많이 쓰이는 이유다. EXPIRE로 만료를 설정하면 시간이 지난 키는 자동으로 삭제되고, Redis는 접근 시점에 만료를 확인하는 방식과 주기적으로 일부 키를 골라 지우는 방식을 함께 쓴다(EXPIRE).

1
2
3
SET session:42 "user-data"
EXPIRE session:42 1800
TTL session:42
  • http://redisgate.kr/redis/introduction/redis_intro.php
  • https://meetup.toast.com/posts/224
  • https://redis.io/docs/
  • https://redis.io/docs/about/
  • https://redis.io/docs/manual/
  • https://redis.io/docs/getting-started/
  • https://redis.io/commands/
  • https://brunch.co.kr/@skykamja24/575
  • https://wildeveloperetrain.tistory.com/m/21
  • https://devlog-wjdrbs96.tistory.com/m/374
  • https://aws.amazon.com/ko/elasticache/what-is-redis/
참고한 자료외부 출처 3

외부 출처

이 글은 저작권자의 CC BY 4.0 라이선스를 따릅니다.

댓글

아직 댓글이 없습니다