HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
🍗
[New] 조규현팀
/
🏗️
Tech Store
/
Redis
Redis
Redis

Redis

담당자들
카테고리
Tool
주제
Cache
나의 블로그
완료율%
프로젝트
최종 프로젝트
상태
작성중
📝 Redis (Remote Dictionary Server)Redis 특징Redis 데이터 구조StringHashListSetSorted SetGeospatial IndexRedis 스키마Redis 키Redis 유의 사항Redis 키 삭제 방법Redis 시작하기저장, 조회, 삭제, 수정Refer화이트 보드Redis 고려사항Redis를 쓰는 이유Redis 특징Redis 단점🎳 SFAM 프로젝트 - Redis 적용기

📝 Redis (Remote Dictionary Server)

💡
“키-값" 구조의 비정형 데이터를 저장하고 관리하기 위한 오픈 소스기반의 비관계형 데이터베이스 관리 시스템(DBMS) -위키백과

Redis 특징

  • Single Thread
    • 한 번에 하나의 명령만 처리 가능
    • 중간에 처리 시간이 긴 명령어가 들어갈 경우 뒤의 명령어들이 대기
    • get, set 명령어의 경우 초당 10만개 이상 처리가 가능하다.
  • 인메모리 데이터 베이스
    • 모든 데이터를 메모리에 저장하고 조회
  • 디스크 저장
    • 현재 메모리 상태를 디스크에 스냅샷 형태로 남길 수 있다.
    • restart 할 때 스냅샷에 있는 내용으로 쉽게 복구 가능하다.

Redis 데이터 구조

notion image

String

  • 거의 대부분의 데이터를 String으로 표현
  • 숫자, 날짜, 시간 …

Hash

  • 필드를 가질 수 있다
  • 사용자 정보라는 해시가 있다면 이메일과 닉넴임을 가질 수 있다.
  • 전체를 가져오거나 개별 필드를 가져올 수 있다.

List

  • 연결 리스트로 배열의 왼쪽, 오른쪽에 엘리먼트를 추가할 수 있다.
  • 데이터는 문자열만 가능

Set

  • String의 집합으로 여러 개의 값을 하나의 value에 넣을 수 있다.
  • 포스트의 태깅에서 사용 가능

Sorted Set

  • 중복된 데이터를 담지 않는 Set 구조에 정렬을 적용
  • 랭킹 보드 서버 구현에 사용 가능
 

Geospatial Index

  • 지리 공간에 대한 고유한 데이터 유형
  • GEOADD [추가하려는 집합] [경도] [위도] [멤버 이름]
    • notion image
  • 두 지리 공간의 거리 차
    • notion image
  • 특정 지점에서 반경 내에 어떤 항목이 있는지
    • notion image
 
 

Redis 스키마

  • 데이터를 정규화하고, 데이터의 로우에 대해 일관된 레퍼런스를 가지게 해주는 용도
  • 사용자의 이메일, 닉네임, 최근 로그인 시간을 레디스에 저장하면
    • user:userId:email:문자열
    • user:userId:nickname:문자열
    • user:userId:lastLogin:문자열
    • 데이터를 : 로 구분하여 접근 가능하다.
  • 스키마를 활용하면 userId만 알아도 연결된 데이터인 email, nickname, lastLogin 을 알 수 있다.
 

Redis 키

  • 레디스의 검색은 O(1)의 수행시간을 가지고, 스키마의 양과 상관없이 동일한 시간이 사용된다.
 

Redis 유의 사항

  • 레디스는 한 번 생성한 키를 선택적으로 삭제하기 어렵다.
  • 특별한 조치를 하지 않으면 키는 삭제가 아닌 보관되며 서버 재실행 후에도 유지된다.

