๐ ํต์ฌ ์์ฝ
Redis๋ ์ ๋ฉํฐ์ค๋ ๋๊ฐ ์๋ ๋จ์ผ ์ค๋ ๋(single-threaded) ๋ก ์ค๊ณ๋์์๊น?
์ด์ ๋ ๋จ์ํ๋ค: ๋น ๋ฅด๊ณ ์์ ํ๊ฒ ๋์ํ๊ธฐ ์ํด์๋ค.
๐ก Redis ์ํคํ
์ฒ ๊ฐ์

- ๋ชจ๋ ๋ช
๋ น์ ํ๋์ ์ค๋ ๋(Event Loop) ์์ ์์ฐจ์ ์ผ๋ก ์ฒ๋ฆฌ๋จ
- ํด๋ผ์ด์ธํธ ์์ฒญ์ I/O ๋ฉํฐํ๋ ์ฑ ์ผ๋ก ๋น๋๊ธฐ ์ฒ๋ฆฌ
- Redis 6.0๋ถํฐ ๋คํธ์ํฌ I/O๋ ๋ฉํฐ์ค๋ ๋ ์ง์, ์คํ ๋ก์ง์ ์ฌ์ ํ ๋จ์ผ ์ค๋ ๋
โ
๋จ์ผ ์ค๋ ๋์ ์ฅ์
1๏ธโฃ ๋์์ฑ ๋ฌธ์ ํด์
- ๋ฉํฐ์ค๋ ๋ ํ๊ฒฝ์์๋ Race Condition, Deadlock ๋ฑ ์ฒ๋ฆฌ ๋ณต์ก๋ โ
- ๋จ์ผ ์ค๋ ๋๋ ์ด๋ฌํ ๋ฌธ์ ์์ ์์ฐ์ค๋ฝ๊ฒ ์์ ๋ก์
2๏ธโฃ ๋ฐ์ดํฐ ์ผ๊ด์ฑ ๋ณด์ฅ
- ๋ชจ๋ ๋ช
๋ น์ด ์์ฐจ์ ์ผ๋ก ์ฒ๋ฆฌ
- ๋ณ๋ ๋ฝ ์์ด๋ Atomic(์์์ฑ) ๋ณด์ฅ
๐ ํธ๋์ญ์
/๋ณตํฉ ์ฐ์ฐ์์๋ ์์
3๏ธโฃ ์ฑ๋ฅ ์ต์ ํ
- Redis๋ ๋๋ถ๋ถ์ ์์
์ด ๋ฉ๋ชจ๋ฆฌ ๋ด ์ฒ๋ฆฌ (RAM)
- CPU ์์ ์ค ์คํ๋ ค ๋ฝ๊ณผ ์ปจํ
์คํธ ์ค์์นญ์ด ๋ณ๋ชฉ ์์ธ
- ๋จ์ผ ์ค๋ ๋๋ ์ปจํ
์คํธ ์ค์์นญ ์ค๋ฒํค๋ ์ต์ํ
โ๏ธ Redis์ ์ด๋ฒคํธ ๋ฃจํ(Event Loop)
ํด๋ผ์ด์ธํธ ์์ฒญ ์์
โ
๋คํธ์ํฌ I/O ์ฒ๋ฆฌ (epoll/kqueue ๋ฑ)
โ
์์ฒญ ํ์ ์์
โ
๋จ์ผ ์ค๋ ๋๊ฐ ๋ช
๋ น์ด๋ฅผ ํ๋์ฉ ์์ฐจ ์ฒ๋ฆฌ
โ
๊ฒฐ๊ณผ๋ฅผ ๋ค์ ๋น๋๊ธฐ๋ก ์๋ต
- ์ค์ ๋ก๋ ํ๋์ ์ค๋ ๋๊ฐ ์์ฒ ๊ฐ์ ํด๋ผ์ด์ธํธ๋ฅผ ์ฒ๋ฆฌ ๊ฐ๋ฅ
- ๋์ ์ ์ ์๋ ๋ง์ง๋ง, ์ค์ ๋ณ๋ ฌ ์์
์ ์์
๐ Redis 6.0 ์ดํ - ๋คํธ์ํฌ I/O ๋ฉํฐ์ค๋ ๋
--io-threads
์ต์
๋์
- ํด๋ผ์ด์ธํธ์ ์์ฒญ ์์ /์๋ต ์ฒ๋ฆฌ๋ ๋ณ๋ ฌํ๋จ
- ํ์ง๋ง, ๋ช
๋ น ์คํ ๋ก์ง ์์ฒด๋ ์ฌ์ ํ ๋จ์ผ ์ค๋ ๋
๐ก๏ธ ๊ฒฐ๊ณผ์ ์ผ๋ก ์ฌ์ ํ Redis๋
๋ฐ์ดํฐ ์ฒ๋ฆฌ์ ์์ด "Atomic" ์ ๋ณด์ฅ
๐ ์ธ์ ๋จ์ผ ์ค๋ ๋๊ฐ ๋ณ๋ชฉ์ด ๋ ์ ์์๊น?
์ํฉ |
๋์ |
๋๋ฆฐ ๋ช
๋ น์ด ๋ง์ ๋ |
๋ช
๋ น ์ต์ ํ, Redis Cluster ์ฌ์ฉ |
๋คํธ์ํฌ ๋ณ๋ชฉ ์ |
--io-threads ๋ก I/O ๋ณ๋ ฌ ์ฒ๋ฆฌ |
๋ฐ์ดํฐ ์ฒ๋ฆฌ๋์ด ๋งค์ฐ ๋์ ๊ฒฝ์ฐ |
Sharding, Redis Sentinel/Cluster ํ์ฉ |
๐ง ๋ง๋ฌด๋ฆฌ ์ ๋ฆฌ
ํญ๋ชฉ |
์ค๋ช
|
์ค๊ณ ๋ชฉ์ |
์ฑ๋ฅ ์ต์ ํ + ๋์์ฑ ๋จ์ํ |
์ฅ์ |
์์ ์ฑ, ์์ธก ๊ฐ๋ฅ, ๋น ๋ฆ |
๋จ์ |
CPU ์ฝ์ด ํ๊ณ, ๋๋ฆฐ ๋ช
๋ น ๋ณ๋ชฉ |
Redis 6.0 ์ดํ |
๋คํธ์ํฌ I/O๋ ๋ฉํฐ์ค๋ ๋, ์ฒ๋ฆฌ ๋ก์ง์ ๋จ์ผ |
๋๊ธ๋จ๊ธฐ๊ธฐ