본문 바로가기

개발 Tip

레디스(Redis) 주요 명령어에 대해서 알아보자

레디스(Redis) 명령어에 대해 알아보자

 

Redis 란?

  • Redis란 Remote Dictionary Server 의 약자로, 오픈 소스 인메모리(in-memory) 데이터 구조 저장소입니다.
  • 주로 빠른 데이터 처리가 요구되는 환경에서 많이 사용됩니다.
  • Redis는 데이터를 디스크가 아닌 메모리에 저장하기 때문에 매우 빠른 읽기 및 쓰기 성능을 제공합니다.
  • 또한, Redis는 다양한 데이터 구조를 지원하며, 단순한 키-값 저장소를 넘어 더 복잡한 데이터 관리에도 사용됩니다.

 

Redis 의 주요 특징

  1. 인메모리 데이터 저장
    • 모든 데이터를 메모리에 저장하여 매우 빠른 속도로 데이터에 접근할 수 있습니다.
    • 필요에 따라 데이터를 디스크에 영구 저장(persistence)할 수도 있습니다.
  2. 다양한 데이터 구조 지원
    • 단순한 키-값(key-value) 쌍 외에도, Redis 는 문자열(String), 해시(Hash), 리스트(List), 셋(Set), 정렬된 셋(Sorted Set), 비트맵(Bitmap), 하이퍼로그로그(HyperLogLog), 스트림(Stream) 등의 데이터 구조를 지원합니다.
  3. 비동기 복제
    • Redis는 마스터-슬레이브 복제를 지원하며, 데이터의 고가용성을 위해 여러 슬레이브로 복제할 수 있습니다.
    • 클러스터링을 통해 여러 노드에 데이터를 분산시켜 높은 가용성과 확장성을 제공합니다.
  4. Lua 스크립팅 지원
    • Redis는 Lua 스크립트를 지원하여 서버에서 복잡한 작업을 수행할 수 있습니다. 이로 인해 클라이언트-서버 간의 네트워크 통신 횟수를 줄일 수 있습니다.
  5. 트랜잭션 지원
    • Redis는 MULTI, EXEC, DISCARD, WATCH 명령어를 통해 트랜잭션을 지원합니다.
  6. 높은 성능
    • 메모리 기반 저장소로, 수백만 건의 요청을 초당 처리할 수 있습니다.

 

Redis 의 주요 사용 사례

  1. 캐싱(Caching)
    • 가장 일반적인 Redis 사용 사례입니다. 자주 사용되는 데이터를 Redis에 저장하여 데이터베이스나 API의 부하를 줄이고 응답 시간을 단축합니다.
    • 예: 사용자 세션, 페이지 데이터, 검색 결과 등의 캐싱
  2. 실시간 분석 및 통계
    • 빠른 읽기/쓰기를 요구하는 실시간 데이터 분석에서 Redis는 매우 유용합니다.
    • 예: 실시간 로그 분석, 사용자 행동 분석, 실시간 데이터 대시보드
  3. 세션 관리
    • 사용자 세션 데이터를 Redis에 저장하여 웹 애플리케이션의 상태를 유지하고, 세션 데이터를 분산된 환경에서 공유할 수 있습니다.
    • 예: 로그인 상태, 사용자 설정
  4. 메시지 브로커
    • Redis는 PUB/SUB (발행/구독) 메커니즘을 통해 메시지 브로커로 사용할 수 있습니다.
    • 예: 채팅 애플리케이션, 알림 시스템
  5. 순위/리더보드 시스템
    • Redis의 정렬된 집합(집합 데이터 구조)를 사용하여 순위 시스템이나 리더보드를 구현할 수 있습니다.
    • 예: 게임 리더보드, 인기 콘텐츠 목록
  6. 분산 잠금
    • 여러 인스턴스에서 동시에 접근할 수 있는 리소스를 안전하게 관리하기 위해 분산 잠금을 구현할 수 있습니다.
    • 예: 여러 서버에서 동시에 처리할 수 없는 작업의 관리
  7. 큐/작업 스케줄링
    • Redis의 리스트와 세트를 활용해 작업 큐를 구현할 수 있으며, 우선순위가 있는 작업이나 예약 작업도 처리할 수 있습니다.
    • 예: 이메일 전송 작업 큐, 백그라운드 데이터 처리

 

Redis 명령어

1. 기본 명령어

  • redis-cli 접속
root@7df3022bfaa7:/data# redis-cli
127.0.0.1:6379>

 

  • PING : Redis 서버가 실행 중인지 확인합니다
127.0.0.1:6379> PING
PONG

 

  • SET : 키에 값을 설정합니다. (예 : SET key value)
127.0.0.1:6379> SET mykey "hello world!"
OK

 

  • GET : 키의 값을 가져옵니다. (예 : GET key)
127.0.0.1:6379> GET mykey
"hello world!"

 

  • DEL : 하나 이상의 키를 삭제합니다. (예 : DEL key1 key2)
