📜 contents

REDIS CLI 명령어 정리


접속 관련 명령어


포트오픈 확인하기

$ netstat -nlpt | grep 6379
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN      -

6480번 포트의 redis 서버 접속

$ ./redis-cli -p 6480
127.0.0.1:6480>

다른 서버에 있는 6480포트의 redis 서버 접속

$ ./redis-cli -h 192.168.124.xxx -p 6480
127.0.0.1:6480>

DB번호가 0인 redis 서버 접속

$ ./redis-cli -n 0 -p 6480
127.0.0.1:6480>

**비밀번호가 **test인 redis 서버 접속

$ ./redis-cli -a test -p 6480
127.0.0.1:6480>

※ -a auth의 약어

redis 서버가 cluster인 경우.

get을 해보면 해당 key가 있는 서버로 Redirected

$ ./redis-cli -p 6480 -c
127.0.0.1:6480> get a
-> Redirected to slot [15495] located at node3:6480
"b"

정보 확인하기


redis 서버 정보 확인

$ ./redis-cli -p 6480 info

info 정보에 대한 설명

# Server
# 레디스 서버에 대한 일번적인 정보

# Clients
# 클라이언트 정보
# 현재 접속해 있는 클라이언트 수
connected_clients:2
# 대기중인 클라이언트 수
blocked_clients:0


# Memory
used_memory:3287928
# 현재 사용중인 메모리
used_memory_human:3.14M
# OS에서 Redis가 실제 차지하는 메로리양
used_memory_rss_human:4.09M
# peak 시 사용한 메모리
used_memory_peak_human:3.14M

# MaxMemory 설정
maxmemory_human:0B
# MaxMemory 초과 시 데이터 처리 정책
maxmemory_policy:noeviction

# Persistence


# Stats
# 현재 redis 서버 상태
total_connections_received:8
# 현재 처리하고 있는 초 당 operation의 수
instantaneous_ops_per_sec:0
# 현재 input kbps
instantaneous_input_kbps:0.00
# 현재 output kbps
instantaneous_output_kbps:0.00

# Replication

# CPU

# Modules

# Cluster
cluster_enabled:0

# Keyspace

해당 redis 서버에 실시간으로 어떠한 작업이 있는지 모니터링 가능

$ redis-cli -p 6480 monitor
OK

데이터 CRUD 명령어


redis 서버 내 모든 key 조회

keys *

키, 값 저장

set {key} {value}

특정 키 값 조회

get {key}

특정 문자열을 포함하는 키 조회
keys *te*
결과 : 
1) "test1"
2) "test2"

여러 개의 key, value 를 한번에 저장

mset {key} {value} [{key} {value} ...]

여러 개의 key 에 해당하는 value 를 한번에 가져옴

mget {key} [{key} ...]

# 사용 예시
127.0.0.1:6379> MSET username assu userage 20 usercity seoul
OK

127.0.0.1:6379> MGET username usercity
1) "assu"
2) "seoul"

127.0.0.1:6379> GET usercity
"seoul"

특정 키 삭제

del {key}

# 동시에 여러 key 삭제하기
del {key} [{key} ...] 

만료시간 확인하기(단위: 초)

ttl {key}
  • 출력결과 -1 : 만료시간이 설정되어있지 않음

  • 출력결과 -2 : 만료

30초 만료시간 지정하기

set {key} {value} EX 30

30초 안에 해당 키에 업데이트가 발생하면 만료시간 30초로 초기화.
업데이트와 상관없이 설정한 만료시간이 지나면 폐기하는 방법
set {key} {value} KEEPTTL 30

생성되어있는 키에 만료시간 설정하기

EXPIRE tutorialspoint 60

출력결과가
(integer) 1
이면 만료시간 설정 완료

(integer) 0
이면 존재하지 않거나 제한 시간을 설정할 수 없는 경우

key 존재 여부 확인

exists {key}

랜덤으로 키 조회

randomkey

특정 key의 타입 조회

type {key}

redis 서버 내 key의 전체 갯수

dbsize

해당 레디스 서버 내 모든 데이터 삭제

flushall

현재 접속되어있는(선택된) db 내 모든 데이터 삭제

flushdb

기존 key값 재사용

set a b nx => key a에 값이 있는 경우 수정 X (기존 값이 없다면 값을 세팅)
set a b xx => key a에 값이 있는 경우 수정 O (기존 값이 없다면 변경 X)

특정 key값의 value 증가 및 감소

set a 10
incr a # 1증가
get a  # "11"

decr a # 1갑소
set a 10
incrby a 10 # 10증가
get a # "20"

decrbt a 10 # 10감소

#소수형태로 증감 처리 > INCRBYFLOAT (증가처리 감소처리 모두 동일한 명령어로 처리)
INCRBYFLOAT a 2.5 # 2.5 증가
INCRBYFLOAT a -2.5 # 2.5 감소

append

  • 현재 value 값 뒤에 value 를 추가

  • 만일 key 가 존재하지 않으면 신규로 생성

127.0.0.1:6480> APPEND username Hello  # key 가 없는 경우 생성
(integer) 4

127.0.0.1:6480> GET username
"assu"

127.0.0.1:6480> APPEND username World  # 기존에 존재하는 key 에 APPEND
(integer) 6

127.0.0.1:6480> GET username
"HelloWorld"

