[내일배움캠프] 260507 TIL #15 Redis

2026. 5. 7. 16:42·내일배움캠프/TIL

Today I Learned!

[인메모리 저장소 및 캐싱 전략] 강의 수강을 시작했다. 그중 첫 번째 챕터인 Redis에 대해 학습했다.

 

Redis란?

Redis는 일반적인 관계형 데이터베이스와는 달리 In-Memory 데이터베이스이다.

대표적인 NoSQL 중 하나로, 그중에서도 Key-Value Store로 작동하는 데이터베이스이다.

지연이 적은 읽기/쓰기 성능을 가졌기 때문에 일시적인 데이터, 변경이 잦은 데이터를 다뤄야 하는 상황에서 많이 사용된다.

 

 

실습

강의에서 진행한 프로젝트 실습은 아래 깃허브를 통해 자세히 확인할 수 있다.

 

GitHub - seola12e/nbc-redis: 내일배움캠프 [인메모리 저장소 및 캐싱 전략] 강의 Redis 실습

내일배움캠프 [인메모리 저장소 및 캐싱 전략] 강의 Redis 실습. Contribute to seola12e/nbc-redis development by creating an account on GitHub.

github.com

 

그동안 Redis를 사용해본 적이 없어서 로컬에 설치부터 진행했다.

처음이라 Redis의 문법을 사용하는 데에도 어색함이 있었다.

 

Redis는 위에서 설명했듯이 Key-Value 데이터베이스이다.

그렇기 때문에 대부분의 명령이 Key를 바탕으로 동작하게 되며, Value로 사용하고자 하는 자료형에 따라 다른 명령어를 사용하게 된다.

아래와 같이 여러 명령어를 실습해보았다.

 

String

가장 기본적인 자료형으로, Redis가 Java의 Map<String, String> 처럼 동작한다고 생각하면서 접근하면 된다.

 

1. GET / SET

SET user:email alex@example.com
GET user:email
  • SET <key> <value> : key에 value 문자열 데이터를 저장, "으로 공백 구분
  • GET <key> : key에 저장된 문자열 반환

 

2. INCR, DECR

SET user:count 1
GET user:count
INCR user:count
DECR user:count
  • INCR key : key에 저장된 데이터를 1 증가
  • DECR key : key에 저장된 데이터를 1 감소

 

3. MSET, MGET

MSET user:name brad user:email brad@example.com
MGET user:name user:email
  • MSET key value [key value …] : key value의 형태로 주어진 인자들을 각 key에 value를 저장
  • MGET key [key] : 주어진 모든 key에 해당하는 데이터를 반환

 

List

여러 문자열 데이터를 Linked List의 형태로 보관하는 자료형이다.

Linked List이기 때문에 중간의 데이터 보다는 양끝의 데이터, 즉 스택 또는 큐처럼 사용할 수 있다.

 

1. LPUSH, RPUSH, LPOP, RPOP

LPUSH user:list alex
LPUSH user:list brad
RPUSH user:list chad
RPUSH user:list dave

LPOP user:list
RPOP user:list
  • LPUSH/RPUSH key value : key에 저장된 리스트의 앞/뒤쪽에 value를 저장
  • LPOP/RPOP key : key에 저장된 리스트의 앞/뒤쪽에서 값을 반환 및 제거

 

2. LLEN, LRANGE

LLEN user:list

-- 크기보다 더 큰 숫자
LRANGE user:list 0 3
LRANGE user:list 0 100000

-- 음수 index
LRANGE user:list 0 -1
LRANGE user:list 0 -2

-- end < start
LRANGE user:list 1 0

-- Worker Queue: 여러 Worker App에게 일을 분배하기 위해
-- Timeline: X(구 트위터)의 타임라인에 사용됐었음
  • LLEN key : key에 저장된 리스트의 길이를 반환
  • LRANGE key start end : key의 start부터 end까지 원소들을 반환

 

Set

문자열의 집합이다. 집합인 만큼 중복값을 제거하며, 순서가 존재하지 않는다.

 

1. SADD, SREM, SMEMBERS, SISMEMBER, SCARD

SADD user:java alex
SADD user:java brad
SADD user:java chad

SREM user:java alex

SISMEMBER user:java brad
SISMEMBER user:java dave

SMEMBERS user:java
SCARD user:java
  • SADD key value : key에 저장된 집합에 value를 추가
  • SREM key value : key에 저장된 집합의 value를 제거
  • SISMEMBER key value : key에 저장된 집합에 value가 존재하는지 반환
  • SMEMBERS key : key에 저장된 집합의 모든 원소를 반환
  • SCARD key : key에 저장된 집합의 크기를 반환

 

2. SINTER, SUNION, SINTERCARD

-- Set에 user 추가
SADD user:python alex
SADD user:python dave

-- 교집합 합집합
SINTER user:java user:python
SUNION user:java user:python
SINTERCARD 2 user:java user:python
-- 중복을 허용하지 않는 방문자 수 세기
-- URL을 키로 만들고 사용자 ID를 넣어줌
-- 인증 토큰 블랙리스트
-- SISMEMBER 시간복잡도: O(1)
  • SINTER key1 key2 : key1과 key2에 저장된 집합들의 교집합의 원소들을 반환
  • SUNION key1 key2 : key1과 key2에 저장된 집합들의 합집합의 원소들을 반환
  • SINTERCARD number key1 [key2 ...] : number개의 key에 저장된 집합들의 교집합의 크기를 반환

 

