
Redis์ ์๋ฃํ
Redis ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ํน์ง
์์ ๊ฒ์๋ฌผ์์ ์ค๋ช ํ๋ฏ์ด, Redis๋ ๋ฐ์ดํฐ๋ฅผ ํค (Key) - ๊ฐ (Value) ํํ๋ก ์ ์ฅํ๋ NoSQL ์ธ๋ฉ๋ชจ๋ฆฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ด๋ค.
ํนํ, ์คํ ์๋๊ฐ ๋น ๋ฅด๊ณ , ๋ค์ํ ์๋ฃํ์ผ๋ก ํํํ ์ ์๋ค๋ ์ค์ํ ํน์ง์ด ์์๋๋ฐ,
์ด ํน์ง์ ์ ํ์ฉํ๋ ค๋ฉด ์๋ฃํ์ ๊ผญ ์ดํดํด์ผ ํ๋ค.
ํต์ฌ๋ง ๋ณด๊ณ ์ถ์ผ์ ๋ถ๋ค์ ์ํด ๊ฐ๋จํ ์ ๋ฆฌ๋ฅผ ํ๊ณ ์์ํ์๋ฉด,
Redis์ ์๋ฃํ๊ณผ ๊ทธ ํน์ง ๋ฐ ์ฌ์ฉ ์ฌ๋ก๋ ์๋์ ํ์ ๊ฐ๋ค.
| ์๋ฃํ | ํน์ง | ์ฌ์ฉ ์ฌ๋ก |
| String | ๊ธฐ๋ณธ ๋ฐ์ดํฐ ํ์
ํ ์คํธ ๋ฐ ์ซ์ ์ ์ฅ |
์บ์, ์นด์ดํฐ, ์ธ์ ์ ๋ณด ๊ด๋ฆฌ |
| List | ์์๊ฐ ์๋ ๋ฐ์ดํฐ ๋ชฉ๋ก (์ค๋ณต ํ์ฉ) |
ํ์๋ผ์ธ |
| Set | ์ค๋ณต๊ณผ ์์๊ฐ ์๋ ์งํฉ | ํ๊ทธ ๊ด๋ฆฌ |
| Sorted Set (ZSet) |
์ ๋ ฌ๋ ์งํฉ | ๋ญํน ์์คํ |
| Hash | ํ๋ - ๊ฐ ์์ ๋ฐ์ดํฐ | ๊ฐ์ฒด ํํ |
| Bitmap | ๋นํธ ๋จ์ ๋ฐ์ดํฐ ์ ์ฅ | ์ถ์ ์ฒดํฌ, ์ํ ๊ด๋ฆฌ |
| HyperLogLog | ๊ทผ์ฌ์น ๊ธฐ๋ฐ ๋์ฉ๋ ๋ฐ์ดํฐ ๊ฐ์ ๊ณ์ฐ |
๋ฐฉ๋ฌธ์ ์ |
| Geo | ์๋, ๊ฒฝ๋ ๊ธฐ๋ฐ ์์น ์ ๋ณด ์ ์ฅ |
์์น ๊ธฐ๋ฐ ์๋น์ค, ์ง๋ ์๋น์ค |
| Stream | ์ค์๊ฐ ๋ฐ์ดํฐ ์คํธ๋ฆผ ์ ์ฅ ๋ฐ ์ฒ๋ฆฌ | ์ค์๊ฐ ๋ก๊ทธ |
์๋ฃํ ์ ํ ๊ธฐ์ค
Redis๋ ์ด์ฒ๋ผ ๋ค์ํ ์๋ฃํ์ ์ ๊ณตํ์ง๋ง, ๊ฐ ์๋ฃํ์ด ๋ชจ๋ ์ํฉ์์ ๋ง๋ฅ์ ์๋ ๊ฒ์ด๋ค.
๋ฐ๋ผ์ ์ํฉ์ ๋ฐ๋ผ ์ ํฉํ ์๋ฃํ์ ์ ํํด์ผ ์ฑ๋ฅ๊ณผ ํจ์จ์ฑ์ ๊ทน๋ํํ ์ ์๋ค.
ํฌ๊ฒ 4๊ฐ์ง๋ก ์๋ฃํ ์ ํ ์ ๊ณ ๋ คํ ์์๋ฅผ ๋ถ๋ฅํด ๋ณธ ๊ฒฐ๊ณผ๋ ์๋์ ํ์ ๊ฐ๋ค.
| ๊ธฐ์ค | ์๊ตฌ ์ฌํญ | ์๋ฃํ |
| ๋ฐ์ดํฐ์ ํน์ฑ | ๋จ์ํ ๊ฐ ์ ์ฅ | String |
| ์์๊ฐ ์ค์ํ ๋ชฉ๋ก | List | |
| ์ค๋ณต ์๋ ๋ฐ์ดํฐ | Set | |
| ์ ๋ ฌ์ด ํ์ํ ๋ฐ์ดํฐ | Sorted Set | |
| ๋ฐ์ดํฐ ํฌ๊ธฐ ๋ฐ ์ฒ๋ฆฌ ๋น๋ | ๋๊ท๋ชจ ๋ฐ์ดํฐ์ ์ง๊ณ | HyperLogLog |
| ๋นํธ ๋จ์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ | Bitmap | |
| ์ฝ๊ธฐ / ์ฐ๊ธฐ ํจํด | ์ฝ๊ธฐ ์ค์ฌ | String, Set |
| ์ฐ๊ธฐ ์ค์ฌ | Stream, List | |
| ๋ฐ์ดํฐ ์กฐ์ ๋ฐฉ์ | ๋ณต์กํ ๋ฐ์ดํฐ | Hash |
| ์ค์๊ฐ ๋ฐ์ดํฐ ํ๋ฆ | Stream |
Redis์ ๊ธฐ๋ณธ ์๋ฃํ
Stringํ
String์ Redis์์ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ด๊ณ ๋ง์ด ์ฌ์ฉ๋๋ ์๋ฃํ์ด๋ค.
๋น๋ก Stringํ์ด๋ผ๋ ์ด๋ฆ์ ๊ฐ์ง๊ณ ์์ง๋ง, ์ด์ง ์์ (Binary Safe) ๋ฌธ์์ด์ด๊ธฐ ๋๋ฌธ์
๋จ์ํ ๋ฌธ์์ด๋ฟ๋ง ์๋๋ผ ์ด๋ฏธ์ง๋ ์คํํ์ผ๊ณผ ๊ฐ์ ๋ฐ์ด๋๋ฆฌ ๋ฐ์ดํฐ๋ ์ ์ฅํ ์ ์๋ค.
๊ฒ๋ค๊ฐ Redis์์๋ ์ซ์๊ฐ (์ ์๋ ๋ถ๋์์์ )๋ Stringํ์ ์ ์ฅํ๋ค.
์ด๋ฌํ ํน์ง ๋๋ถ์ Redis์ Stringํ์ ๋จ์ํ ๊ฐ ์ ์ฅ์ ๋์ด ๋ค์ํ ์ฉ๋๋ก ํ์ฉ๋ ์ ์๋ค.

