[Redis] 레디스의 주요 명령어에 대해 간단히 알아보자
이번 글에서는 아래 내용에 대해 알아볼 것이다.
- 레디스의 유용한 명령어
- Key와 관련된 주요 명령어
- 레디스 value의 데이터 타입과 주요 명령어
유용한 명령어
redis-cli monitor
- 레디스로 요청되는 모든 명령어들을 출력해 준다.
- 로컬 개발 환경에서 개발 작업을 할 때 의도대로 동작하는지 확인할 때 유용하다.
slowlog get
- 명령 처리 과정에서 시간이 오래 걸린 결과들을 확인
- 기본적으로 처리 시간이 10ms 이상인 결과들을 기록
- format
- ID
- 실행시간
- 수행시간 (microsecond)
- 명령
- client ip/port
- client name
info
- 버전, 시스템 정보, 클라이언트 연결 개수, 메모리 정보 등 다양한 정보 확인
SELECT
- 물리적인 데이터베이스 설정 (기본적으로 0번 데이터베이스 사용)
Key와 관련된 주요 명령어
TTL (Time To Live)
- EXPIRE [KEY] [SECOND]
- 모든 key의 삭제 시간을 설정할 수 있다.
- TTL [KEY]
- 남은 시간을 확인할 수 있다.
DEL command (sync)
- DEL [KEY]
- 동기적으로 key 삭제
- 여기서 동기적이라는 것은 데이터를 모두 삭제한 뒤 응답이 오는 것을 의미한다.
- 동기적으로 key 삭제
UNLINK command (sync)
- UNLINK [KEY]
- DEL과 달리 비동기적으로 삭제가 진행된다.
비동기적인 삭제가 왜 필요할까?
- 레디스는 다양한 데이터 타입을 지원하고 동기적으로 삭제하기에는 오랜 시간이 소요되는 데이터도 존재할 것이다. 응답 지연을 줄이고 서비스 안정성을 올리는 측면에서 UNLINK 명령어를 사용한다.
MEMORY USAGE command
- MEMORY USAGE [KEY]
- 해당 key의 데이터 크기를 확인할 수 있다.
레디스 value의 데이터 타입
레디스 value의 데이터 타입은 아래와 같다.
- Strings
- Lists
- Sets
- Sorted sets
- Hashes
- Geospatial
- Bitmap
순차적으로 간단히 알아보자.
Strings
- 바이너리, 문자 데이터 저장
- max 512MB
- 증가 감소에 대한 원자적 연산
- increment/decrement
백엔드에서는 주로 json 형식의 텍스트 데이터를 저장한다.
애플리케이션에서 객체를 직렬화한 데이터도 저장한다.
command
- SET
- SETNX (if not exist)
- 값이 없는 경우에만 저장
- SET으로 대체 가능
- GET
- MGET (multiple get)
- INCR
- DECR
MGET 명령어를 이용하면 여러 value들이 필요한 상황에서 데이터를 한 번에 불러올 수 있다. GET 명령어보다 성능의 이점이 있음으로 잘 알아두자
SET 명령어가 있는데 INCR, DECR 명령어는 왜 존재할까?
애플리케이션에서 동시에 key는 counter value는 0인 값을 증가시키려 한다고 해보자. GET 명령어를 실행했을 때 모두 0으로 조회하고 1을 증가시켜 SET 1 명령어를 각각 실행하게 되면 의도와 다르게 결괏값이 1이 될 것이다.
Lists
String에 대한 Linked List 자료 구조이다.
주로 스택이나 큐를 구현할 때 사용된다.
command
- LPUSH
- RPUSH
- LPOP
- RPOP
- LLEN
- 리스트의 길이 확인
- LRANGE
- 인덱스를 통한 조회
- ex. lrange players 0 1
-1을 이용하면 전체 리스트 조회 가능
레디스를 통한 큐 활용
LPOP, RPUSH 사용
레디스를 통한 스택 활용
RPOP, RPUSH 사용
Sets
Unordered Collection (unique strings)
ex)
- SNS follow
- Blacklist
- Tags
command
- SADD
- Set add
- SREM
- Set remove
- SISMEMBER
- 특정 값이 Set에 포함되어 있는지 확인
- SMEMBERS
- Set의 전체 데이터 조회
- SINTER
- 2개 이상의 Set에서 공통된 데이터 조회
- SCARD
- Cardinality
- Set에 포함된 데이터 개수 조회
Sorted Sets
유니크한 값을 보장하면서 특정 점수 기반으로 정렬
ex)
- 점수 기반의 순위를 제공하는 리더보드
- 특정 시간 동안 요청이 일정 값 이상이면 요청을 차단해 주는 Rate limit
command
- ZADD
- ZREM
- ZRANGE
- 집합의 요소 조회
- 6.2 버전부터 REV, BYSCORE, BYLEX and LIMIT option 제공
- ZCARD
- ZRANK / ZREVRANK
- 요청한 값의 순위 조회
- ZINCRBY
Hashes
field-value pair collections (Java HashMap)
command
- HSET
- HGET, HMGET
- HGETALL
- HDEL
- HINCRBY
Geospatial
위도, 경도 정보를 저장할 수 있는 데이터 타입
command
- GEOADD
- GEOSEARCH (6.2)
- GEODIST
- GEOPOS
BitMap
0 또는 1의 값으로 이루어진 비트열
메모리를 적게 사용하여 대량의 데이터 저장에 유용함
command
- SETBIT
- GETBIT
- BITCOUN