Redis 데이터 구조(Structure) 조회 및 저장

Redis의 데이터 구조에 대해서 알아본다. String, List, Set, Sorted Set, Hash 등

데이터 구조(Collection)

Redis는 다양한 데이터 구조(Structure)를 제공한다.

Redis 에서 데이터 표현 기본 타입은 하나의 Key와 하나 이상의 Field/Element 값으로 구성한다.

  • Key
    • ASCII value 저장한다.
  • Value (Field/Element)
    • 기본적으로 String 데이터 저장한다.
    • Container 타입의 데이터 저장한다.
  • Container 타입
    • Hash, List, Set, Sorted Set 등 포함한다.

Strings

Redis 데이터 타입 Strings

String은 Redis value의 가장 기본적인 데이터 타입이다. value에 문자 숫자 등을 저장한다. 저장시 별도로 숫자 문자 구분이 없다.
Redis String은 binary safe 하다. 이는 Redis string이 JPEG image 또는 serialized Ruby object 같은 모든 종류의 data를 포함할 수 있다는 것을 의미한다.

String value는 최대 512 MB의 길이를 가질 수 있다.

Strings Redis 명령어

키-값 구조로 데이터를 저장하고 조회해보도록 하겠다.

명령어 문법 설명
set set key key-value를 저장한다.
get get key key에 해당하는 value를 조회한다.
del del key key를 삭제한다.
127.0.0.1:6379> set devkuma 1000
OK
127.0.0.1:6379> get devkuma
"1000"
127.0.0.1:6379> del devkuma
(integer) 1
127.0.0.1:6379> get devkuma
(nil)
127.0.0.1:6379>

Lists

Redis 데이터 타입 Lists

List는 단순히 삽입 순서로 정렬된 String list이다. String 형이 배열 구조가 되거라 생각하면 된다.
새로운 요소를 list의 앞 또는 뒤에 추가할 수 있다. 최대 약 40억 요소까지 유지할 ​​수 있다고 한다.

명령어 문법 설명
lpush LPUSH key element [element ...] left push이며 왼쪽부터, index는 0부터 데이터를 저장한다.
lpop LPOP key left pop이며, list의 index 0 부터 데이터를 추출한다.
rpush RPUSH key element [element ...] right push이며 오른쪽부터 즉, index last부터 데이터를 저장한다.
rpop RPOP key right pop이며, list의 index last 부터 데이터를 추출한다.
lrange LRANGE key start stop list의 데이터를 start부터 end까지의 데이터를 추출한다.
lrange에서 end를 -1로 선언하면 해당 list의 데이터를 전부 추출한다.

LPUSH 명령은 새로운 요소를 head 앞에 추가하고, RPUSH는 뒤에 추가한다. 만약, empty key에 수행되는 경우 new list가 생성되어 추가된다.

127.0.0.1:6379> lpush fruit apple
(integer) 1
127.0.0.1:6379> lpush fruit banana
(integer) 2
127.0.0.1:6379> lpush fruit orange
(integer) 3
127.0.0.1:6379> lrange fruit 0 2
1) "orange"
2) "banana"
3) "apple"
127.0.0.1:6379>

Sets

Redis 데이터 타입 Sets

Set은 정렬되지 않은 String collection이다. List 형으로부터 인덱스가 없어진 형이다. Value에 중복이 없다. Lists 보다 빠르게 처리할 수 있다.

무작위로 데이터를 추출할 수 있다는 의미에서는 기계 학습 등에 사용할 수 있을 거라고 생각된다.

명령어 문법 설명
sadd SADD key member [member...] set의 key에 member를 추가한다.
srem SRAM key member [member...] set의 key에 member를 삭제한다.
smembers SMEMBERS key set의 key의 모든 member를 조회한다.

sadd명령으로 key animal에 요소를 추가해 본다.

127.0.0.1:6379> sadd animal dog
(integer) 1
127.0.0.1:6379> smembers animal
1) "dog"
127.0.0.1:6379> sadd animal cat cow
(integer) 2
127.0.0.1:6379> smembers animal
1) "dog"
2) "cat"
3) "cow"

srem명령으로 key animal에 요소를 삭제해 본다.

127.0.0.1:6379> srem animal cat
(integer) 1
127.0.0.1:6379> smembers animal
1) "dog"
2) "cow"
127.0.0.1:6379>

전체를 지우려면 del명령을 사용한다.

127.0.0.1:6379> del animal
(integer) 1
127.0.0.1:6379> smembers animal
(empty array)
127.0.0.1:6379>

Sorted Sets

Redis 데이터 타입 Sorted Sets

Sorted set은 redis set과 유사한 반복되지 않는 String의 집합이다. Set형에 스코어라는 개념이 붙은 것이다. 여기도 Value에 중복이 없다. 스코어 순서로 정렬하거나 스코어에서 임계값 처리가 가능하다. 게임의 실시간 랭킹 표시 등에 사용할 수 있을 것 같다.

Hashes

Redis 데이터 타입 Hashes

Hashes의 경우 key 하나에 여러개의 field와 value 쌍으로 구성된다. Set에 문자열로 지정할 수 있는 field 라는 개념이 붙은 것이다.

모든 hash는 최대 2^32 - 1 개의 field-value 쌍(약 40억 개 이상)을 저장할 수 있다.

명령어 문법 설명
hset HSET key field [field value...] 하나 또는 여러 개의 값을 설정한다.
hget HGET key field 하나 또는 여러 개의 값을 받아온다.

Bitmaps and HyperLogLogs

redis는 또한 실제로 String base type을 기반으로 하지만 자체 의미를 갖는 data type인 Bitmap 및 HyperLogLogs를 지원한다.

참조




최종 수정 : 2024-01-18