๐ก [NHN FORWARD 2021] Redis ์ผ๋ฌด์ง๊ฒ ์ฌ์ฉํ๊ธฐ ๋ฅผ ์์ฒญํ๋ฉฐ ์ ๋ฆฌํ ๋ด์ฉ์
๋๋ค.
What is Redis?
์ ์ธ๊ณ์์ ๊ฐ์ฅ ์ ๋ช
ํ Caching ์๋ฃจ์
๋๋ถ๋ถ cache ์ฉ๋๋ก Redis ๋ฅผ ์ฌ์ฉํ๋ค.
- Redis ์ข ๋ ์์๋ณด๊ธฐ
Remote dictionary server (์ธ๋ถ HashMap ์๋ฒ)
Single Thread ์๋ฒ์ด๋ค. โ ์๊ฐ ๋ณต์ก๋ ๊ณ ๋ ค ํ์ (O(N) X)
1. Redis ๋ฅผ cache ๋ก ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ
cache ?
- cache ๋ ์ฌ์ฉ์์ ์
์ฅ์์ ๋ฐ์ดํฐ์ ์๋ ์์ค๋ณด๋ค ๋ ๋น ๋ฅด๊ณ ํจ์จ์ ์ผ๋ก ์์ธ์ค ํ ์ ์๋ ์์ ๋ฐ์ดํฐ ์ ์ฅ์๋ฅผ ๋ปํ๋ค.
- ๋๋ถ๋ถ์ ์ดํ๋ฆฌ์ผ์ด์
์์ ์๋ ํฅ์์ ์ํด cache ๋ฅผ ์ฌ์ฉํ๋ค. ๋ฐ๋ผ์ cache ์ ์ ๊ทผํ๋ ๊ฒ์ด ์๋ณธ์ ์ ๊ทผํ๋ ๊ฒ๋ณด๋ค ์ฝ๊ณ ๋นจ๋ผ์ผ ํ๋ค.
Q. cache ๋ ์ธ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์๊น?
A. ๋์ผํ ๋ฐ์ดํฐ์ ๋ํด ๋ฐ๋ณต์ ์ผ๋ก ์ก์ธ์ค ํ๋ ์ํฉ์ด ๋ง์ ๋ !
์๋ฏธ์๋ cache
- ๋ฐ์ดํฐ์ ์ฌ์ฌ์ฉ ํ์๊ฐ ํ ๋ฒ ์ด์์ผ ๊ฒฝ์ฐ
- ์ ๋ณํ์ง ์๋ ๋ฐ์ดํฐ์ผ์๋ก cache ๋ฅผ ์ฌ์ฉํ ๋ ๋ ํจ์จ์
Redis as a cache
- ๋จ์ํ key-value ๊ตฌ์กฐ : ์ฌ์ฉ์ด ๊ฐํธํ๊ณ ๋ฐ์ดํฐ ์ ์ฅ์ด ์ฝ๋ค.
- in-memory ๋ฐ์ดํฐ ์ ์ฅ์ (RAM)
- ๋น ๋ฅธ ์ฑ๋ฅ : ํ๊ท ์์
์๋ < 1 ms, ์ด๋น ์๋ฐฑ๋ง ๊ฑด์ ์์
๊ฐ๋ฅ
์บ์ฑ ์ ๋ต(Caching Strategies)
๋ฐ์ดํฐ์ ์ ํ๊ณผ ํด๋น ๋ฐ์ดํฐ์ ๋ํ ์ก์ธ์ค ํจํด์ ์ ๊ณ ๋ คํด์ ์ ํํด์ผ ํ๋ค.
1. look-aside
๋ฐ์ดํฐ๋ฅผ ์ฝ๋ ์์
์ด ๋ง์ ๋ ์ฌ์ฉํ๋ค. (๊ฐ์ฅ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ)
1๏ธโฃย ์ดํ๋ฆฌ์ผ์ด์
์ด ๋ฐ์ดํฐ๋ฅผ ์ฐพ์ ๋ cache ์ ๋จผ์ ํ์ธํ๋ค.
2๏ธโฃย cache ์ ๋ฐ์ดํฐ๊ฐ ์์ ๊ฒฝ์ฐ, cache ์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ์ค๋ ์์
์ ๋ฐ๋ณตํ๋ค.
3๏ธโฃย ๋ง์ฝ redis ์ ์ฐพ๋ ํค๊ฐ ์๋ค๋ฉด ์ดํ๋ฆฌ์ผ์ด์
์ DB ์ ์ ๊ทผํด์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์จ ๋ค ๋ค์ redis ์ ์ ์ฅํ๋ ๊ณผ์ ์ ๊ฑฐ์น๋ค.
โ cache ๋ ์ฐพ๋ ๋ฐ์ดํฐ๊ฐ ์์ ๋์๋ง ์
๋ ฅ๋๊ธฐ ๋๋ฌธ์ Lazy Loading (์ง์ฐ๋ก๋ฉ) ์ด๋ผ๊ณ ๋ ๋ถ๋ฅธ๋ค.
์ฅ์ | ๋จ์ |
---|
โข ์ด ๊ตฌ์กฐ๋ redis ๊ฐ ๋ค์ด๋๋๋ผ๋ ๋ฐ๋ก ์ฅ์ ๋ก ์ด์ด์ง์ง ์๊ณ DB ์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ฌ ์ ์๋ค. | โข cache ๋ก ๋ถ์ด์๋ ์ปค๋ฅ์
์ด ๋ง์ด ์์๋ค๋ฉด, ๊ทธ ์ปค๋ฅ์
์ด ๋ชจ๋ DB ์ ๋ถ๊ธฐ ๋๋ฌธ์ DB ์ ๊ฐ์๊ธฐ ๋ง์ ๋ถํ๊ฐ ๋ชฐ๋ฆด ์ ์๋ค. |
| โข ์ด๋ฐ ๊ฒฝ์ฐ์ cache ๋ฅผ ์๋ก ํฌ์
ํ๊ฑฐ๋ DB ์๋ง ์๋ก์ด ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ค๋ฉด ์ฒ์์ ์บ์ ๋ฏธ์ค๊ฐ ์์ฒญ ๋ฐ์ํด์ ์ฑ๋ฅ์ ์ ํ๊ฐ ์ฌ ์ ์๋ค. |
โ DB ์์ cache ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ด ๋ฃ์ด์ฃผ๋ ์์
: Cache Warming ์ ํตํด ๋ฐฉ์ง ๊ฐ๋ฅ
ex) ํฐ์ผ๋งํฌ์์ ์ํ ์คํ ์ ์ํ์ ์ ๋ณด๋ฅผ ๋ฏธ๋ฆฌ DB ์์ cache ๋ก ์ฌ๋ ค์ฃผ๋ ์์
์ ๋งค๋ฒ ํ๋ค.
2. write-around
DB ์๋ง ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ค.
1๏ธโฃย ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ DB ์ ์ ์ฅํ๋ค.
2๏ธโฃย ์บ์ ๋ฏธ์ค๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ์๋ง DB ์์ ๋ฐ์ดํฐ๋ฅผ ๊บผ๋ด cache ๋ก ๋์ด ์จ๋ค.
์ฅ์ | ๋จ์ |
---|
? | โข cache ๋ด์ ๋ฐ์ดํฐ์ DB ๋ด์ ๋ฐ์ดํฐ๊ฐ ๋ค๋ฅผ ์ ์๋ค. |
3. write-through
DB ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ๋, cache ์๋ ํจ๊ป ์ ์ฅํ๋ค.
์ฅ์ | ๋จ์ |
---|
โข cache ์ ํญ์ ์ต์ ๋ฐ์ดํฐ๊ฐ ๋ด๊ฒจ์๋ค. | โข ์ ์ฅํ ๋๋ง๋ค ๋ ๋จ๊ณ๋ฅผ ๊ฑฐ์ณ์ผํ๊ธฐ ๋๋ฌธ์ ์๋์ ์ผ๋ก ๋๋ฆฌ๋ค. |
| โข ์ ์ฅํ๋ ๋ฐ์ดํฐ๊ฐ ์ฌ์ฌ์ฉ๋์ง ์์ ์๋ ์๋๋ฐ ๋ฌด์กฐ๊ฑด ์บ์์ ๋ฃ์ด๋ฒ๋ ค์ ์ผ์ข
์ ๋ฆฌ์์ค ๋ญ๋น๊ฐ ๋ ์ ์๋ค. |
- ๋ฐ๋ผ์, ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ๋์๋ expire time ์ ์ค์ ํด์ฃผ๋ ๊ฒ์ด ์ข๋ค.
expire time ?
๋ช ๋ถ, ํน์ ๋ช ์๊ฐ๋์๋ง ๋ฐ์ดํฐ๋ฅผ ๋ณด๊ดํ๊ฒ ๋ค๋ ์๋ฏธ
2. Redis ๋ฐ์ดํฐ ํ์
- Strings : set ์ปค๋งจ๋๋ฅผ ์ด์ฉํด ์ ์ฅ๋ ๋ฐ์ดํฐ๋ ๋ชจ๋ String ํํ๋ก ๋ค์ด๊ฐ๋ค.
- Bitmaps : string ์ ๋ณํ, bit ๋จ์์ ์ฐ์ฐ์ด ๊ฐ๋ฅํ๋ค.
- Lists : ๋ฐ์ดํฐ๋ฅผ ์์๋๋ก ์ ์ฅ == ํ๋ก ์ฌ์ฉํ๊ธฐ ์ ์ ํ๋ค.
- Hashes : ํ๋์ ํค ์์ ๋๋ค์ ์ฌ๋ฌ ๊ฐ์ ํ๋์ ๋ฒจ๋ฅ ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ค.
- Sets : ์ค๋ณต๋์ง ์์ ๋ฌธ์์ด์ ์งํฉ
- Sorted Sets : set ์ฒ๋ผ ์ค๋ณต๋์ง ์์ ๋ชจ๋ ๊ฐ์ score ๋ผ๋ ์ซ์ ๊ฐ์ผ๋ก ์ ์ฅํ๋ค. ์ ์ฅ๋ ๋๋ถํฐ score ์์ผ๋ก ์ ๋ ฌ๋๋ฉฐ, score ๊ฐ ๊ฐ์ ๋์๋ ์ฌ์ ์์ผ๋ก ์ ๋ ฌ๋๋ค.
- HyperLogLogs : ๊ต์ฅํ ๋ง์ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃฐ ๋ ์ฃผ๋ก ์ฐ๋ฉฐ ์ค๋ณต๋์ง ์๋ ๊ฐ์ ๊ฐ์๋ฅผ ์นด์ดํธํ ๋ ์ฌ์ฉํ๋ค. โ ๋จผ์๋ฆฌ์?
- Streams : log ๋ฅผ ์ ์ฅํ๊ธฐ ๊ฐ์ฅ ์ข์ ์๋ฃ๊ตฌ์กฐ์ด๋ค.
Best Practice - Counting
Strings | Bits | HyperLogLogs |
---|
โข ๋จ์ ์ฆ๊ฐ ์ฐ์ฐ | โข ๋ฐ์ดํฐ ์ ์ฅ๊ณต๊ฐ ์ ์ฝ | โข ๋ชจ๋ string ๋ฐ์ดํฐ ๊ฐ์ ์ ๋ํฌํ๊ฒ ๊ตฌ๋ถํ ์ ์๋ค. |
โข INCR (increment) / INCRBY (increment by) | โข ์ ์๋ก ๋ ๋ฐ์ดํฐ๋ง ์นด์ดํ
๊ฐ๋ฅ | โข ๋์ฉ๋์ ๋ฐ์ดํฐ๋ฅผ ์นด์ดํ
ํ ๋ ์ ์ |
| | โข ์ ์ฅ๋๋ ๋ฐ์ดํฐ ๊ฐ์์ ์๊ด์์ด ๋ชจ๋ 12KB ๋ก ๊ณ ์ โ ์ฉ๋์ด ๋งค์ฐ ์์ |
| | โข ํ ๋ฒ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ ๋ค์ ๋ถ๋ฌ์ฌ ์ ์๋ค. (๊ฒฝ์ฐ์ ๋ฐ๋ผ ๋ฐ์ดํฐ ๋ณดํธ ๊ฐ๋ฅ) ex) ๊ฒ์ ์์ง์์ ๊ฒ์๋ ์ ๋ํฌํ ๋จ์ด๊ฐ ๋ช ๊ฐ์ธ์ง |
Best Practice - Messaging
Lists | Streams |
---|
โข ๋ฉ์ธ์ง ํ๋ก ์ฌ์ฉํ๊ธฐ ์ ์ | โข ๋ก๊ทธ๋ฅผ ์ ์ฅํ๊ธฐ ๊ฐ์ฅ ์ ์ ํ ์๋ฃ๊ตฌ์กฐ |
โข ์์ฒด์ ์ธ Blocking ๊ธฐ๋ฅ โ ๋ถํ์ํ polling ์ ๋ง์ ์ ์๋ค, Event Queue ๋ก ์ฌ์ฉ | โข ์ค์ ์๋ฒ์ ๋ก๊ทธ๊ฐ ์์ด๋ ๊ฒ์ฒ๋ผ append-only ๋ฐฉ์์ผ๋ก ์ ์ฅ, ์ค๊ฐ์ ๋ฐ์ดํฐ๊ฐ ๋ฐ๋์ง ์๋๋ค. |
| โข ์นดํ์นด์ ๊ฐ๋
์ ๋ง์ด ์ฐจ์ฉ |
ex) ์ธ์คํ, ํ์ด์ค๋ถ, ํธ์ํฐ์๋ ์ ์ ๋ณ๋ก ํ์๋ผ์ธ์ด ์กด์ฌํ๊ณ , ๊ทธ ํ์๋ผ์ธ์๋ ๋ด๊ฐ ํ๋ก์ฐํ ์ฌ๋๋ค์ ๋ฐ์ดํฐ๊ฐ ๋ฌ๋ค. ํธ์ํฐ์์๋ ๊ฐ ์ ์ ์ ํ์๋ผ์ธ์ ๋ณด์ผ ํธ์์ ์บ์ฑํ๊ธฐ ์ํด redis ์ list ๋ฅผ ์ฌ์ฉํ๋๋ฐ, ์ด ๋ RPUSHX ์ปค๋งจ๋๋ฅผ ์ฌ์ฉํ๋ค. ์ด๋ฅผ ์ด์ฉํด ํธ์ํฐ๋ฅผ ์์ฃผ ์ด์ฉํ๋ ์ ์ ์ ํ์๋ผ์ธ์๋ง ์๋ก์ด ๋ฐ์ดํฐ๋ฅผ ๋ฏธ๋ฆฌ ์บ์ํด ๋์ ์ ์์ผ๋ฉฐ ์์ฃผ ์ฌ์ฉํ์ง ์๋ ์ ์ ๋ caching key ์์ฒด๊ฐ ์กด์ฌํ์ง ์๊ธฐ ๋๋ฌธ์ ์ด ์ ์ ๋ค์ ์ํ ๋ฐ์ดํฐ๋ฅผ ๋ฏธ๋ฆฌ ์์๋๋ ๊ฒ๊ณผ ๊ฐ์ ๋นํจ์จ์ ์ธ ์์
์ ๋ฐฉ์งํ ์ ์๊ฒ ๋๋ค.
3. Redis ์์ ๋ฐ์ดํฐ๋ฅผ ์๊ตฌ ์ ์ฅํ๊ธฐ(RDB vs AOF)
Redis ๋ in-memory ๋ฐ์ดํฐ ์คํ ์ด
- ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋์ด์๊ธฐ ๋๋ฌธ์, ์๋ฒ๋ redis ์ธ์คํด์ค๊ฐ ์ฌ์์๋๋ฉด ๋ชจ๋ ๋ฐ์ดํฐ ์ ์ค
- ๋ณต์ ๊ตฌ์กฐ๋ก ๋์ด์์ด๋ ๋ฐ์ดํฐ ์ ์ค์์ ์์ ํ์ง ์๋ค.
Redis Persistence Option
1. AOF (Append Only File)
- ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ๋ ์ปค๋ฉ๋๊ฐ ๋ค์ด์ค๋ฉด ์ปค๋งจ๋๋ฅผ ๊ทธ๋๋ก ๋ชจ๋ ์ ์ฅํ๋ค. (redis ํ๋กํ ์ฝ ํํ๋ก ์ ์ฅ)
- ๋ฐ์ดํฐ๊ฐ ์ถ๊ฐ๋๊ธฐ๋ง ํด์ ๋๋ถ๋ถ RDB ํ์ผ๋ณด๋ค ์ฌ์ด์ฆ๊ฐ ์ปค์ง๋ค. โ ์ฃผ๊ธฐ์ ์ผ๋ก ์์ถํด์ ์ฌ์์ฑ๋๋ ๊ณผ์ ์ ๊ฑฐ์ณ์ผ ํ๋ค.
2. RDB
- ์ค๋
์ท ๋ฐฉ์์ผ๋ก ๋์ โ ์ ์ฅ ๋น์์ ๋ฉ๋ชจ๋ฆฌ์ ์๋ ๋ฐ์ดํฐ๋ฅผ ๊ทธ๋๋ก ์ค๋
์ท์ผ๋ก ์ฐ์ด์ ์ ์ฅํ๋ค. (๋ฐ์ด๋๋ฆฌ ํ์ผ ํํ๋ก ์ ์ฅ)
AOF ์ RDB ๋ชจ๋ ์ปค๋งจ๋๋ฅผ ์ด์ฉํด ์ง์ ํ์ผ์ ์์ฑํ๊ฑฐ๋ ์ํ๋ ์์ ์ ์๋์ผ๋ก ํ์ผ์ด ์์ฑ๋๋๋ก ํ ์ ์๋ค.
| ์๋ | ์๋ |
---|
AOF | redis.conf ํ์ผ์์ auto-aof-rewrite-percentage ์ต์
(ํฌ๊ธฐ ๊ธฐ์ค) | BGREWRITEAOF ์ปค๋งจ๋ ์ด์ฉ โ CLI ์ฐฝ์์ ์๋์ผ๋ก AOF ํ์ผ ์ฌ์์ฑ |
RDB | redis.conf ํ์ผ์์ SAVE ์ต์
(์๊ฐ ๊ธฐ์ค) | BGSAVE ์ปค๋งจ๋ ์ด์ฉ โ CLI ์ฐฝ์์ ์๋์ผ๋ก RDB ํ์ผ ์ ์ฅ (SAVE ์ปค๋งจ๋๋ ์ ๋ ์ฌ์ฉ X) |
AOF vs RDB ์ ํ ๊ธฐ์ค
- ์ฐ์ redis ๋ฅผ ์บ์๋ก๋ง ์ฌ์ฉํ๋ค๋ฉด, ๋ ๋ค ์ธ ํ์๊ฐ ์๋ค.
1. ๋ฐฑ์
์ ํ์ํ์ง๋ง ์ด๋ ์ ๋์ ๋ฐ์ดํฐ ์์ค์ด ๋ฐ์ํด๋ ๊ด์ฐฎ์ ๊ฒฝ์ฐ
- RDB ๋จ๋
์ฌ์ฉ
- redis.conf ํ์ผ์์ SAVE ์ต์
์ ์ ์ ํ ์ฌ์ฉ
ex) SAVE 900 1 โ 900 ์ด ๋์ ํ ๊ฐ ์ด์์ ํค๊ฐ ๋ณ๊ฒฝ๋์์ ๋ RDB ํ์ผ์ ์ฌ์์ฑํด๋ผ.
2. ์ฅ์ ์ํฉ ์ง์ ๊น์ง์ ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ๋ณด์ฅ๋์ด์ผ ํ ๊ฒฝ์ฐ
- AOF ์ฌ์ฉ
- APPENDFSYNC ์ต์
์ด everysec ์ธ ๊ฒฝ์ฐ ์ต๋ 1์ด ์ฌ์ด์ ๋ฐ์ดํฐ ์ ์ค ๊ฐ๋ฅ(๊ธฐ๋ณธ ์ค์ )
3. ์ ์ผ ๊ฐ๋ ฅํ ๋ด๊ตฌ์ฑ์ด ํ์ํ ๊ฒฝ์ฐ
4. Redis ์ํคํ
์ฒ
Replication (๋ณต์ ) | Sentinel | Cluster |
---|
โข ๋ง์คํฐ์ ๋ฆฌํ๋ฆฌ์นด๋ง ์กด์ฌํ๋ ๊ฐ๋จํ ๊ตฌ์กฐ | โข ๋ง์คํฐ์ ๋ฆฌํ๋ฆฌ์นด ๋
ธ๋ ์ธ์ ์ผํฐ๋ ๋
ธ๋๊ฐ ํ์ํ๋ค. | โข ์ผํฐ๋์ ์ผ๋ฐ ๋
ธ๋๋ค์ ๋ชจ๋ํฐ๋งํ๋ ์ญํ ์ ํ๋ค. |
| โข ์ต์ ์ธ๋์ ๋ง์คํฐ๊ฐ ํ์ํ๋ฉฐ ์ค๋ฉ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค. | |
1. Replication ๊ตฌ์ฑ
- ๋จ์ํ ๋ณต์ ์ฐ๊ฒฐ
- ๋ชจ๋ redis ์ ๊ตฌ์กฐ์์ ๋ณต์ ๋ ๋น๋๊ธฐ์์ผ๋ก ๋์ํ๋ค. โ ๋ง์คํฐ์์ ๋ณต์ ๋ณธ์ ๋ฐ์ดํฐ๊ฐ ์ ์ ๋ฌ๋๋์ง ๋งค๋ฒ ํ์ธํ๊ณ ๊ธฐ๋ค๋ฆฌ์ง ์๋๋ค.
- ์ด ๊ตฌ์กฐ๋ HA (High Availability) ๊ธฐ๋ฅ์ด ์๊ธฐ ๋๋ฌธ์ ๋ง์คํฐ์ ์ฅ์ ๊ฐ ๋ฐ์ํ๋ฉด ์๋์ผ๋ก ๋ณ๊ฒฝํด์ค์ผ ํ๋ ์์
๋ค์ด ๋ง๋ค.
(๋ฆฌํ๋ฆฌ์นด ๋
ธ๋์ ์ง์ ์ ์ํด์ ๋ณต์ ๋ฅผ ๋์ด์ผ ํ๊ณ , ์ดํ๋ฆฌ์ผ์ด์
์์๋ ์ฐ๊ฒฐ ์ค์ ์ ๋ณ๊ฒฝํ์ฌ ๋ฐฐํฌํ๋ ์์
์ด ํ์ํ๋ค.)
- HA (High Availability) ๊ธฐ๋ฅ ?
์๋ ํ์ผ์ค๋ฒ(์ฅ์ ๊ทน๋ณต ๊ธฐ๋ฅ)
2. Sentienl ๊ตฌ์ฑ
- ์๋ ํ์ผ์ค๋ฒ ๊ฐ๋ฅํ HA ๊ตฌ์ฑ(High Availability)
- ์ผํฐ๋ ๋
ธ๋๋ ์ผ๋ฐ์ ์ธ ๋ค๋ฅธ ๋
ธ๋๋ฅผ ๊ณ์ ๋ชจ๋ํฐ๋ง โ ๋ง์คํฐ๊ฐ ์ฃฝ์ผ๋ฉด ์๋์ผ๋ก ํ์ผ์ค๋ฒ๋ฅผ ๋ฐ์์์ผ ๊ธฐ์กด์ ๋ฆฌํ๋ฆฌ์นด ๋
ธ๋๊ฐ ๋ง์คํฐ๊ฐ ๋๋ค. ์ด๋ ์ดํ๋ฆฌ์ผ์ด์
์์๋ ์ฐ๊ฒฐ ์ ๋ณด๋ฅผ ๋ณ๊ฒฝํ ํ์๊ฐ ์๋ค. ์ดํ๋ฆฌ์ผ์ด์
์ ์ผํฐ๋ ๋
ธ๋๋ง ์๊ณ ์์ผ๋ฉด ๋๊ณ , ์ผํฐ๋์ด ๋ณ๊ฒฝ๋ ๋ง์คํฐ ์ ๋ณด๋ก ๋ฐ๋ก ์ฐ๊ฒฐ์์ผ ์ค๋ค.
- ์ด ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ ์ผํฐ๋ ํ๋ก์ธ์ค๋ฅผ ์ถ๊ฐ๋ก ๋์์ผ ํ๋๋ฐ, ์ผํฐ๋์ ํญ์ ์ธ๋ ์ด์์ ํ์๋ก ์กด์ฌํด์ผ ํ๋ค.
3. Cluster ๊ตฌ์ฑ
- ์ค์ผ์ผ ์์๊ณผ HA ๊ตฌ์ฑ (High Availability)
- ๋ฐ์ดํฐ๊ฐ ์ฌ๋ฌ ๋ง์คํฐ ๋
ธ๋์ ์๋์ผ๋ก ๋ถํ ๋์ด ์ ์ฅ๋๋ ์ค๋ฉ ๊ธฐ๋ฅ(์ค์ผ์ผ ์์)์ ์ ๊ณตํ๋ค.
- ๋ชจ๋ ๋
ธ๋๊ฐ ์๋ก ๊ฐ์ํ๊ณ ์๋ค๊ฐ ๋ง์คํฐ๊ฐ ๋น์ ์ ์ํ์ผ ๋ ์๋์ผ๋ก ํ์ผ์ค๋ฒ๋ฅผ ์งํํ๋ค.
- ์ต์ ์ธ๋ ์ด์์ ๋ง์คํฐ ๋
ธ๋๊ฐ ํ์ํ๊ณ , ๋ฆฌํ๋ฆฌ์นด ๋
ธ๋๋ฅผ ํ๋์ฉ ์ถ๊ฐํ๋ ๊ฒ ์ผ๋ฐ์ ์ธ ๊ตฌ์กฐ์ด๋ค.
5. Redis ์ด์ ํ๊ณผ ์ฅ์ ํฌ์ธํธ
redis ๋ ์ฑ๊ธ ์ค๋ ๋๋ก ๋์ํ๋ค.
ํ ์ฌ์ฉ์๊ฐ ์ค๋ ๊ฑธ๋ฆฌ๋ ์ปค๋งจ๋๋ฅผ ์คํํ๋ค๋ฉด ๋ณ๋ชฉํ์์ด ๋ฐ์ํ ์ ์๋ค.
์ฌ์ฉํ๋ฉด ์๋๋ ์ปค๋งจ๋
- keys โ scan ์ผ๋ก ๋์ฒด
- Hash ๋ Sorted Set ๋ฑ ์๋ฃ๊ตฌ์กฐ
- hgetall โ hscan
- del โ unlink
๋ณ๊ฒฝํ๋ฉด ์ฅ์ ๋ฅผ ๋ง์ ์ ์๋ ๊ธฐ๋ณธ ์ค์ ๊ฐ
- STOP-WRITES-ON-BGSAVE-ERROR = NO
- RDB ํ์ผ ์ ์ฅ ์คํจ ์ redis ๋ก์ ๋ชจ๋ write ๋ถ๊ฐ๋ฅ
- MAXMEMORY-POLICY = ALLKEYS-LRU
- redis ๋ฅผ ์บ์๋ก ์ฌ์ฉํ ๋ expire time ์ค์ ๊ถ์ฅ
- ๋ฉ๋ชจ๋ฆฌ๊ฐ ๊ฐ๋ ์ฐผ์ ๋ MAXMEMORY-POLICY ์ ์ฑ
์ ์ํด ํค ๊ด๋ฆฌ : ALLKEYS-LRU โ ๋ชจ๋ key ์ ๋ํด lru ๋ฐฉ์(๊ฐ์ฅ ์ต๊ทผ์ ์ฌ์ฉํ์ง ์์๋ key ๋ถํฐ ์ญ์ ํ๋ค)์ผ๋ก key ๋ฅผ ์ญ์ ํ๊ฒ ๋ค๋ ๊ฒ์ ์๋ฏธ
ref. https://www.youtube.com/watch?v=92NizoBL4uA