Redis Data Types
Redis ์๋ฃ๊ตฌ์กฐ
Redis์ ์๋ฃ๊ตฌ์กฐ๋ ์ฌ๋ฌ ๊ฐ์ง๊ฐ ์๋ค.

๊ธฐ๋ณธ ์๋ฃ๊ตฌ์กฐ์ ๊ทธ ํน์ฑ, ๊ทธ๋ฆฌ๊ณ ๊ฐ๋จํ ์์ ๋ฅผ ์์๋ณด์.
๊ฐ๋จํ ๋ช
๋ น์ด๋ ๊ฐ์ด ๋ค๋ฃจ๊ณ , stream
, pub/sub
, hyperlog
๋ฑ์ ๋ํด์๋ ์์๋ณด์.
Strings
String ํ์ ์ Redis์ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ type์ด๋ค.
์ผ๋ฐ์ ์ผ๋ก ์ฐ๋ฆฌ๊ฐ ์๊ณ ์๋ Key-value ํ์์ ๋ฐ๋ฅด๊ณ ์๋ค.
Key์ value ๋ชจ๋ binary safe ํ๊ธฐ ๋๋ฌธ์ ์ด๋ ํ ๋ฐ์ดํฐ์ ์ข ๋ฅ๋ key, value์ ๊ฐ์ด ๋ ์ ์๋ค.
127.0.0.1:6379> set somekey somevalue
OK
127.0.0.1:6379> get somekey
"somevalue"
๊ฐ์ ์ต๋ ๊ธธ์ด๋ 512MB์ด๋ค. (๊ฑฐ์ ์ ๊ฒฝ์ธ ํ์ ์์ ๋ฏ ํ๋ค)
INCR, DECR, INCRBY ๋ช ๋ น์ด๋ฅผ ํตํด Atomic counters(Thread safe counter)๋ฅผ ๊ตฌํํ ์ ์๋ค.
APPEND ๋ช ๋ น์ด๋ฅผ ํตํด APPEND๊ฐ ๊ฐ๋ฅํ๋ค.
GETRANGE, SETRANGE ๋ช ๋ น์ด๋ฅผ ํตํด ๊ฐ์ ๋๋ค ์ก์ธ์ค๊ฐ ๊ฐ๋ฅํ๋ค.
๊ฐ์ ์ด๋ ์์น๋ ์ธ๋ฑ์ค๋ฅผ ํตํด ์ ๊ทผํ ์ ์๋ค.
์์
Append
127.0.0.1:6379> append somekey value
(integer) 14
127.0.0.1:6379> get somekey
"somevaluevalue"
INCR, DECR, INCRBY
127.0.0.1:6379> set counter 1
OK
127.0.0.1:6379> get counter
"1"
127.0.0.1:6379> incr counter
(integer) 2
127.0.0.1:6379> get counter
"2"
127.0.0.1:6379> decr counter
(integer) 1
127.0.0.1:6379> get counter
"1"
127.0.0.1:6379> incrby counter 3
(integer) 4
Lists
Lists๋ Linked List์ ์ ์ฌํ ํํ๋ก ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๋ Redis์์ ์ ๊ณตํ๋ ์๋ฃ๊ตฌ์กฐ๋ค.
๋ฐ๋ผ์ ์ฒ์๊ณผ ๋ง์ง๋ง ๋ถ๋ถ์ element๋ฅผ ์ถ๊ฐ / ์ญ์ / ์กฐํํ๋ ๊ฒ์ O(1)
์ ์๋๋ฅผ ๊ฐ์ง์ง๋ง ์ค๊ฐ์ ํน์ index ๊ฐ์ ์กฐํํ ๋๋ O(N)
์ ์๋๋ฅผ ๊ฐ์ง๋ ๋จ์ ์ ๊ฐ์ง๊ณ ์๋ค.
์ค๊ฐ์ ์๋ index๊ฐ์ ๊ฐ์ ธ์์ผ ํ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค๋ฉด
Sorted Set
์ ์ฌ์ฉํ์
LPUSH, LTRIM, LPOP, RPOP, RTRIM, RPUSH, LRANGE ๋ฑ ๋ง์ ๋ช ๋ น์ด๊ฐ ์๋ค.
์์
127.0.0.1:6379> rpush mylist A
(integer) 1
127.0.0.1:6379> lpush mylist B
(integer) 2
127.0.0.1:6379> lrange mylist 0 -1
1) "B"
2) "A"
LRANGE์ 0๊ณผ -1์ ํ์ด์ฌ List์ ์ธ๋ฑ์ค์ ๋น๊ตํ๋ฉด ๊ธฐ์ตํ๊ธฐ ํธํ๋ค.
127.0.0.1:6379> rpush mylist C
(integer) 3
127.0.0.1:6379> lrange mylist 0 -1
1) "B"
2) "A"
3) "C"
127.0.0.1:6379> rpop mylist 1
1) "C"
127.0.0.1:6379> lrange mylist 0 -1
1) "B"
2) "A"
LTRIM๊ณผ ๊ฐ์ ๋ช ๋ น์ด๋ก Lists์ ํฌ๊ธฐ๋ฅผ ๊ณ ์ ํ ์ ์๋ค.
127.0.0.1:6379> lpush mylist D
(integer) 4
127.0.0.1:6379> lrange mylist 0 -1
1) "D"
2) "C"
3) "B"
4) "A"
127.0.0.1:6379> ltrim mylist 0 2
OK
127.0.0.1:6379> lrange mylist 0 -1
1) "D"
2) "C"
3) "B"
Sets
Redis sets๋ ์์๊ฐ ๋ณด์ฅ๋์ง ์๋ Strings์ ์งํฉ์ด๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ์ถ๊ฐ, ์ญ์ , element์ ์กด์ฌ ์ ๋ฌดํ์ธ ๋ฑ์ ๋ํด์ O(1)์ ์๋๋ฅผ ๋ณด์ฅํ๋ค.
๋ํ Set ์ด๊ธฐ ๋๋ฌธ์ ๋์ผํ value๋ ์ถ๊ฐํ๋ค๊ณ ํด์ 2๊ฐ๊ฐ ๊ณต์กดํ์ง ์๋๋ค.
์ค๋ณต์ ํ์ฉํ์ง ์๊ณ , ๋น ๋ฅธ ์๊ฐ ๋ณต์ก๋๋ฅผ ์ง๋๊ณ ์์ด์ ์ ์ฉํ๊ฒ ํ์ฉํ ์ ์๋ค.
๋ํ Sets๋ Sets๊ฐ์ ํฉ์งํฉ, ์ฐจ์งํฉ ๋ฑ์ ์ง์ํด์ค๋ค.
Set์ ๋ช ๋ น์ด๋ sadd, smembers ๋ฑ์ด ์๋ค.
127.0.0.1:6379> sadd myset 1 2 3
(integer) 3
127.0.0.1:6379> smembers myset
1) "1"
2) "2"
3) "3"
127.0.0.1:6379> spop myset 1
1) "1"
127.0.0.1:6379> srandmember myset 1
1) "3"
127.0.0.1:6379> smembers myset
1) "2"
2) "3"
Hashes
Redis์ Hashes๋ value๋ก ๋ ๋ค๋ฅธ key-value Map์ ๊ฐ์ง๋ ์๋ฃ๊ตฌ์กฐ์ด๋ค.
127.0.0.1:6379> hmset primrose name primrose birth 1996 superuser true
OK
127.0.0.1:6379> hget primrose name
"primrose"
127.0.0.1:6379> hget primrose birth
"1996"
127.0.0.1:6379> hgetall primrose
1) "name"
2) "primrose"
3) "birth"
4) "1996"
5) "superuser"
6) "true"
Sorted sets
Redis์ Sorted sets ์๋ฃ๊ตฌ์กฐ๋ Sets ์๋ฃ๊ตฌ์กฐ์ Score
๋ฅผ ์ถ๊ฐ๋ก ๊ธฐ๋กํ์ฌ Score
๊ฐ ๋ฎ์์์๋ถํฐ ๋์ ์์๋๋ก ์ ๋ ฌ๋๋ ์๋ฃ๊ตฌ์กฐ๋ค.
๋์ผํ ๊ฐ(Key)์ ์ค์ง ๋ชปํ๋ฉฐ Score(Value)๋ ๋์ผํ ์ ์๋ค.
127.0.0.1:6379> zadd hackers 1940 "Alan Kay"
(integer) 1
127.0.0.1:6379> zadd hackers 1957 "Sophie"
(integer) 1
127.0.0.1:6379> zadd hackers 1953 "Richard"
(integer) 1
127.0.0.1:6379> zadd hackers 1949 "Anita"
(integer) 1
127.0.0.1:6379> zadd hackers 1965 "Yuki"
(integer) 1
127.0.0.1:6379> zadd hackers 1914 "Hedy"
(integer) 1
127.0.0.1:6379> zadd hackers 1916 "Calude"
(integer) 1
127.0.0.1:6379> zadd hackers 1969 "Linus"
(integer) 1
127.0.0.1:6379> zadd hackers 1912 "Turing"
(integer) 1
127.0.0.1:6379> zrange hackers 0 -1
1) "Turing"
2) "Hedy"
3) "Calude"
4) "Alan Kay"
5) "Anita"
6) "Richard"
7) "Sophie"
8) "Yuki"
9) "Linus"
127.0.0.1:6379> zrange hackers 0 3
1) "Turing"
2) "Hedy"
3) "Calude"
4) "Alan Kay"
๋ค์๊ณผ ๊ฐ์ด ํน์ Member์ ์์๋ฅผ ๊ฐ์ ธ์ฌ ์๋ ์๋ค.
127.0.0.1:6379> zrank hackers Turing
(integer) 0
127.0.0.1:6379> zrank hackers Yuki
(integer) 7
Stream
Redis 5.0์ ์๋กญ๊ฒ ๋์ ๋ ๋ฐ์ดํฐ ์ ํ์ด๋ค.
์ด ๊ธ์ ์ฌ์ค์ Stream์ ์ํด ์ฐ๋ ๊ธ์ด๋ฏ๋ก ์กฐ๊ธ ์์ธํ๊ฒ ๋ค๋ฃฐ ์์ ์ด๋ค.
127.0.0.1:6379> xadd primrose * name "primrose"
"1676829361208-0"
์ผ๋จ XADD ๋ช ๋ น์ด๋ก ์คํธ๋ฆผ์ ํ๋ ์ถ๊ฐํ๋ค.
*
์ ์ด์ฉํ๋ฉด ์๋์ผ๋ก ID๋ฅผ ๋ถ์ฌํด์ฃผ๊ณ , ์ด ID๋ milliseconds - sequence
์ ํํ๋ก ๋์จ๋ค.
ํ์ฌ ์๊ฐ์ timestamp ์ซ์์ ๊ฐ์ ์๊ฐ๋ด์ ์ฌ๋ฌ๊ฐ์ ๋ฐ์ดํฐ๊ฐ ์ฌ ์ ์๊ธฐ ๋๋ฌธ์ numbering์ด ๋์ด์๋ค.
127.0.0.1:6379> xadd primrose * name "primrose"
"1676829361208-0"
127.0.0.1:6379> xadd primrose * name "primrose"
"1676829496497-0"
127.0.0.1:6379> xlen primrose
(integer) 2
์ด์ XREAD๋ฅผ ์ด์ฉํด์ ์ฝ์ด๋ณด์.
127.0.0.1:6379> xread block 5000 streams primrose $
$๋ ๋ค์ํ ๋ป์ด ์๋ค. jsonpath ๊ตฌ๋ฌธ์ ์ฌ์ฉํ๋ค๋ ๋ป์ผ๋ก๋ ์ฐ์ด๊ณ $123 ์ 123bytes๋ฅผ ์ฌ์ฉํ๋ค๋ ๋ป์ผ๋ก ์ฐ์ด๊ธฐ๋ ํ๊ณ ์ฌ๊ธฐ์๋ ์๋ก ์๊ธด streams data๋ง ๋ฐ๊ฒ ๋ค๋ ๋ป์ด๋ค.
127.0.0.1:6379> xread block 5000 streams primrose $
1) 1) "primrose"
2) 1) 1) "1676829720128-0"
2) 1) "id"
2) "100"
(1.49s)
127.0.0.1:6379> xread block 5000 streams primrose $
1) 1) "primrose"
2) 1) 1) "1676829731446-0"
2) 1) "id"
2) "200"
์์ ๊ฐ์ด ๋ค๋ฅธ ํฐ๋ฏธ๋์์ XADD ๋ฅผ ํตํด์ ๋ฐ์ดํฐ๊ฐ ์ถ๊ฐ๋๋ฉด XREADํ๋ ํฐ๋ฏธ๋์์ ์ ๋ณด๋ฅผ ๋ฐ์์ฌ ์๊ฐ ์๋ค.
๋ค์์ XGROUP์ด๋ค. ๋ ๋์ค ํค์ ํจ๊ป ๊ทธ๋ฃน์ ์์ฑํ ์ ์๋ค.
127.0.0.1:6379> xgroup create newstream mygroup $ MKSTREAM
OK
๋ค์ ์คํธ๋ฆผ์ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํด๋ณด์.
127.0.0.1:6379> xadd mystream * message apple
"1676830015352-0"
127.0.0.1:6379> xadd mystream * message banana
"1676830020324-0"
127.0.0.1:6379> xadd mystream * message orange
"1676830024374-0"
127.0.0.1:6379> xadd mystream * message strawberry
"1676830027779-0"
127.0.0.1:6379> xadd mystream * message apricot
"1676830032520-0"
๋ค์๊ณผ ๊ฐ์ด XRANGE ๋ช ๋ น์ด๋ฅผ ์ด์ฉํด์ ์คํธ๋ฆผ์ ๋ด๊ฒจ์๋ ์ ์ฒด ๋ด์ญ์ ์ถ๋ ฅํ ์ ์๋ค.
-
, +
๋ถ๋ถ์๋ Entry ID๋ฅผ ๋ฃ์ ์ ์๋๋ฐ, -
๋ +
๋ก ํ๋ฉด ๊ฐ์ฅ ์์ ์์ด๋๋ถํฐ ๊ฐ์ฅ ํฐ ์์ด๋๊น์ง ๋ณด์ฌ์ค๋ค.
127.0.0.1:6379> xrange newstream - +
(empty array)
์ด์ ๊ทธ๋ฅ READ๊ฐ ์๋๋ผ XGROUPREAD๋ฅผ ํด๋ณด์.
127.0.0.1:6379> xreadgroup group mygroup Alice count 1 streams newstream >
1) 1) "newstream"
2) 1) 1) "1676830550872-0"
2) 1) "message"
2) "apple"
<group-name> <consumer-name> ์์๋๋ก ๋ช ์ํด์ ์ฌ์ฉํ๋ค.
์ฌ๊ธฐ ์์ ์์ group-name์
mygroup
, consumer-name์Alice
๋ก ์ฌ์ฉํ๋ค.๋์
>
๋ ๋ค๋ฅธ ์๋น์์๊ฒ ์ ๋ฌ๋ ์ ์ด ์๋ ๋ฐ์ดํฐ๋ฅผ ๊บผ๋ด์ฌ ๋ ์ฌ์ฉํ๋ ํน์ ID
๋ง์ฝ ์คํธ๋ฆผ์ ๋ฐ๋ผ๋ณด๊ณ ๋๊ธฐํ๋ ค๋ฉด ์๋์ ๊ฐ์ด BLOCK <millisecondsTime> ์ ์ต์ ์ ์ฌ์ฉํ๋ฉด ๋๋ค.
127.0.0.1:6379> XREADGROUP GROUP mygroup Alice BLOCK 2000 COUNT 1 STREAMS newstream >
1) 1) "newstream"
2) 1) 1) "1676830563238-0"
2) 1) "message"
2) "strawberry"
์ถ์ถ๋ ๋ฐ์ดํฐ๋ ๋ค์๊ณผ ๊ฐ์ด ํ์ธํ ์ ์๋ค.
127.0.0.1:6379> xreadgroup group mygroup Alice streams newstream 0
1) 1) "newstream"
2) 1) 1) "1676830550872-0"
2) 1) "message"
2) "apple"
2) 1) "1676830558321-0"
2) 1) "message"
2) "orange"
3) 1) "1676830563238-0"
2) 1) "message"
2) "strawberry"

Last updated