Redis

유기훈·2025년 3월 18일

Redis

레디스를 사용하는 이유

  • Redis(REmote DIctionary Server)는 키-값(Key-Value) 구조의 인메모리 데이터 저장소로, 빠른 데이터 접근 속도를 제공하는 NoSQL 데이터베이스이다. 주로 캐싱, 세션 저장, 메시지 큐, 실시간 분석 등의 용도로 사용된다.
  • 인메모리 데이터 저장소로 속도가 빠르다.
  • redis는 주기적으로 스냅샷을 disk에 저장한다.
  • 키-값(Key-Value)는 내부적으로 해시 테이블을 사용하여 매우 빠른 속도로 검색이 가능하다.
  • Single Thread 구조로서 동시성 이슈가 발생하지 않는다.

Redis 자료구조

String

# redis는 0~15번까지의 database로 구성된다.
select db번호

# 데이터베이스 내 모든 키 조회
keys *

# set을 통해 key:value 세팅
set user:email:1 gdhong@gmail.com

# nx 옵션: 이미 키가 존재하면 저장 X, 존재하지 않으면 저장 O
set user:email:2 khyou@gmail.com nx

# ex 옵션: ttl 시간 지정 (초단위)
set user:email:3 cskim@gmail.com ex 10

# get을 통해 key:value 읽기
get user:email:3 

String 활용

  • 좋아요 카운팅
  • 재고관리
  • 캐싱처리

레디스를 쓰는 이유는 빠른 처리 속도, 동시성 이슈 해결(싱글 스레드) 이 두 가지라고 보면 됨.
좋아요 카운팅, 재고관리는 동시성 이슈가 있는데 레디스로 이를 해결 할 수 있음.

set likes:posting:1 0
decr likes:posting:1
get likes:posting:1

캐싱 처리는 빠른 처리 속도를 필요로 하는 작업에서 쓰기 좋음.
예를 들어, 커뮤니티 사이트에 인기글은 조회가 자주 일어나니까 캐싱하면 좋음.
반면에 인기 없는 글은 캐싱이 불필요함.
그래서 보통 WAS에서 처리할 때 조회가 발생하면 DB에서 조회한 후에 REDIS에 저장함.
그 다음에 또 조회 요청이 오면, REDIS를 조회하고 REDIS에 있으면 REDIS에 있는 데이터를 사용하고 아니면 DB 조회한 다음 REDIS에 저장함.

캐싱 팁
캐싱을 사용할 때는 데이터를 JSON 형식으로 저장하는 게 좋음. JSON은 객체와 구조가 유사해서 JSON을 바로 객체로 변경할 수 있는 라이브러리가 많음(ex. Jackson) 그래서 JSON 형식의 문자열로 데이터를 저장해두고, REDIS에서 데이터를 읽어와서 바로 객체로 변환해서 사용하면 편리함.

List

# list 자료구조: deque

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

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

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

# rpop: 데이터를 오른쪽에서 꺼내기
rpop mylist

# list 조회
# -1은 리스트의 끝자리(마지막 index)를 의미. -2는 끝에서 두번째를 의미
lrange mylist 0 0 # 첫번째 값만 조회
lrange mylist -1 -1 # 마지막 값만 조회
lrange mylist 0 -1 # 처음부터 끝까지 조회

# 데이터 개수 조회
llen mylist

# ttl 적용. ttl 시간이 지나면 해당 key-value 삭제
expire mylist 20

# ttl 조회
ttl mylist

List 활용

  • 최근 방문한 페이지

방문한 페이지를 rpush로 저장하고, 최근 방문한 페이지 조회 시 lrange로 조회.

profile
개발 블로그

0개의 댓글