[Redis] Data type

이재민·2024년 4월 11일

Redis

목록 보기
2/6

Redis Data Type

Redis는 다양한 자료구조를 갖는 장점이 있다.
String, List, Set, Sorted Set, Hash, Geospatial, Bitmap 등 다양한 타입을 지원한다.

Strings

  • 대표 기본 타입으로 바이너리, 문자 데이터를 저장할 때 사용한다.
  • 값은 최대 512MB이며 String으로 될 수 있는 binary data, JPEG 이미지도 저장 가능하다.
  • 증가, 감소에 대한 원자적 연산에 좋다.

Strings command

아래 명령어는 대표적으로 자주 사용되는 명령어이다,

SET: SET, SETNX
GET: GET, MGET
INCR, INCR, DECR, INCRBY, DECRBY

명령어 실습

docker를 이용해서 redis를 사용

docker pull redis 6.2
docker run --rm -it -d -p 6379:6379 redis:6.2
docker ps
docker exec -it Container ID redis-cli

SET key value
GET key

MSET 여러개의 데이터를 한 번에 저장하는 명령어
MGET 여러개의 데이터를 한 번에 조회하는 명령어

  • 기존 SET, GET보다 효율적이다.

MSET key value key value ...
MGET key key key ...

SETNX: 지정한 Key가 없을 경우에만 저장을 한다.

사용법: SETNX key value
동일한 key를 저장하려고하면 위의 이미지 처럼 0을 반환한다.(저장 안됨)

  • INC, DEC 명령어를 통해 즉각적으로 증가된 값을 반환받을 수 있다.
  • INC, DEC 대신 숫자를 원자적으로 늘리고 줄이기 명령어를 위해서는 GET, SET을 사용하여 두 가지 단계를 거쳐야한다.

Lists

  • Linked List를 의미하고, Java에서는 ArrayList를 말한다.
  • 보통 Stack, Queue 구현에 사용된다.

Lists command

아래 명령어는 대표적으로 자주 사용되는 명령어이다,

SET(PUSH): LPUSH, RPUSH
POP: LPOP, RPOP
GET: LLEN, LRANGE
REM: LTRIM

Block command를 지원한다. 값이 채워질때까지 대기한다.(sync)
BLOCK: BLPOP, BRPOP

명령어 실습

  • stack 실습
  • queue 실습

Sets

  • 정렬되지 않은 Unique item이다.
  • 보통 SNS follow, Blacklist, Tags 구현에 사용된다.

Sets command

SET: SADD
GET: SCAD, SMEMBERS, SISMEMBER
REM: SREM
집합연산: SINTER

명령어 실습

SMEMBERS: 모든 key 정보를 조회
SISMEMBER: 특정 키에 멤버가 포함되어있는지 확인

SINTER: 두 개의 키에서 중복되는 값을 찾을 수 있다.

SREM: key와 멤버를 입력해서 제거할 수 있다.

Hashes

field-value를 쌍으로 저장할 수 있는 자료구조이다.

Hashs command

SET: HSET
GET: HGET, HMGET, HGETALL
REM: HDEL
INCR: HINCRBY

명령어 실습

HGETALL을 통해 전체 key를 순회하면서 조회한다.
HINCRBY 명령어로 특정 key의 field의 값을 증가시킬 수 있다.

Sorted Sets

  • Unique 하면서 정렬이 가능한 collection이다.
  • sorted set에서 데이터는 오름차순으로 내부 정렬
  • 주로 Leader board, Rate limit 기능을 구현할때 유용하다.

Sorted command

SET: ZADD
GET: ZRANGE, ZCARD, ZRANK, ZREVRANK
REM: ZREM
INCR: ZINCRBY

명령어 실습

+inf 으로 인덱스를 전체를 설정할 수 있다.
0 +inf: 처음부터 끝까지
+inf 0: 끝에서 처음까지
REV: 내림차순으로 조회

참고
http://redisgate.kr/redis/command/incr.php

profile
문제 해결과 개선 과제를 수행하며 성장을 추구하는 것을 좋아합니다.

0개의 댓글