초보자들을 위한 Redis 자료구조 & 활용 기초

2026. 2. 7. 03:53·온라인강의

안녕하세요. 최근 레디스로 간단한 프로젝트를 한 뒤에 평소에 공부하고자 했던 레디스를 제대로 공부하기 위해 인프런 강의를 들었습니다.

 

bradkim 강사님의 '개발자라면 알아야 할 redis 기본'이었습니다. 

 

레디스는 인메모리 구조로 빠르게 값을 key- value로 저장하는 데이터베이스고,  대규모 읽기 쓰기를 위한 캐싱 용도로 사용된다고 알려져 있는데 제대로 공부한 적은 없어서 이참에 공부를 하게되었습니다.

 

레디스는 사실 직접 코딩할 일이 거의 없기 때문에 강사님이 실무적으로 레디스를 이해하기 위한 기본적인 자료구조와 기능만을 이해하기 쉽게 잘 설명해주었습니다.

 

4. string자료구조

 

도커에 띄운 redis 들어가기
docker exec -it 1cce94473aee(컨테이너) redis-cli

 

key조회

keys *

 

key-value를 저장

set user:email:1 hong1@naver.com

 

key로 value를 찾기

get user:email:1

 

 

16개(0~15)의 데이터 DB를 가지고 있음

select 10 (10번 db로 이동)

 

없으면 입력하고 덮어 쓰기 하지 말

set user:email:2 hong4@naver.com nx

 

생존시간 TTL(생존시간) 같이 등록

set user:email:3 hong3@naver.com ex 10

 

특정 key삭제

del user:email:1

flushdb (모든 내용 제거)

 

redis 활용 : 사용자 인증정보 저장(ex-refresh 토큰)

set user:1:refresh_token alskdjlaks ex 10000

엑세스 토큰(at) , 리프레시 토큰(rt)

 

 

5. string활용(동시성이슈, 캐싱처리)

# redis활용 : 좋아요 기능 구현

인기있는 사람들의 동시에 많은 사람들이 좋아요를 누르기 시작하면 (select + update) 동시성 이슈가 발생할 수 있음

redis는 단일 스레드이기 때문에 동시성 이슈가 발생하지 않음

set likes:posting:1 0

incr likes:posting:1 #특정 key값의 vlaue를 1만큼 증가

decr likes:posting:1 #특정 key값의 vlaue를 1만큼 감소

get likes:posting:1

 

# redis활용2: 재고관리

set stocks:product:1 100

decr stocks:product:1  #특정 key값의 vlaue를 1만큼 감소

get stocks:product:1 

 

# redis활용3: 캐시 기능 구현

최초로 사용자가 조회를 하면 RDB를 통해 조회를 하고 레디스에 임시저장하고 사용자에게 알려줌

다른 사람들이 같은 것을 조회하면 RDB에 호출하지 않고 레디스 자료를 읽어서 빨라짐(JSON 형식으로 저장됨 -> 클래스 객체와 형식이 같아서 사용하기 쉬움)

set posting:1 "{\"title\": \"hello java\", \"contents\": \"hello java is ... \"}" ex 100

 

6.List 자료 구조

보통 리스트 자료구조에서 맨앞에 자료를 추가하면 모든 자료들의 index가 변경이 이뤄지면서 많은 비효율발생

그래서 이런겨우 양옆으로 deque(자료)구조로 양 옆으로 데이터를 넣고 뺄 수 있도록 함(양쪽 데이터 read write에 적합)

redis의 list는 사실 deque자료구조임

# lpush : 데이터를 왼쪽 끝에서 삽입

# rpush: 데이터를 오른쪽 끝에 삽입

# lpop: 데이터를 왼쪽에서 꺼내기

# rpop: 데이터를 오른쪽으로 꺼내기

lpush hongildongs hong1

lpush hongildongs hong2

rpush hongildongs hong3

 lrange  hongildongs 0 2

rpop hongildongs

lpop hongildongs

 

# list 조회

# -1은 리스트의 끝자리