์น ์ ํ๋ฆฌ์ผ์ด์ ์์ ๊ฐ์ฅ ํํ๊ฒ Stringํ์ ์ฌ์ฉํ๋ ์ฌ๋ก๋
์ธ์ ์บ์๋ ์ฅ๋ฐ๊ตฌ๋ ์ ๋ณด์ ๊ฐ์ ์ผ์์ ์ธ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๊ฒ์ด๋ค.
์๋ฅผ ๋ค์ด, ์ฌ์ฉ์์ ์ธ์ ์ ๋ณด๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ์ ์ฅํ ์ ์๋ค.
session:abc123 : {"user_id":"AAAAAA"}
session:def456 : {"user_id":"BBBBBB"}
session:ghi789 : {"user_id":"CCCCCC"}
์์ ์์๋ฅผ ๋ณด๋ฉด, session:abc123๊ณผ ๊ฐ์ Key์ JSON ํ์์ ์ฌ์ฉ์ ์ ๋ณด๊ฐ String ํ์ผ๋ก ์ ์ฅ๋์ด ์๋ค.
์ด๋ฐ ๋ฐฉ์์ผ๋ก ์ธ์ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ฉด, Key๋ง ์๊ณ ์์ผ๋ฉด Redis์์ ํด๋น ์ ๋ณด๋ฅผ ๋น ๋ฅด๊ฒ ์กฐํํ ์ ์๋ค.
GET session:abc123
# ๊ฒฐ๊ณผ: {"user_id":"AAAAAA"}
์ด์ฒ๋ผ Redis์ Stringํ์ ์ธ์ ๋ฐ์ดํฐ๋ ์์ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ ๋ฐ ๋งค์ฐ ํจ์จ์ ์ด๋ค.
Listํ
Listํ์ Redis์์ ์์๊ฐ ์๋ ๋ฌธ์์ด (String)์ ์ปฌ๋ ์ ์ ์ ์ฅํ๋ ์๋ฃํ์ด๋ค.
๊ฐ๋จํ ๋งํด, ์ฐ๊ฒฐ ๋ฆฌ์คํธ (Linked List)์ ๋น์ทํ ๊ตฌ์กฐ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ๊ด๋ฆฌํ๋ค.
์ด๋ฌํ List๋ ์ค๋ณต์ ํ์ฉํ๋ฉฐ, ๋ฐ์ดํฐ๊ฐ ์ฝ์ ๋๋ ์์๋ฅผ ์ ์งํ ๋ฟ๋ง ์๋๋ผ
์์ชฝ ๋์์ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ์ญ์ ํ ์ ์๊ธฐ ๋๋ฌธ์
์คํ (Stack) ๋๋ ํ (Queue)์ ํํ๋ก๋ ํ์ฉ๋๋ค.