getrange, setrange

  • string 연산에서 substring, replace 와 동일한 연산
127.0.0.1:6379> SET hello world
OK

127.0.0.1:6379> GET hello
"world"

127.0.0.1:6379> GETRANGE hello 2 4
"rld"

127.0.0.1:6379> SETRANGE hello 2 ppp
(integer) 5

127.0.0.1:6379> GET hello
"woppp"

※ Redis 는 Single Thread 기반이기 때문에 keys, flushall, flushdb, getall 등의 명령어는 운영 환경에서 사용시 위험

기타 명령어


redis-cli로 COMMAND 실행

$ redis-cli -p 6379 keys "*"

레디스 서버의 중요 통계정보를 주기적보기

$ redis-cli -p 6379 --stat

여러 서버에 일괄 명령 실행하기

$ for i in {6001..6010}; do src/redis-cli -p $i dbsize; done

자료구조 다루기


➤ Hash

hset user:1 name An city seoul # 초기화

# "특정 hash & 특정 key"의 값 조회
hget user:1 name # "An" 
hget user:1 city # "seoul"

# "특정 hash & 특정 key"의 값 삭제
hdel user:1 name # name 삭제

# "특정 hash"의 모든 key-value 조회
hgetall user:1

# "특정 hash"의 모든 key만 조회
hkeys user:1 # key만 조회

# "특정 hash"의 모든 value만 조회
hvals user:1 # value만 조회

➤ List

  • Linked List 형태

  • 특정 값이나 인덱스로 데이터를 찾거나 삭제할 수 있음

  • 최대 길이 : 2^32 - 1(4,294,967,295)

  • 주로 Stack, Queue 자료구조를 구현하기 위한 용도로 사용

    • ex) 백그라운드 작업자 시스템을 위한 대기열 관리 구축
Stack

Stack

Queue

Queue


# 생성
lpush {queue name} {value 1}
혹은
lpush {queue name} {value 1} {value 2} {value 3} ...

# FIFO 추출
rpop {queue name}

# LIFO 추출
lpop {queue name}

🎯 rpush와 lpush 명령어가 있고, rpop과 lpop이 있다.
rpush를 통해 값을 생성하면 "큐" 배열 기준 오른쪽에서 값을 insert하는 식이기 때문에
오른쪽으로 갈 수록 가장 최근에 값이 들어온 형태.
예를들어, 
rpush test-queue A B C
라고한다면 A부터 순서대로 insert. 오른쪽에서 C가 가장 마지막에 insert
예상 큐 형태 : [A, B, C]

이 상태에서
lpop test-queue
"A"
lpop test-queue
"B"
lpop test-queue
"C"


🎯 pop 명령어로 큐에서 out되는게 아니라 특정 인덱스에 저장되어있는 값 조회하기
# 선언
127.0.0.1:6480> rpush queue-name 1 2 3 4 5
(integer) 5

127.0.0.1:6480> llen queue-name # 큐 크기 확인
(integer) 5

# 큐 요소 전체 확인
127.0.0.1:6480> lrange queue 0 -1 
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"

# 특정 인덱스에 저장되어있는 값 조회하기
127.0.0.1:6480> lrange queue 0 0
1) "1"

➤ Set

순서를 유지하지 않고 중복을 허용하지 않는 자료구조

# 생성
127.0.0.1:6480> sadd set-name1 1 1 2 2 3 3 1 1
(integer) 3

# set의 크기 확인
127.0.0.1:6480> scard set-name1
(integer) 3

# set의 모든 원소 조회
127.0.0.1:6480> smembers set-name1
1) "1"
2) "2"
3) "3"


#생성
127.0.0.1:6480> sadd set-name2 1 2 3

# 1이 set에 존재하는지 확인
127.0.0.1:6480> sismember set-name2 1 

# 1을 set-name2라는 set에서 삭제 (remove)
127.0.0.1:6480> srem set-name2 1

# set에서 랜덤하게 한 개 원소를 pop
127.0.0.1:6480> spop set-name2

➤ SortedSet

  • value마다 가중치를 부여하여 정렬되는 Set 타입

  • 랭킹 기능 구현시 고려해볼 수 있는 자료구조

# 기본 문법
zadd {SortedSet name} [가중치1] [key1] [가중치2] [key2] ...
# 생성
zadd test-name 30 a 10 b 15 c
(integer) 3

# 전체 출력 (default 오름차순)
zrange test-name 0 -1
1) "b"
2) "c"
3) "a"

# 전체 출력 (내림차순)
zrange test-name 0 -1 rev
1) "a"
2) "c"
3) "b"

# 가중치와 함께 내림차순 조회 (withscores)
zrange test-name 0 -1 rev withscores
1) "a"
2) "30"
3) "c"
4) "15"
5) "b"
6) "10"

# zrank > 가장 가중치가 낮은 요소의 순위가 0 (오름차순)
zrank test-name a
(integer) 2
zrank test-name b
(integer) 0
zrank test-name c
(integer) 1

# zrevrank> 가장 가중치가 높은 요소의 순위가 0 (내림차순)
zrank test-name a
(integer) 0
zrank test-name b
(integer) 2
zrank test-name c
(integer) 1

# 가중치가 가장 높은 요소 삭제
zpopmax {SortedSet name}

# 가중치가 가장 낮은 요소 삭제
zpopmin {SortedSet name}
✅

참고링크 :