lrange hongildongs 0 0 # 첫번째 값만 조회

lrange hongildongs -1 -1 #마지막 값만 조회

lrange hongildongs 0 -1 #처음부터 끝까지

lrange hongildongs -2 -1 #마지막 2번째부터 마지막자리까지

lrange hongildongs 0 1 #처음부터 2번째자리까

 

#데이터 개수 조회

llen hongildongs

expire  hongildons 20

ttl  hongildons 

 

# redis활용 : 최근 방문한 페이지, 최근 조회한 상품목록

최근 방문한 페이지2개: rpush를 통해 list구조에 추가하여 순차적으로 등록하고, lrange hongildongs -2 -1

 

rpush mypages www.naver.com  

rpush mypages www.google.com  

rpush mypages www.chatgpt.com    

rpush mypages www.daum.net    

rpush mypages www.naver.com  

마지막 3개 페이지만 보여줘

lrange mypages -3 -1

 

7.Set 자료 구조

set은 순서가 없고 중복이 없는 자료구조

# set에 값 추가

sadd memberlist member1

sadd memberlist member1

sadd memberlist member2

# set 조회

smembers memberlist

# set 요소의 개수 조회

scard memberlist

# set에서 맴버 제거

srem memberlist member2

#특정 요소가 set 안에 들어가 있는지 확인

sismember memberlist member1

 

# redis set 활용

1명이 좋아요를 계속눌러도 set에 의해 1개로 카운팅

sadd likes:posting:2 member1

sadd likes:posting:2 member2

sadd likes:posting:2 member1

#좋아요 개수

scard likes:posting:2

 

활용 : 매일 방문자수 계산, 좋아요 수 중복없이 집계

 

8.zset 자료 구조(정렬된 집합)  활용도 매우 높음

# 순서가 있는 set(sorted set) 보통 순서가 시간이 되는 경우가 많음

zadd zmemberlist 3 member1

zadd zmemberlist 4 member2

zadd zmemberlist 1 member3

zadd zmemberlist 2 member4

 

# 조회: 기본적으로 오름차순 정렬

zrange zmemberlist 0 -1

# 내림차순 정렬

zrevrange zmemberlist 0 -1

# zset 요소 삭제

zrem zmemberlist member4

 

#zrank: 특정 맴버가 몇번

zrank memberlist member1

 

# redis zset 활용: 최근 본 상품목록

# zset을 활용해서 최근시간순으로  score를 설정하여 정렬

zadd recent:products 151930 pineapple

zadd recent:products 151931 banana

zadd recent:products 151932 orange

zadd recent:products 151933 apple

# zset도 set임으로 같은 상품을 add할 경우 시간만 업데이트되고 중복이 제거

zadd recent:products 151935 pineapple

#최근 본 상품목록 3개 조회

zrevrange recent:products 0 2

 

zrevrange recent:products 0 2 withscores

 

활용

주식, 코인 등의 실시가 시세저장 또는 게임 등의 사용자의 점수나 순위를 관리

최근 살펴본 상품(리스트 중복제거)

 

9.hash자료구조

# value값이 map형태인 자료구조, value값이 {key: value, key: value ...} 형태로 구성

hset member:info:1 name hong email hong@naver.com age 30

#특정요소 조회

hget member:info:1 name 

 

#모든 요소값 조회

hgetall member:info:1

 

#특정 요소값만 수정

hset member:info:1 name kim

 

#특정 요소값의 값을 증가/감소 시킬경우

hincrby member:info:1 age 4 (4살 증가)

 

# redis hash 활용 예시: 빈번하게 변경되는 객체값 캐싱

특정 값을 찾아서 수정하기 유리함

json 형태의 문자열로 캐싱을 할 경우, 해당 문자값을 수정할 때에 문자열을 파싱하여 통째로 변경해야 함

json 형식의 문자열의 경우 데이터를 일일이 par

예를 들어서 여러가지 정보를 갖고 있는 상태에서 재고를 관리할 때 hash 가 유리함

 

10. Redis pub sub 기능