์ด๋ฌํ List ์๋ฃํ์ ์์๊ฐ ์ค์ํ ๋ฐ์ดํฐ๋ ๋น ๋ฅธ ์ฝ์ /์ญ์ ๊ฐ ํ์ํ ์ํฉ์์ ์ ์ฉํ๊ฒ ์ฌ์ฉ๋๋ค.
๋ํ์ ์ธ ์์๋ก๋ ์ต๊ทผ ๋ณธ ์ํ ๋ชฉ๋ก ์กฐํ๊ฐ ์๋ค.
์๋์ ๊ฐ์ด ์ฌ์ฉ์ ID 1001์ ์ต๊ทผ ๋ณธ ์ํ ๋ชฉ๋ก์
LPUSH๋ฅผ ํตํด ๋ฆฌ์คํธ์ ๋งจ ์ (์ผ์ชฝ)์ ์ถ๊ฐํ๊ณ ,
LPUSH recent:1001 "์ํA"
LPUSH recent:1001 "์ํB"
LPUSH recent:1001 "์ํC"
LRANGE ๋ช ๋ น์ด๋ฅผ ํตํด ์ต๊ทผ ๋ณธ ์ํ 3๊ฐ๋ฅผ ์กฐํํ๋ฉด,
LRANGE recent:1001 0 2
๋ฆฌ์คํธ์ 0๋ฒ (๊ฐ์ฅ ์) ๋ถํฐ 2๋ฒ๊น์ง, ์ต๊ทผ 3๊ฐ์ ์ํ์ ๋น ๋ฅด๊ฒ ์กฐํํ์ฌ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์๋ค.
["์ํC", "์ํB", "์ํA"]
๋ํ, ์ค๋๋ ํญ๋ชฉ์ ์ญ์ ํ๋ ค๋ฉด ์๋์ ๊ฐ์ ๋ฐฉ๋ฒ ๋ฑ์ผ๋ก ์ ํ์ ๋ ์๋ ์๋ค.
LTRIM recent:1001 0 4 # ์ต๊ทผ 5๊ฐ๋ง ์ ์ง
์ด์ฒ๋ผ Listํ์ ์์ชฝ ๋์์ ๋ฐ์ดํฐ๋ฅผ ๋น ๋ฅด๊ฒ ์ฝ์ ๋ฐ ์ญ์ ํ ์ ์๊ณ ,
์ฝ์ ์์๋ฅผ ์ ์งํ๊ธฐ ๋๋ฌธ์ ์คํ์ด๋ ํ์ ๊ฐ์ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ฝ๊ฒ ๊ตฌํํ ์ ์๋ค๋ ์ฅ์ ์ด ์๋ค.
ํ์ง๋ง ๋ฆฌ์คํธ์ ์ค๊ฐ ๋ฐ์ดํฐ์ ์ ๊ทผํ๊ฑฐ๋ ์์ ํ๋ ๋ฐ์๋ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฌ๊ธฐ ๋๋ฌธ์
์ฌ์ฉ ๋ชฉ์ ์ ๋ฐ๋ผ ๋ค๋ฅธ ์๋ฃํ๊ณผ ๋น๊ตํ์ฌ ์ ์ ํ ์ฌ์ฉํ๋ ๊ฒ์ด ์ค์ํ๋ค.
Setํ
Set์ ๋ฌธ์์ด์ ์งํฉ์ผ๋ก, ์งํฉ์ ํค๋ ์ฌ๋ฌ ๊ฐ์ ์์์ ์ค๋ณต ์์ด ์ ์ฅํ ์ ์๋ค.
์ฆ, ๊ฐ์ ๊ฐ์ ์ฌ๋ฌ ๋ฒ ์ ์ฅํด๋ ํ๋์ ๊ฐ์ผ๋ก ์ ์ฅ๋๋ค.

