๐Ÿง  ์™œ Redis๋Š” ๋‹จ์ผ ์Šค๋ ˆ๋“œ์ผ๊นŒ

์—…๋ฐ์ดํŠธ:
1 ๋ถ„ ์†Œ์š”

๐Ÿ” ํ•ต์‹ฌ ์š”์•ฝ

Redis๋Š” ์™œ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ๊ฐ€ ์•„๋‹Œ ๋‹จ์ผ ์Šค๋ ˆ๋“œ(single-threaded) ๋กœ ์„ค๊ณ„๋˜์—ˆ์„๊นŒ?
์ด์œ ๋Š” ๋‹จ์ˆœํ•˜๋‹ค: ๋น ๋ฅด๊ณ  ์•ˆ์ „ํ•˜๊ฒŒ ๋™์ž‘ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋‹ค.


๐Ÿ’ก Redis ์•„ํ‚คํ…์ฒ˜ ๊ฐœ์š”

alt

  • ๋ชจ๋“  ๋ช…๋ น์€ ํ•˜๋‚˜์˜ ์Šค๋ ˆ๋“œ(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๋Š” ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ, ์ฒ˜๋ฆฌ ๋กœ์ง์€ ๋‹จ์ผ

ํƒœ๊ทธ: , , , , , ,

์นดํ…Œ๊ณ ๋ฆฌ:

์—…๋ฐ์ดํŠธ:

๋Œ“๊ธ€๋‚จ๊ธฐ๊ธฐ