본문 바로가기
DevLog/Redis

[Redis] Redis 정리 #2 - 자료구조와 명령어

by sunsetk 2025. 7. 20.

📖 이 글은 Redis 공식 문서(Data Types)를 기반으로 작성되었습니다.
💡 Java 기반 개발 관점에서 Redis 자료구조와 명령어를 정리합니다.

 


🔹 Redis에서 지원하는 주요 자료구조

자료구조설명 및 사용 예시

 

자료구조 설명 및 사용 예시
String 가장 기본적인 자료형 (숫자, 문자 모두 가능)
Hash 필드-값 구조 (자바의 Map과 유사)
List 연결 리스트 (메시지 큐, 채팅 로그 등)
Set 중복 없는 집합 (태그, 유저 ID 모음 등)
Sorted Set 점수를 기준으로 정렬된 Set (랭킹 시스템 등)
Stream Kafka-like 로그 스트림 (실시간 로그/메시지 큐)
 

🔸 1. String

✅ 대표 명령어: SET, GET, INCR, APPEND, EXPIRE

 

SET name "혜진"
GET name
INCR counter         # 숫자 증가
APPEND name "짱"     # 문자열 이어붙이기
EXPIRE name 60       # 60초 후 만료​
 
 

 

Java 예시 (RedisTemplate)

redisTemplate.opsForValue().set("name", "혜진");
String name = redisTemplate.opsForValue().get("name");

🔸 2. Hash

✅ 대표 명령어: HSET, HGET, HGETALL, HMSET

HSET user:1 name 혜진 age 28
HGET user:1 name
HGETALL user:1

 

Java 예시

redisTemplate.opsForHash().put("user:1", "name", "혜진");
redisTemplate.opsForHash().put("user:1", "age", "28");

Map<Object, Object> user = redisTemplate.opsForHash().entries("user:1");

🔸 3. List

✅ 대표 명령어: LPUSH, RPUSH, LPOP, LRANGE

LPUSH messages "hi"
RPUSH messages "hello"
LRANGE messages 0 -1     # 전체 리스트 조회
 

Java 예시

redisTemplate.opsForList().leftPush("messages", "hi");
redisTemplate.opsForList().rightPush("messages", "hello");

🔸 4. Set

✅ 대표 명령어: SADD, SMEMBERS, SISMEMBER, SREM

SADD tags "java"
SADD tags "redis"
SMEMBERS tags

 

Java 예시

redisTemplate.opsForSet().add("tags", "java", "redis");
Set<Object> tags = redisTemplate.opsForSet().members("tags");

🔸 5. Sorted Set (ZSet)

✅ 대표 명령어: ZADD, ZRANGE, ZRANK, ZREM

ZADD ranking 100 "혜진"
ZADD ranking 150 "성진"
ZRANGE ranking 0 -1 WITHSCORES
 
 

Java 예시

redisTemplate.opsForZSet().add("ranking", "혜진", 100);
Set<Object> rank = redisTemplate.opsForZSet().range("ranking", 0, -1);

🔸 6. Stream (실시간 로그 저장)

✅ 대표 명령어: XADD, XRANGE, XREAD, XGROUP

XADD mystream * message "안녕"
XRANGE mystream - +

 

Stream은 실시간 채팅/로그 등에 적합하고,
Java에서는 RedisStreamListener 혹은 Lettuce Client로 활용


🔹 Redis 키 설계와 TTL 전략

  • 키 네이밍 규칙 : 실무에서는 `user:1:name`, `chat:room:1234`, `token:refresh:userid` 같은 prefix 구조를 사용해 도메인 분리를 명확히 한다.
  • TTL(Time To Live) : 임시 데이터는 반드시 만료 시간을 설정해야 메모리 누수를 방지할 수 있다.
    • 명령어 예시: `EXPIRE key 3600`, `SET key value EX 60`
    • Java 예시:
      redisTemplate.opsForValue().set("authCode:01012345678", "9372", Duration.ofMinutes(3));
  • 활용 예시
    • 인증 코드 : `authCode:{phone}` → TTL 3분
    • 채팅 메시지 캐시: `chat:room:1234:recent` → TTL 15일
    • 자동 저장 코드: `autosave:{userId}:{path}` → TTL 24시간

📌 마무리

이번 글에서는 Redis의 주요 자료구조와 명령어를 Java 기반으로 정리했다.
다음에는 캐시 적용, pub/sub 구조, 실시간 처리 흐름을 다뤄볼 예정!