์ด๋ฌํ Setํ์ ์ผ๋ณ ๊ณ ์ ํ ๋ฐฉ๋ฌธ์๋ฅผ ๊ณ์ฐํ๋ ๋ฑ
์งํฉ ๊ฐ์ ์ฐ์ฐ์ด ํ์ํ ๊ฒฝ์ฐ์ ์ ์ฉํ๊ฒ ํ์ฉ๋๋ฉฐ,
O(1)์ ์๊ฐ ๋ณต์ก๋๋ก ๋น ๋ฅด๊ฒ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐ, ์ญ์ , ๊ฒ์ํ ์ ์๋ค.
์๋ฅผ ๋ค์ด ์น ์ฌ์ดํธ์์ ์ค๋ณต ์๋ ๋ฐฉ๋ฌธ์ ์๋ฅผ ๊ตฌํ๊ณ ์ ํ ๋์๋ ์๋์ ๊ฐ์ด ํ ์ ์๋ค.
SADD ๋ช ๋ น์ด๋ฅผ ํตํด Set์ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ๊ณ ,
(์ด ๋ Key๋ visitors๋ก ์ค๋์ ๋ฐฉ๋ฌธ์๋ฅผ ์ ์ฅํ๋ Set์ด๊ณ , Value๋ ๋ฐฉ๋ฌธ์์ IP ์ฃผ์์ด๋ค.)
SADD visitors "192.168.0.1"
SADD visitors "192.168.0.2"
SADD visitors "192.168.0.3"
SCARD ๋ช ๋ น์ด๋ฅผ ํตํด Set์ ์ ์ฅ๋ ์์์ ๊ฐ์๋ฅผ ํ์ธํ๋ฉด, ๋น ๋ฅด๊ฒ ๋ฐฉ๋ฌธ์ ์๋ฅผ ์ป์ ์ ์๋ค.
SCARD visitors
# ๊ฒฐ๊ณผ : 2
์ด์ฒ๋ผ Set ํ์ ์ค๋ณต ๋ฐ์ดํฐ๋ฅผ ์๋์ผ๋ก ์ ๊ฑฐํด์ฃผ๊ธฐ์ ๋ฐ์ดํฐ ์ค๋ณต์ ์ ๊ฒฝ ์ฐ์ง ์๊ณ ์ ์ฅํ ์ ์์ผ๋ฉฐ,
ํจ์จ์ ์ธ ์งํฉ ์ฐ์ฐ ๋ฐ ๋น ๋ฅธ ์ฐ์ฐ์ด ๊ฐ๋ฅํ๋ค๋ ์ฅ์ ์ด ์๋ค.
Sorted Setํ (ZSet)
Sorted Set (ZSet)์ Set์ ํน์ฑ๊ณผ ์ ๋ ฌ ๊ธฐ๋ฅ์ ๊ฒฐํฉํ ์๋ฃํ์ด๋ค.
์ค๋ณต์ ํ์ฉํ์ง ์๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ฉด์, ๊ฐ ์์์ ์ ์๋ฅผ ๋ถ์ฌํ๋ ๋ฐฉ์์ผ๋ก ์๋์ผ๋ก ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํ๋ค

