LabHub

Redis 와 캐싱 · 자료구조별 쓰임 · 실습

Redis 자료구조 다루기

LabHub 에서 이어서 보기

목표

Redis 의 여섯 자료구조를 각각 목적에 맞게 사용하고, 운영에서 절대 쓰면 안 되는 명령과 그 대안을 몸으로 익힌다.

왜 중요한가

Redis 를 String 하나로만 쓰는 코드는 어디에나 있습니다. 전부 JSON 으로 직렬화해 넣고 꺼냅니다. 동작은 하지만, 한 필드만 바꾸려 해도 전체를 읽고 파싱하고 다시 써야 하고, 동시에 두 요청이 그렇게 하면 한쪽이 조용히 덮어씁니다. Hash 를 쓰면 필드 하나만 원자적으로 바뀝니다. 자료구조 선택 하나가 경쟁 조건을 없애는 것입니다. 그리고 이 실습에서 반드시 몸에 남겨야 할 것이 하나 더 있습니다 — Redis 는 명령을 단일 스레드로 처리하므로 O(N) 명령 하나가 전면 정지를 만듭니다. 키가 수백만 개인 인스턴스에서 KEYS * 한 번이 수 초 동안 모든 요청을 멈춥니다. 7번 스텝의 SCAN 은 그래서 있습니다.

단계

1. redis-cli PING 결과를 /root/rd/ping.txt 에 저장한다.
2. app:hits 를 3번 증가시킨다. 값이 3 이어야 한다.
3. user:42 해시에 name, email, plan 세 필드를 넣는다. HLEN user:42 가 3 이다.
4. feed:42 리스트에 활동 12건을 넣고 최근 10건만 남기게 자른다. LLEN feed:42 가 10 이다.
5. tag:redistag:cache 두 집합을 만들고 교집합을 /root/rd/inter.txt 에 저장한다. 교집합 원소가 2개여야 한다.
6. score:game1 정렬 집합에 멤버 5개를 점수와 함께 넣는다. ZCARD 가 5 이고 ZSCORE score:game1 p330 이다.
7. /root/rd/scan.shuser:* 패턴 키를 SCAN 으로 전부 찾아 /root/rd/scan.out 에 적는다. 스크립트에 KEYS 문자열이 들어 있으면 안 된다.
8. /root/rd/mem.md 에 마크다운 표를 만든다. 행 제목은 string, hash, list, set, zset 다섯 개이고 bytes 열에 MEMORY USAGE 결과를 적는다.

참고

단계 8개

  1. 연결 확인하기
  2. String 으로 카운터 만들기
  3. Hash 로 객체 저장하기
  4. List 로 최근 활동 유지하기
  5. Set 으로 태그 교집합 구하기
  6. ZSet 으로 점수 관리하기
  7. KEYS 대신 SCAN 으로 순회하기
  8. 자료구조별 메모리 비교표 만들기