- redis를 활용하여 메시지를 발행하고 구독하는 서비스

 

특징

- Redis Pub/Sub 시스템에서 동일한 채널을 여러 구독자가 구도하면, 해당 채널로 발행된 메시지가 모든 구독자에게 발송

- 한번 발송된 메시지는 저장되지 않음

 

실습예시

(구독 서버2대) subscribe test_channel

(발행 서버) publish test_channel "hello, this is a test message"

 

pub/sub 기능은 멀티 서버 환경에서 채팅, 알림 등의 서비스를 구현할 때 많이 사용

기본적으로 채팅과 같은 서비스의 경우 특정 서버에 서비스가 의존적이기에 다수의 서버를 운용하면서 채팅서비스(또는 알림서비스)를 운영할 때에 pub/sub 구조 활용 가능

 

11. redis streams

데이터가 실시간으로  read, 데이터가 저장

pub/sub과 다르게 stream은 메시지가 저장되어 소비자가 나중에 소비자가 나중에라도 읽을 수 있음

Kafka와 자료구조가 유사(이런 경우라면 Kafka로 쓰는게 나음)

실습 예시)

(구독 서버2대) xread block 20000 streams test_stream $   // (메시지 확인) xrange test_stream - +

(발행 서버) xadd test_stream * message  " hello, this is a stream message"

 

XADD : Redis Stream에 데이터를 추가할 때 사용

- test_stream: 스트림 이름

- *: 메시지의 고유 ID를 Redis가 자동 생성

 

XREAD BLOCK 10000 STREAMS test_stream $

- BLOCK 10000: 최대 10초(10000ms) 동안 대기

- $: 현재 마지막 메시지 이후에 오는 새 메시지를 기다림

 

XRANGE test_stream - +

- XRANGE 명령어는 Redis Sream에서 메시지를 조회할 때 사용

- :시작 범위(처음부터)

+: 끝 범위(끝까지)

 

활용

- 이벤트 기반 시스템(비동기 프로그램)

- 채팅 및 알림 시스템

'온라인강의' 카테고리의 다른 글

랭체인 Agent, Tools, 구조화된 출력 정리  (0) 2026.02.09
랭체인 1.0 설치 및 랭체인 기본 지식  (0) 2026.02.08
[인프런 챌린지] 4주 완성 백엔드 설계 챌린지 섹션7 타임라인 서비스(4주차)  (0) 2026.02.05
[인프런 챌린지] 4주 완성 백엔드 설계 챌린지 섹션6 미디어 서비스(4주차)  (1) 2026.02.04
[인프런 챌린지] 4주 완성 백엔드 설계 챌린지 (3주차)  (0) 2026.02.02
'온라인강의' 카테고리의 다른 글
  • 랭체인 Agent, Tools, 구조화된 출력 정리
  • 랭체인 1.0 설치 및 랭체인 기본 지식
  • [인프런 챌린지] 4주 완성 백엔드 설계 챌린지 섹션7 타임라인 서비스(4주차)
  • [인프런 챌린지] 4주 완성 백엔드 설계 챌린지 섹션6 미디어 서비스(4주차)
AI강선생
AI강선생
AI강선생의 블로그 입니다.
  • AI강선생
    나의 배움과 성장의 궤적
    AI강선생
  • 전체
    오늘
    어제
    • 분류 전체보기 (59)
      • 온라인강의 (45)
      • 오프라인강의 (2)
      • 독서 (1)
      • 생각과다짐 (6)
      • 도메인 (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    에이전트
    rustfs
    랭체인
    FastAPI
    유리링
    티스토리
    docker
    클로드코드
    spring
    AI시대
    한빛미디어
    오레일리
    AI agent
    스프링부트
    이지스퍼블리싱
    java
    PostgreSQL
    Python
    Claude
    LangChain
    llmagent
    챌린지
    혼공바이브코딩
    길벗
    인프런
    Redis
    게임기획
    국회
    claude code
    cursor
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
AI강선생
초보자들을 위한 Redis 자료구조 & 활용 기초
상단으로

티스토리툴바