์ด๋ฌํ ํน์ฑ ๋๋ถ์ Sorted Set ์๋ฃํ์ ๋ญํน ์์คํ , ์ฐ์ ์์ ํ ๋ฑ์ ๋ง์ด ํ์ฉ๋๋ค.
์๋ฅผ ๋ค์ด ๊ฒ์์ ์ ์ ๋ญํน์ ๊ด๋ฆฌํ๊ณ ์ ํ๋ ๊ฒฝ์ฐ ์๋์ ๊ฐ์ด ํ ์ ์๋ค.
ZADD ๋ช ๋ น์ด๋ฅผ ํตํด Sorted Set์ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ๊ณ ,
ZADD game:leaderboard 500 "Player1"
ZADD game:leaderboard 600 "Player2"
ZADD game:leaderboard 450 "Player3"
ZADD game:leaderboard 250 "Player4"
ZADD game:leaderboard 150 "Player5"
ZREVRANGE ๋ช ๋ น์ผ๋ฅผ ํตํด ์์ 3๋ช ์ ๋ญํน์ ์กฐํํ๋ฉด,
ZREVRANGE game:leaderboard 0 2 WITHSCORES
์๋์ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์๋ค.
["Player2", 600, "Player1", 500, "Player3", 450]
์ด์ฒ๋ผ Sorted Set์ ์ค๋ณต ์๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ ๊ธฐ๋ฐ์ผ๋ก ์๋ ์ ๋ ฌํ์ฌ
๋น ๋ฅธ ์กฐํ์ ํจ์จ์ ์ธ ์์ ๊ด๋ฆฌ๋ฅผ ์ ๊ณตํ๋ ์๋ฃํ์ผ๋ก,
ํน์ ์์์ ์์๋ฅผ O(log N)์ผ๋ก ๋น ๋ฅด๊ฒ ์กฐํ๊ฐ ๊ฐ๋ฅํ๋ค๋ ์ฅ์ ์ด ์๋ค.
Hashํ
Hashํ์ ํ๋์ ํค (Key) ์์ ์ฌ๋ฌ ๊ฐ์ ํ๋(Field)์ ๊ฐ (Value)๋ฅผ ์ ์ฅํ๋ ์๋ฃํ์ผ๋ก,
ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์์ ์ฐ๊ด ๋ฐฐ์ด์ด๋ ๋์ ๋๋ฆฌ์ ๊ฐ์ ์๋ฃ๊ตฌ์กฐ๋ก ์ดํดํ๋ฉด ๋๋ค.