Redis 키 삭제 방법

  • 일괄 삭제
    • FLUSHDB 명령어를 통해 모든 키를 파괴
    • 복구가 불가능하며 개발 수준에서 사용
  • 일정 시간 이후 삭제
    • 키를 저장할 때 셋에 저장하여 특정 시간이나 조건에 따라 삭제하는 방법
    • 삭제라기 보다는 밀어내기라 이해할 수 있다.
    • 셋은 하나의 키에 대해 여러 번 등록해도 하나의 데이터만 남는 특징이 있다.
      • 교집합, 차집합, 합집합과 같은 기능을 제공한다.
    • 교차되는 키만 남거나 뺀 연산을 적용하여 키 삭제 가능
  • 기간 만료 후 삭제
    • 키-값을 SET 커맨드로 저장해 EXPIRE 커맨드로 기간 만료 시간을 정하는 방법
    • 레디스 2.0.0 이상에서는 SETEX 커맨드를 사용하는 방법 (SET + EXPIRE)
    • 키를 추적할 필요가 없고 관리에 용이하다.
    •  

Redis 시작하기

brew install redis ## redis 설치 brew services start redis ## redis 시작 brew services stop redis ## redis 중지 brew services restart redis ## redis 재시작 redis-cli ## CLI

저장, 조회, 삭제, 수정

set [key] [value] ## string 저장 get [key] ## 해당 key 의 값 조회 del [key] rename [key] [newkeyname] sadd [key] [value] [value] [vaule] ... ## set smembers [key] ## set 조회

Refer

레디스(Redis)는 언제 어떻게 사용하는 게 좋을까
레디스를 사용해 본 적 없는 백엔드, 데이터베이스 개발자를 위해 | 레디스는 시스템 메모리를 사용하는 키-값 데이터 스토어입니다. 인메모리 상태에서 데이터를 처리함으로써 흔히 사용하는 관계형 데이터베이스(RDS) 그리고 몽고 DB로 대표되는 문서형(Document) 데이터베이스보다도 빠르고 가볍게 동작합니다. 레디스를 사용할 때 개발자는 크게 2가지 방법을 사용합니다. 첫째는 로컬 환경에서 레디스를 호출합니다. AW
레디스(Redis)는 언제 어떻게 사용하는 게 좋을까
https://brunch.co.kr/@skykamja24/575
레디스(Redis)는 언제 어떻게 사용하는 게 좋을까
Geospatial | Redis
Geospatial Redis has several commands related to geospatial indexing (GEO commands) but unlike other commands these commands lack their own data type. These commands actually piggy back on the sorted set datatype. This is achieved by encoding the latitude and longitude into the score of the sorted set using the geohash algorithm.
Geospatial | Redis
https://redis.com/redis-best-practices/indexing-patterns/geospatial/
Geospatial | Redis
 
 

화이트 보드

[Redis] 요구 사항 파악, Redis 구조, 실제 활용 사례
대부분의 서비스에서는 Redis를 단순 캐시 용도로 사용한다. 하지만 Redis를 어떻게 배치하는지에 따라 시스템의 성능에 큰 영향을 미칠 수 있다. 캐싱 전략은 캐싱되는 데이터의 유형과 해당 데이터에 대한 액세스 패턴에 따라 달라진다. 서비스에서 Redis의 도입을 고민할 때, 캐시용으로 사용할 것인지, 저장소용으로 사용할 것인지를 분명히 해야한다.
[Redis] 요구 사항 파악, Redis 구조, 실제 활용 사례
https://ozofweird.tistory.com/entry/Redis-Redis-%EA%B5%AC%EC%A1%B0-%EC%8B%A4%EC%A0%9C-%ED%99%9C%EC%9A%A9-%EC%82%AC%EB%A1%80
[Redis] 요구 사항 파악, Redis 구조, 실제 활용 사례

Redis 고려사항

  • 캐시용으로 사용할 것인지, 저장소용으로 사용할 것인지 분명히 해야 한다.
    • Redis에 저장되었던 데이터가 없어져도 같은 데이터가 RDBMS에 남아있어 문제가 없거나, 혹은 일부 값이 유실되어도 괜찮은 경우인지 확인해야 한다.
      데이터운영팀에서는 특별한 경우가 아니면 Redis를 영구 저장소용으로 사용하는 것을 권장하지 않는다. Redis의 데이터를 파일로 보관하기 위한 Persistence 기능(RDB, AOF)으로 인한 장애발생 가능성 매우 큼!

Redis를 쓰는 이유

  • 많은 양의 데이터를 효율적으로 처리
  • 데이터의 분산처리, 빠른 쓰기 및 데이터의 안정성

