📜 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

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}
참고링크 :
**명령어로 패턴과 일치하는 키들을 찾는 방법 **https://codingdog.tistory.com/entry/redis-keys-명령어로-패턴과-일치하는-키들을-찾아봅시다
**Redis 공식문서 명령어 **https://redis.io/commands/