127.0.0.1:6379> DEL mykey
(integer) 1

 

  • EXISTS : 키가 존재하는지 확인합니다. (예 : EXISTS key)
127.0.0.1:6379> EXISTS mykey
(integer) 0

# 0 (존재하지 않음) 또는 1 (존재함)

 

2. 문자열 (String) 명령어

  • INCR : 키의 값을 1씩 증가시킵니다. 값이 숫자일 경우에만 사용합니다. (예 : INCR counter)
127.0.0.1:6379> SET count 1
OK
127.0.0.1:6379> INCR count
(integer) 2
  • DECR : 키의 값을 1씩 감소시킵니다. (예 : DECR counter)
127.0.0.1:6379> DECR count
(integer) 1

 

  • APPEND : 키에 문자열을 추가합니다. (예 : APPEND mykey " World!")
127.0.0.1:6379> SET mykey "Hello"
OK
127.0.0.1:6379> APPEND mykey " World!"
(integer) 12
127.0.0.1:6379> GET mykey
"Hello World!"

 

3. 해시 (Hash) 명령어

  • HSET : 해시 필드에 값을 설정합니다. (예 : HSET myhash field1 "Hello")
127.0.0.1:6379> HSET myhash field1 "Hello"
(integer) 1

 

  • HGET : 해시 필드의 값을 가져옵니다. (예 : HGET myhash field1)
127.0.0.1:6379> HGET myhash field1
"Hello"

 

  • HGETALL : 해시의 모든 필드와 값을 가져옵니다. (HGETALL myhash)
127.0.0.1:6379> HGETALL myhash
1) "field1"
2) "Hello"

 

4. 리스트 (List) 명령어

  • LPUSH : 리스트의 왼쪽에 요소를 추가합니다. (예 : LPUSH mylist "Hello" "World"
127.0.0.1:6379> LPUSH mylist "hello" "world"
(integer) 2

 

  • RPUSH : 리스트의 오른쪽에 요소를 추가합니다. (예 : RPUSH mylist "Bye")
127.0.0.1:6379> RPUSH mylist "BYE"
(integer) 3

 

  • LPOP : 리스트의 왼쪽에서 요소를 제거하고 반환합니다. (예 : LPOP mylist)
127.0.0.1:6379> LPOP mylist
"world"

 

  • LRANGE : 리스트의 특정 범위의 요소를 가져옵니다. (LRANGE mylist start stop)
127.0.0.1:6379> LRANGE mylist 0 -1
1) "hello"
2) "BYE"

 

5. 집합 (SET) 명령어

  • SADD : 집합에 하나 이상의 요소를 추가합니다. (예 : SADD key member1 member2)
127.0.0.1:6379> SADD myset "Hello" "World"
(integer) 2

 

  • SMEMBERS : 집합의 모든 요소를 가져옵니다. (예 : SMEMBERS key)
127.0.0.1:6379> SMEMBERS myset
1) "Hello"
2) "World"

 

  • SREM : 집합에서 하나 이상의 요소를 제거합니다. (SREM key member1 member2)
127.0.0.1:6379> SREM myset "Hello"
(integer) 1

 

6. 정렬된 집합 (Sorted Set) 명령어

  • ZADD : 정렬된 집합에 요소를 추가하고 점수를 산정합니다.
127.0.0.1:6379> ZADD myzset 1 "Hello" 2 "World"
(integer) 2

 

  • ZRANGE : 정렬된 집합의 특정 범위 내의 요소를 가져옵니다. (예 : ZRANGE key start stop [WITHSCORES]
127.0.0.1:6379> ZRANGE myzset 1 -1 WITHSCORES
1) "World"
2) "2"

 

7. 키 관리 명령어

  • KEYS : 패턴에 일치하는 모든 키를 나열합니다. (예 : KEYS pattern)
127.0.0.1:6379> KEYS *
1) "mykey"
2) "count"
3) "mylist"
4) "myhash"

 

  • EXPIRE : 키의 만료시간을 설정합니다. (예 : EXPIRE key seconds)
127.0.0.1:6379> EXPIRE mykey 180
(integer) 1

 

  • TTL : 키의 만료시간을 확인합니다. (예 : TTL key) 
127.0.0.1:6379> TTL mykey
(integer) 135

 

8. 서버 관리 명령어

  • INFO : Redis 서버의 정보와 통계를 확인합니다.
127.0.0.1:6379> INFO
# Server
redis_version:7.4.0
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:d18a0d3fa69567b8
redis_mode:standalone
os:Linux 6.6.12-linuxkit aarch64
arch_bits:64
...

 

  • FLUSHALL : 모든 데이터베이스의 키를 삭제합니다.
  • SHUTDOWN : Redis 서버를 종료합니다.

위의 명령어들은 Redis 를 효과적으로 관리하고 사용하는 데 유용합니다.