Hash

Field-Value 쌍으로 이뤄진 자료형이다. Hash 데이터를 가져오기 위해 Key를 사용하고, 이후 다시 Key에 저장된 Hash 데이터에 Field-Value 쌍을 넣어주는 형식으로 동작하게 된다.

 

1. HSET, HGET, HMGET, HGETALL

HSET user:alex name alex age 25
HSET user:alex major CSE

HGET user:alex name
HGET user:alex age

HMGET user:alex age major
HGETALL user:alex

-- 장바구니, 세션정보
HSET cart:alex computer 1 mouse 2 keyboard 10
  • HSET key field value [field value] : key의 Hash에 field에 value를 넣는다. 한번에 여러 field-value 쌍을 넣어줄 수 있음
  • HGET key field : key에 저장된 Hash의 field에 저장된 value를 반환(없는 field의 경우 null)
  • HMGET key field [field] : key에 저장된 Hash에서 복수의 field에 저장된 value를 반환
  • HGETALL key : key에 저장된 Hash에 저장된 field-value를 전부 반환

 

2. HKEYS, HLEN

HKEYS user:alex
HLEN user:alex
  • HKEYS key : key에 저장된 Hash에 저장된 field를 전부 반환
  • HLEN key : key에 저장된 Hash에 저장된 field의 개수를 반환

 

Sorted Set

이름처럼 정렬된 집합이다. 기본적으로 Set과 동일하게 유일한 값들만 유지하지만, 여기에 더해 각 값들에 score라고 하는 실수를 함께 보관한다.

데이터를 가져올 때, score를 바탕으로 정렬하여 값들을 가져올 수 있다.

 

ZADD, ZINCRBY, ZRANK, ZRANGE, ZREVRANK, ZREVRANGE

ZADD user:ranks 10 alex
ZADD user:ranks 9 brad 11 chad
ZADD user:ranks 8 dave
ZADD user:ranks 9.5 eric

ZINCRBY user:ranks 2 alex

ZRANK user:ranks alex
ZRANK user:ranks dave
ZRANK user:ranks eric

ZREVRANK user:ranks alex

ZRANGE user:ranks 0 3
ZREVRANGE user:ranks 0 2

ZADD user:ranks 15 alex
-- e.g. 순위표(리더보드), Rate Limiter -> 과도한 요청 거부
  • ZADD key score member [score member ...] : key의 Sorted Set에 score를 점수로 가진 member를 추가, 이미 있는 member의 경우 새로운 score를 설정
  • ZINCRBY key increment member : key의 Sorted Set의 member의 score를 increment 만큼 증가 (음수를 전달하면 감소)
  • ZRANK key member : key의 Sorted Set의 member의 순위를 오름차순 기준으로 0에서 부터 세서 반환
  • ZREVRANK key member : key의 Sorted Set의 member의 순위를 내림차순 기준으로 0에서 부터 세서 반환
  • ZRANGE key start stop : key의 Sorted Set의 member들을 start 부터 stop 순위까지 오름차순 기준으로 반환
  • ZREVRANGE key start stop : key의 Sorted Set의 member들을 start 부터 stop 순위까지 내림차순 기준으로 반환

 

그 외 공용 명령

-- DEL: key 삭제하기
SET somekey "to be deleted"

DEL somekey
DEL user:list
DEL user:python
DEL cart:alex


-- EXPIRE: 만료 시간 설정
SET expirekey "to be expired"
EXPIRE expirekey 50

-- EXPIRETIME: 만료될 시간을 UNIX Timestamp로 변환
EXPIRETIME expirekey


-- KEYS: Key 검색
KEYS *
KEYS user:*


-- FLUSHDB: 모든 Key 제거
flushdb

'내일배움캠프 > TIL' 카테고리의 다른 글

[내일배움캠프] 260520 TIL #17  (0) 2026.05.20
[내일배움캠프] 260512 TIL #16 RabbitMQ  (0) 2026.05.12
[내일배움캠프] 260506 TIL #14 Docker  (0) 2026.05.06
[내일배움캠프] 260504 TIL #13  (0) 2026.05.04
[내일배움캠프] 260430 TIL #12 입문프로젝트 마무리  (0) 2026.04.30
'내일배움캠프/TIL' 카테고리의 다른 글
  • [내일배움캠프] 260520 TIL #17
  • [내일배움캠프] 260512 TIL #16 RabbitMQ
  • [내일배움캠프] 260506 TIL #14 Docker
  • [내일배움캠프] 260504 TIL #13
이서라다
이서라다
  • 이서라다
    개발일지
    이서라다
  • 전체
    오늘
    어제
    • 전체 보기 (79)
      • 내일배움캠프 (21)
        • TIL (21)
      • 프로그래머스 (23)
      • Algorithm (2)
      • BackEnd (0)
        • Spring (0)
      • Language (4)
        • JAVA (4)
      • Git (2)
      • 백준 - Java (25)
        • 입출력과 사칙연산 (6)
        • 반복문 (8)
        • 1차원 배열 (1)
        • 문자열 (7)
        • 2차원 배열 (1)
        • 조합론 (1)
        • 정렬 (1)
      • IDE (1)
        • IntelliJ (1)
      • 티스토리 (1)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

    til
    티스토리스킨
    jdk삭제
    내일배움캠프
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
이서라다
[내일배움캠프] 260507 TIL #15 Redis
상단으로

티스토리툴바