์ด๋ฌํ Hashํ์ ์ฃผ๋ก ์ฌ์ฉ์ ์ ๋ณด๋ ์ํ ์ ๋ณด์ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ๋ ์ฌ์ฉ๋๋ค.
์๋ฅผ ๋ค์ด ํ์ ์ ๋ณด๋ฅผ ์ ์ฅํ๊ณ ์ ํ ๋์๋ ์๋์ ๊ฐ์ด ํ ์ ์๋ค.
๋จผ์ , HSET ๋ช ๋ น์ด๋ฅผ ํตํด ๋ค์๊ณผ ๊ฐ์ด ์ ์ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ฉด,
HSET user:1002 name "Bob" age "28" email "bob@example.com"
HGET ๋ช ๋ น์ด๋ฅผ ํตํด ์ฌ์ฉ์ ์ด๋ฆ์ ์กฐํํ ์๋ ์๊ณ ,
HGET user:1002 name
"Bob"
HGETALL ๋ช ๋ น์ด๋ฅผ ํตํด ํน์ ์ฌ์ฉ์์ ๋ชจ๋ ์ ๋ณด๋ฅผ ์กฐํํ ์๋ ์๋ค.
HGETALL user:1002
1) "name"
2) "Bob"
3) "age"
4) "28"
5) "email"
6) "bob@example.com"
์ด์ฒ๋ผ Hash ์๋ฃํ์ ๊ตฌ์กฐํ๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ๊ด๋ฆฌํ๊ธฐ ์ ํฉํ๋ฉฐ,
ํ๋ ๋จ์๋ก ๋น ๋ฅด๊ฒ ์กฐํํ๊ณ ์์ ํ ์ ์๊ธฐ์ ๋ฉ๋ชจ๋ฆฌ ํจ์จ์ฑ์ด ๋ฐ์ด๋์
์น ์๋น์ค์ ์ ํ๋ฆฌ์ผ์ด์ ์์ ๋๋ฆฌ ํ์ฉ๋๋ค.
๊ฒฐ๋ก
์ด๋ฒ ๊ธ์์ ์๊ฐํ String, List, Set, Sorted Set (ZSet), Hash ์๋ฃํ์
๊ฐ๊ฐ์ ํน์ฑ๊ณผ ์ฅ์ ์ ์ด๋ ค์ ํจ์จ์ ์ธ ๋ฐ์ดํฐ ๊ด๋ฆฌ์ ๋น ๋ฅธ ์๋น์ค ๊ตฌํ์ ๊ฐ๋ฅํ๋๋ก ํด์ค๋ค.
์๋ฃํ์ ์ ํ๊ณผ ํ์ฉ ๋ฐฉ๋ฒ์ ์๋น์ค์ ์๊ตฌ์ฌํญ์ ๋ฐ๋ผ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์
๊ฐ ์๋ฃํ์ ํน์ง๊ณผ ์ฅ์ ์ ์ ์ดํดํ๊ณ ์ ์ ํ ์กฐํฉํด์ ์ฌ์ฉํ๋ค๋ฉด,
์ฑ๋ฅ ํฅ์๊ณผ ํจ์จ์ ์ธ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ ๊ฒ์ด๋ค.
'๐ป๊ณต๋ถ ๊ธฐ๋ก > ๐ Backend' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [Backend] Listํ ๋ช ๋ น์ด (0) | 2025.01.12 |
|---|---|
| [Backend] Stringํ ๋ช ๋ น์ด (0) | 2025.01.12 |
| [Backend] Redis์ ํน์ง: ๋ค๋ฅธ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฌด์์ด ๋ค๋ฅธ๊ฐ (4) | 2025.01.08 |
| [Backend] Redis ์ค์นํ๊ธฐ (Window) (0) | 2025.01.07 |
| [Backend] REDIS ๊ณต๋ถ ๊ณ๊ธฐ (2) | 2025.01.06 |