Redis 특징

  1. Key-Value Store
    1. 레디스는 거대한 Map 데이터 저장소
      장점은 익히기 싶고 직관적이지만,
      단점은 Key-value 형태로 저장된 데이터를 레디스 자체내에서 처리하는 것이 어려움
  1. 다양한 데이터 타입
    1. 리스트 형 데이터의 입력과 삭제가 MySQL 보다 10배 정도 빠르다?
      등등 다양한 데이터 형식을 지원함
  1. Persistence
    1. Redis는 데이터를 Disk에 저장할 수 있음. → Redis가 셧다운된 후에도 재시작 해도 저장된 데이터를 다시 읽을 수 있어 유실되지 않음.
      • 저장 방식
        • snapshot : 메모리 내용을 *.rdb 파일로 저장하여 해당 시점의 데이터를 복구 가능
        • AOF : 레디스의 모든 write/update 연산 자체를 log로 기록 → 재시작 되면 log 기반으로 순차적으로 재실행, 데이터를 복구
      레디스 공식문서의 권장사항은 RDBMS의 rollback 시스템과 같이 두 방식을 혼용해서 사용하는 것 주기적으로 snapshot 백업 후 다음 snapshot까지 저장을 AOF 방식으로 수행
  1. ANSI C로 작성
    1. C언어로 작성되어 Java와 같이 가상머신 위에서 동작하는 언어에서 발생하는 성능 문제애 대해 자유로움 곧바로 기계어로 동작하지 않고 어떤 가상의 머신 위에서 인트프리터된 언어로 가동되는 경우에는 Gargage Collection 동작에 따른 성능 문제가 발생할 수 밖에 없다.
  1. 서버 측 복제 및 샤딩을 지원???? 뭔 개소리여

Redis 단점

  • 메모리 파편화가 발생하기 쉬움 메모리를 2배로 사용하고 싱글 스레드이다.
    • 긴 Transaction이 드어오면 그 Tx를 사용하기 위해 다른 Requestfmf 처리 못하는 현상이 발생… 대표적으로 Flushall 이나 Keys는 List 전체를 Scan하는 구조로, 100만개 처리시 1초, 1000만개 10초, 1억개는 100초가 소요…
      • → 이를 위해 데이터를 하나의 컬렉션이 아닌 여러개의 컬렉션에 나눠서 처리하는 것이 좋다. 각 컬렉션당 10,000 개의 데이터 저장 추천
  • copy-on-write 방식을 사용 : 스냅샷을 뜰 때 자식 프로세스를 하나 만들어 낸 후 변경된 메모리 페이지를 복사해서 사용
    • 보통 Redis를 사용할 때는 데이터 변경이 잦아 실제 메모리 크기만큼 자식 프로세스가 복사…. → 실제로 필요한 메모리보다 더 많은 메모리를 사용된다.
 
 
  • 주제만 봤을때 한번 슥 이해할 필요가 있을려나? 🤔
    • 레디스와 분산락
      대규모 서비스 개발에 대한 경험이 없다면, 여러 서버를 운영하는 분산환경에서 락 처리에 관한 고민을 할 필요를 느끼지 못한다. ( 물론 내가 부족한 개발 실력을 가지고 있어서도 그렇지만... ) 많은 트래픽을 받는 경우 당연히 수평적 확장이 용이해야 하고, 여러 대의 서버로 API가 분산 호출된다.
      레디스와 분산락
      https://happyer16.tistory.com/entry/%EB%A0%88%EB%94%94%EC%8A%A4%EC%99%80-%EB%B6%84%EC%82%B0%EB%9D%BD?category=823499
      레디스와 분산락
  • 좋은 정리글
    • Redis 기본 정리
      캐시를 알아야 하는 순간! | 캐시를 접하게 되는 순간 서비스를 처음 운영할 때는 WEB-WAS-DB의 전형적인 3티어 구조를 취하는 편이 보통입니다. 사용자가 몇 명 되지 않는 서비스의 경우에는 3티어 구조로도 충분히 서비스가 가능하지만, 사용자가 늘어나면 DB에 슬슬 무리가 가기 시작합니다.
      Redis 기본 정리
      https://brunch.co.kr/@jehovah/20
      Redis 기본 정리
       

🎳 SFAM 프로젝트 - Redis 적용기

JWT Refresh 토큰 - Redis 적용
작성 중…