Skip to content

Latest commit

ย 

History

History
160 lines (103 loc) ยท 10.8 KB

Redis.md

File metadata and controls

160 lines (103 loc) ยท 10.8 KB

Redis

Cache

์บ์‹œ๋ž€ ๋‚˜์ค‘์— ์š”์ฒญํ•  request์— ๋Œ€ํ•œ response๋ฅผ ๋ฏธ๋ฆฌ ์ €์žฅํ•ด๋‘๋Š” ๊ณณ์œผ๋กœ DB๋˜๋Š” API๋ฅผ ์ฐธ์กฐํ•˜์ง€ ์•Š๊ณ  ๋น ๋ฅธ ์‘๋‹ต์ด ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์ค€๋‹ค.

์บ์‹œ์˜ ๋“ฑ์žฅ ๋ฐฐ๊ฒฝ

  • โ€œ80%์˜ ๊ฒฐ๊ณผ๋Š” 20%์˜ ์›์ธ์— ์˜ํ•ด ๋ฐœ์ƒํ•œ๋‹คโ€๋ผ๋Š” ํŒŒ๋ ˆํ†  ๋ฒ•์น™ ์œผ๋กœ๋ถ€ํ„ฐ ์บ์‹œ๋ผ๋Š” ๊ฐœ๋…์ด ๋“ฑ์žฅํ–ˆ๋‹ค. โ†’ ์„œ๋น„์Šค์—์„œ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” 20%์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์บ์‹œ์— ์ €์žฅํ•˜๋ฏ€๋กœ์จ ์ „์ฒด์ ์ธ ํšจ์œจ์„ ๋Œ์–ด์˜ฌ๋ฆด ์ˆ˜ ์žˆ๋‹ค.
  • ์‚ฌ์šฉ์ž๊ฐ€ ๋Š˜์–ด๋‚˜ DB์— ์š”์ฒญ์ด ๋ชฐ๋ฆฌ๋ฉด์„œ ๋””์Šคํฌ IO๊ฐ€ ์ž์ฃผ ๋ฐœ์ƒํ•œ๋‹ค. ์ด๋Š” ๊ฒฐ๊ตญ ์„ฑ๋Šฅ์„ ๋–จ์–ด๋œจ๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์— DB Scaling Out, Scaling Up ๋˜๋Š” ์บ์‹œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๊ฒ€ํ† ํ•ด๋ด์•ผ ํ•œ๋‹ค.

์บ์‹ฑ ๊ณผ์ •

  1. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์—๊ฒŒ request๋ฅผ ๋ณด๋‚ธ๋‹ค
  2. ์„œ๋ฒ„๋Š” request์— ํ•ด๋‹นํ•˜๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์บ์‹œ์— ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.
  3. ์กด์žฌํ•œ๋‹ค๋ฉด(cache hit) ๋ฐ”๋กœ ์‘๋‹ตํ•œ๋‹ค
  4. ์กด์žฌํ•˜์ง€ ์•Š๋‹ค๋ฉด(cache miss) DB๋‚˜ ์„œ๋ฒ„์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•œ ๋’ค ์‘๋‹ตํ•œ๋‹ค

์บ์‹œ ์‚ฌ์šฉ ๋ฐฉ์‹

Look Aside Cache(Lazy Loading) โ†’ ๋Œ€๋ถ€๋ถ„์˜ ์บ์‹œ๋Š” ์ด์™€ ๊ฐ™์€ ํ”„๋กœ์„ธ์Šค๋กœ ๊ตฌ์„ฑ๋œ๋‹ค

  1. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์—๊ฒŒ request๋ฅผ ๋ณด๋‚ธ๋‹ค
  2. ์„œ๋ฒ„๋Š” ์บ์‹œ์— ๋ฐ์ดํ„ฐ๊ฐ€ ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธํ•œ๋‹ค
  3. ์บ์‹œ์— ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋‹ค๋ฉด ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค
  4. ์—†๋‹ค๋ฉด DB์—์„œ ์กฐํšŒํ•œ ํ›„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

Write Back โ†’ ์“ฐ๊ธฐ ์ž‘์—…์ด ๋งŽ์€ ์„œ๋น„์Šค(๋ฐฐ์น˜ ์ž‘์—…)์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๊ตฌ์กฐ์ด๋‹ค

  1. ์„œ๋ฒ„๋Š” ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์บ์‹œ์—๋งŒ ์ €์žฅํ•œ๋‹ค
  2. ์ผ์ • ์ฃผ๊ธฐ๋งˆ๋‹ค ์บ์‹œ์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ DB์— ์ €์žฅํ•œ๋‹ค
  3. DB์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์บ์‹œ์—์„œ ์ œ๊ฑฐํ•œ๋‹ค

์˜จ๋ผ์ธ ํ…Œ์ŠคํŠธ ์„œ๋น„์Šค์—์„œ ์—ฌ๋Ÿฌ ์‚ฌ์šฉ์ž๊ฐ€ โ€œ์ œ์ถœโ€ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅผ ๋•Œ, DB์— ๋ฐ”๋กœ insertํ•œ๋‹ค๋ฉด ์š”์ฒญ์ด ๋ชฐ๋ ค DB ์„œ๋ฒ„๊ฐ€ ์ฃฝ์„ ์ˆ˜ ์žˆ๋‹ค. ์ด ๊ฒฝ์šฐ Write Back ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ DB์— ์•ˆ์ „ํ•˜๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค

Memcached

Memcached๋ž€ ์˜คํ”ˆ ์†Œ์Šค ๋ถ„์‚ฐ ๋ฉ”๋ชจ๋ฆฌ ์บ์‹ฑ ์‹œ์Šคํ…œ์œผ๋กœ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์„œ๋ฒ„๋ฅผ ํ™œ์šฉํ•œ ๊ฒƒ์ด๋‹ค.

  • consistent hash ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌผ๋ฆฌ์ ์ธ ๋ณ„๋„์˜ ์บ์‹œ ์„œ๋ฒ„๋ฅผ ๋กœ์ง์ƒ์˜ ํ•˜๋‚˜์˜ ์„œ๋ฒ„๋กœ ๊ฐ„์ฃผํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค. โ†’ ์—ฌ๋Ÿฌ ์„œ๋ฒ„์—์„œ ํ•˜๋‚˜์˜ ์บ์‹œ ์„œ๋ฒ„์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅ, ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์˜ค๋ž˜๋œ ์ €์‚ฌ์–‘ ์„œ๋ฒ„์˜ ์ž‰์—ฌ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ™œ์šฉํ•œ๋‹ค.

Memcached์˜ ๋‹จ์ 

์ธ๋ฉ”๋ชจ๋ฆฌ ์‹œ์Šคํ…œ์ด๊ธฐ ๋•Œ๋ฌธ์— ์บ์‹œ ์„œ๋ฒ„๋ฅผ ์žฌ๋ถ€ํŒ…ํ•  ๊ฒฝ์šฐ ๋ฐ์ดํ„ฐ๊ฐ€ ํœ˜๋ฐœ๋œ๋‹ค. ์ฆ‰, Memcached ์‹œ์Šคํ…œ์„ ์˜๊ตฌ ์ €์žฅ ์‹œ์Šคํ…œ์œผ๋กœ ํ™œ์šฉํ•˜๊ธฐ์— ์ ํ•ฉํ•˜์ง€ ์•Š๋‹ค.

  • ๋ฐ์ดํ„ฐ๋ฅผ ์˜๊ตฌ์ ์œผ๋กœ ์ €์žฅํ•˜๋ ค๋ฉด ๋น„ํœ˜๋ฐœ์„ฑ ์ €์žฅ์†Œ์— ์ €์žฅํ•ด๋‘๊ณ , ์บ์‹œ ์„œ๋ฒ„๋ฅผ ์žฌ๋ถ€ํŒ…ํ•  ๋•Œ ๋ฐ์ดํ„ฐ๋ฅผ ์บ์‹œ ์„œ๋ฒ„๋กœ ์ ์žฌํ•ด์•ผ ํ•œ๋‹ค.

Redis

Redis(Remote Dictionary Server)๋ž€ ์™ธ๋ถ€์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ธ๋ฉ”๋ชจ๋ฆฌ NoSQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์ด๋‹ค.

  • Redis๋Š” ๊ณ ์„ฑ๋Šฅ ํ‚ค-๊ฐ’ ์ €์žฅ์†Œ๋กœ์„œ String, Bitmap, Hash, List, Set, Sorted Set ๋“ฑ์˜ ๋‹ค์–‘ํ•œ ์ž๋ฃŒ ๊ตฌ์กฐ๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” NoSQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์ด๋‹ค.

Redis์—์„œ ์ €์žฅํ•˜๋Š” ๋ฐ์ดํ„ฐ

  • key-value ์Œ์˜ ๋ฐ์ดํ„ฐ๋ฅผ key๋กœ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์กฐํšŒ ์†๋„๊ฐ€ ๋งค์šฐ ๋น ๋ฅด๋‹ค โ†’ O(1)
  • ๋ฌธ์ž์—ด๋ถ€ํ„ฐ JPEG ํŒŒ์ผ๊นŒ์ง€ ๋ชจ๋“  ์ด์ง„ ์‹œํ€€์Šค๋ฅผ key๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. key๋Š” ์ตœ๋Œ€ 521MB์ด๋‹ค.

์ธ๋ฉ”๋ชจ๋ฆฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค?

disk๊ฐ€ ์•„๋‹ˆ๋ผ ๋ฉ”๋ชจ๋ฆฌ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์ด๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ์˜ ์–‘์ด ์ œํ•œ์ ์ด๋‹ค.

Redis์˜ ์šฉ๋„

  • ์กฐํšŒ์ˆ˜ ์นด์šดํŠธ ํ˜•ํƒœ์˜ ๋ฐ์ดํ„ฐ : IO์ž‘์—…์ด ๋นˆ๋ฒˆํ•˜๊ฒŒ ๋ฐœ์ƒํ•˜์—ฌ Redis๊ฐ€ ์•„๋‹Œ ๋‹ค๋ฅธ ์ €์žฅ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋ฉด ๋น„ํšจ์œจ์ ์ธ ๊ฒฝ์šฐ์— Redis๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค
  • ์‚ฌ์šฉ์ž ์„ธ์…˜ ๊ด€๋ฆฌ : ์‚ฌ์šฉ์ž์˜ ์„ธ์…˜์„ ์œ ์ง€ํ•˜๋ ค๋Š” ์šฉ๋„๋กœ ์‚ฌ์šฉ๋œ๋‹ค
  • ์ธ์ฆ ํ† ํฐ ์ €์žฅ์šฉ : Refresh Token ์ €์žฅ์šฉ
  • API ์š”์ฒญ ๊ฒฐ๊ณผ ์บ์‹ฑ์šฉ

Redis์˜ ํŠน์ง•

๐Ÿงฉ ์˜์†์„ฑ์„ ์ง€์›ํ•˜๋Š” ์ธ๋ฉ”๋ชจ๋ฆฌ ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ์ด๋‹ค : RDB, AOF ๋ฐฉ์‹

Redis๋Š” ๋ฐ์ดํ„ฐ์˜ ์˜์†์„ฑ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๋””์Šคํฌ์— ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.

  • Redis ์„œ๋ฒ„๊ฐ€ ์žฌ๋ถ€ํŒ…๋˜์–ด ๋ฐ์ดํ„ฐ๊ฐ€ ํœ˜๋ฐœ๋˜์–ด๋„ ๋””์Šคํฌ์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋กœ๋“œํ•œ๋‹ค
  • ๋‹ค๋งŒ ๋ฐ์ดํ„ฐ๋ฅผ ํ•ญ์ƒ ์ •ํ™•ํ•˜๊ฒŒ ์œ ์ง€๋˜์ง„ ์•Š๋Š”๋‹ค.

Redis์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋””์Šคํฌ์— ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹์— 2๊ฐ€์ง€๊ฐ€ ์กด์žฌํ•œ๋‹ค. (์ฐธ๊ณ )

  1. RDB(Snapshotting) ๋ฐฉ์‹ : ํ•œ ์ˆœ๊ฐ„์— ๋ฉ”๋ชจ๋ฆฌ ์† ๋ฐ์ดํ„ฐ ์ „์ฒด๋ฅผ ๋ฐ”์ด๋„ˆ๋ฆฌ ํŒŒ์ผ(.rdb)๋กœ ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹

    https://raw.githubusercontent.com/rmcodestar/rmcodestar.github.io/master/public/img/20190427-rdb.jpeg

    • ์žฅ์ 
      • ๋ฉ”๋ชจ๋ฆฌ์˜ ์Šค๋ƒ…์ƒท์„ ํŒŒ์ผ๋กœ ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— Redis ์„œ๋ฒ„๋ฅผ ์žฌ๋ถ€ํŒ…ํ•  ๊ฒฝ์šฐ ํ•ด๋‹น ํŒŒ์ผ๋งŒ ๋ถˆ๋Ÿฌ ์˜ค๋ฉด ๋œ๋‹ค
      • ๋ฐ”์ด๋„ˆ๋ฆฌ ํŒŒ์ผ(.rdb)์€ AOF ํŒŒ์ผ(ํ…์ŠคํŠธ)๋ณด๋‹ค ์‚ฌ์ด์ฆˆ๊ฐ€ ์ž‘๊ธฐ ๋•Œ๋ฌธ์— ๋กœ๋”ฉ ์†๋„๊ฐ€ ๋น„๊ต์  ๋น ๋ฅด๋‹ค
    • ๋‹จ์ 
      • ๋ฉ”๋ชจ๋ฆฌ ์Šค๋ƒ…์ƒท์„ ํŒŒ์ผ๋กœ ์ถ”์ถœํ•˜๋Š” ์‹œ๊ฐ„์ด ์˜ค๋ž˜๊ฑธ๋ฆฐ๋‹ค. ์ถ”์ถœ ์ค‘๊ฐ„์— ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๋งˆ์ง€๋ง‰ ์Šค๋ƒ…์ƒท ์ดํ›„์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ๋‘ ์žƒ์„ ์ˆ˜ ์žˆ๋‹ค.
  2. AOF(Append On File) ๋ฐฉ์‹ : Redis์˜ ๋ชจ๋“  write, update ์—ฐ์‚ฐ ์ž์ฒด๋ฅผ log ํŒŒ์ผ(.aof)์— ๊ธฐ๋กํ•˜๋Š” ๋ฐฉ์‹

    https://raw.githubusercontent.com/rmcodestar/rmcodestar.github.io/master/public/img/20190427-aof.jpeg

    • ์žฅ์ 
      • ๋ฐ์ดํ„ฐ ์œ ์‹ค์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค
    • ๋‹จ์ 
      • RDB ๋ฐฉ์‹์— ๋น„ํ•ด ๋” ๋งŽ์€ ๋””์Šคํฌ ์šฉ๋Ÿ‰์„ ์ฐจ์ง€ํ•œ๋‹ค
      • log ํŒŒ์ผ์— ๊ธฐ๋ก๋œ ๋ชจ๋“  ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰์‹œํ‚ค๊ธฐ ๋•Œ๋ฌธ์— ์žฌ๋ถ€ํŒ… ์‹œ ์‘๋‹ต์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฐ๋‹ค.

    ์Šค๋ƒ…์ƒท๊ณผ AOF๋ฐฉ์‹์„ ํ˜ผํ•ฉํ•ด ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๊ถŒ์žฅ๋œ๋‹ค.

    • RDB โ†’ ์ฃผ๊ธฐ์ ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ ์Šค๋ƒ…์ƒท์„ ์ฐ์–ด .rdb ํŒŒ์ผ์— ์ €์žฅํ•œ๋‹ค
    • AOF โ†’ ๋‹ค์Œ ์Šค๋ƒ…์ƒท๊นŒ์ง€์˜ log๋ฅผ AOF ๋ฐฉ์‹์œผ๋กœ ์ €์žฅํ•œ๋‹ค.

    ์„œ๋ฒ„ ์žฌ๋ถ€ํŒ…์‹œ .rdb ํŒŒ์ผ์„ ๋ถˆ๋Ÿฌ์˜ค๊ณ  ๋น„๊ต์  ์ ์€ ์–‘์˜ AOF ๋กœ๊ทธ๋งŒ ์žฌ์‹คํ–‰ํ•ด์ค€๋‹ค

๐Ÿงฉ ๋‹ค์–‘ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์ง€์›ํ•œ๋‹ค

Redis๋Š” ๋‹ค์–‘ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์ง€์›ํ•˜์—ฌ ๊ฐœ๋ฐœ ํŽธ์˜์„ฑ์„ ์ œ๊ณตํ•œ๋‹ค. ์ด ํŠน์ง•์€ ๋‹ค๋ฅธ ์ธ๋ฉ”๋ชจ๋ฆฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ํฐ ์ฐจ์ด์ ์ด๋‹ค.

  • Redis์™€ Memcached์˜ ์ฐจ์ด์  : ์ง€์›ํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์˜ ๋‹ค์–‘์„ฑ

๐Ÿงฉ ๋น ๋ฅด๋‹ค

Redis๋Š” disk์— ์ ‘๊ทผํ•˜์ง€ ์•Š๊ณ  ๋ฉ”๋ชจ๋ฆฌ์— ์ ‘๊ทผํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๊ธฐ ๋•Œ๋ฌธ์— ์†๋„๊ฐ€ ๋น ๋ฅด๋‹ค.

  • Redis์˜ ์„ฑ๋Šฅ์€ Memcached์— ๋ฒ„๊ธˆ๊ฐ€๋ฉด์„œ๋„ ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์ฒด๋ฅผ ์ง€์›ํ•˜๊ธฐ ๋•Œ๋ฌธ์— DB, Cache, Message Queue, Shared Memory ์šฉ๋„๋กœ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿงฉ ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ ๋ฐฉ์‹์œผ๋กœ ์—ฐ์‚ฐ์„ ์›์ž์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•œ๋‹ค

Redis๋Š” ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์—ฐ์‚ฐ์„ ์›์ž์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•œ๋‹ค. ๋‹ค์‹œ ๋งํ•ด, Race Condition์ด ๊ฑฐ์˜ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค. (Thread Safeํ•˜๋‹ค)

Redis์—์„œ ์ œ๊ณตํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ (์ฐธ๊ณ )

์ข…๋ฅ˜ ์„ค๋ช…
String ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ํ˜•ํƒœ์˜ ์ž๋ฃŒ๊ตฌ์กฐ
- key โ†’ string
- string ํƒ€์ž…์— ์ด์ง„ ๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จํ•œ ๋ชจ๋“  ์ข…๋ฅ˜์˜ ๋ฌธ์ž์—ด์„ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค. (JPEG, HTML)
- ๋ ˆ๋””์Šค์˜ ํ‚ค๊ฐ€ ๋ฌธ์ž์—ด์ด๋ฏ€๋กœ ์ด ๊ตฌ์กฐ๋Š” ๋ฌธ์ž์—ด์„ ๋‹ค๋ฅธ ๋ฌธ์ž์—ด์— ๋งคํ•‘ํ•˜๋Š” ๊ฒƒ
List LinkedList ํŠน์ง•์„ ๊ฐ€์ง„ ์ž๋ฃŒ๊ตฌ์กฐ
- key โ†’ ์—ฌ๋Ÿฌ list ์›์†Œ
- list ๋‚ด์— ์ˆ˜๋ฐฑ๋งŒ ๊ฐœ์˜ ์•„์ดํ…œ์ด ์žˆ๋”๋ผ๋„ head์™€ tail์— ๊ฐ’์„ ์ถ”๊ฐ€ํ•  ๋•Œ ๋™์ผํ•œ ์‹œ๊ฐ„์ด ์†Œ์š”๋œ๋‹ค.
- Pub-Sub ํŒจํ„ด : ์ƒ์‚ฐ์ž๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ๋งŒ๋“ค์–ด list์— ๋„ฃ์œผ๋ฉด ์†Œ๋น„์ž๊ฐ€ list์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊บผ๋‚ด ์•ก์…˜์„ ์ˆ˜ํ–‰ํ•œ๋‹ค
- ํŠธ์œ„ํ„ฐ์—์„œ๋Š” ๊ฐ ์œ ์ €์˜ ํƒ€์ž„๋ผ์ธ์„ ๋ณด์—ฌ์ฃผ๊ธฐ ์œ„ํ•ด Redis์˜ list๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค
Hash field-value ์Œ์˜ ์ผ๋ฐ˜์ ์ธ ํ•ด์‹œ ์ž๋ฃŒ๊ตฌ์กฐ
- key โ†’ ์—ฌ๋Ÿฌ fleld-value ์Œ์˜ ๋ฐ์ดํ„ฐ
- key์— ๋Œ€ํ•œ field ๊ฐœ์ˆ˜์— ์ œํ•œ์ด ์—†๋‹ค
- RDB์˜ ํ…Œ์ด๋ธ”๊ณผ ๋น„์Šทํ•˜๋‹ค (hash key๋Š” table์˜ PK, field๋Š” column, value๋Š” value)
Set set์€ ์ •๋ ฌ๋˜์ง€ ์•Š๊ณ  ์ค‘๋ณต๋˜์ง€ ์•Š๋Š” ๋ฌธ์ž์—ด์˜ ๋ชจ์Œ
- key โ†’ ์ˆœ์„œ๊ฐ€ ์—†๊ณ  ์ค‘๋ณต๋˜์ง€ ์•Š๋Š” ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ
- ๊ฐ์ฒด ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ํ‘œํ˜„ํ•  ๋•Œ ์ข‹๋‹ค
- ๊ต์ง‘ํ•ฉ, ํ•ฉ์ง‘ํ•ฉ, ์ฐจ์ง‘ํ•ฉ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค
Sorted Set ์ •๋ ฌ๋˜๊ณ  ์ค‘๋ณต๋˜์ง€ ์•Š๋Š” ๋ฌธ์ž์—ด์˜ ๋ชจ์Œ
- key โ†’ ์ค‘๋ณต๋˜์ง€ ์•Š๋Š” member-score ์Œ์˜ ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ
- ์ €์žฅ๋˜๋Š” ๋ฐ์ดํ„ฐ๋Š” score๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌ๋œ๋‹ค. (score๊ฐ’์ด ๋™์ผํ•˜๋‹ค๋ฉด member์˜ ์‚ฌ์ „ ์ˆœ์„œ๋กœ ์ •๋ ฌ)
- ๋ฐ์ดํ„ฐ๊ฐ€ ์ •๋ ฌ๋˜์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ธ๋ฑ์Šค๋กœ ๋น ๋ฅธ ์กฐํšŒ๊ฐ€ ๊ฐ€๋Šฅ

์ฃผ์˜ ์‚ฌํ•ญ

๐Ÿงฉ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๊ฐ€ ๋งค์šฐ ์ค‘์š”ํ•˜๋‹ค

Redis๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

  1. ๋ฉ”๋ชจ๋ฆฌ ํŒŒํŽธํ™” ๋ฌธ์ œ : ๋‹ค์–‘ํ•œ ์‚ฌ์ด์ฆˆ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”๋ชจ๋ฆฌ ํŒŒํŽธํ™” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. โ†’ ๊ฐ€๊ธ‰์  ๋น„์Šทํ•œ ์‚ฌ์ด์ฆˆ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š”๊ฒŒ ๋ฐ”๋žŒ์งํ•˜๋‹ค
  2. swapping์œผ๋กœ ์ธํ•œ ์†๋„ ์ €ํ•˜ : ๊ฐ€์šฉ ๋ฉ”๋ชจ๋ฆฌ๋ณด๋‹ค ํฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•œ๋‹ค๋ฉด swapping์ด ๋ฐœ์ƒํ•œ๋‹ค. ์‚ฌ์ด์ฆˆ๊ฐ€ ํฐ ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•œ๋‹ค๋ฉด page swap in, out์ด ๋ฐœ์ƒํ•˜์—ฌ ๊ฒ€์ƒ‰ ์†๋„์— ์˜ํ–ฅ์ด ๋ฏธ์นœ๋‹ค.

๐Ÿงฉ ์ €์žฅ ๊ณต๊ฐ„์ด ํ•œ์ •์ ์ด๋‹ค

Redis๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ๋ผ๋Š” ํ•œ์ •์ ์ธ ๊ณต๊ฐ„์— ์ €์žฅํ•œ๋‹ค.

  • ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๊ฐ€๋“์ฐฌ ๊ฒฝ์šฐ ๊ฐ€์žฅ ๋จผ์ € ๋“ค์–ด์˜จ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•˜๊ฑฐ๋‚˜, ๊ฐ€์žฅ ์ตœ๊ทผ์— ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•˜๊ฑฐ๋‚˜, ๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅ๋ฐ›์ง€ ๋ชปํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ €์žฅ ๊ณต๊ฐ„์ด ๊ฐ€๋“์ฐฌ ๊ฒฝ์šฐ ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ์‚ญ์ œ๋  ๋ฐ์ดํ„ฐ ๊ธฐ์ค€์„ ์„ค์ •ํ•˜๋Š”๊ฒŒ ๋ฐ”๋žŒ์งํ•˜๋‹ค โ†’ ๋ฐ์ดํ„ฐ์˜ ์‚ฌ์šฉ ๊ธฐํ•œ Expire ๋ฅผ ์„ค์ •ํ•˜์—ฌ key์— ๋Œ€ํ•œ timeout(๋งŒ๋ฃŒ ์‹œ๊ฐ„)์„ ์ง€์ •ํ•ด์ค€๋‹ค. ๋งŒ๋ฃŒ ์‹œ๊ฐ„์ด ๊ฒฝ๊ณผํ•˜๋ฉด key๊ฐ€ ์ž๋™์œผ๋กœ ์‚ญ์ œ๋œ๋‹ค.
  • Expire๋Š” Collection์˜ item ๋ณ„๋กœ ์„ค์ •ํ•  ์ˆ˜ ์—†๊ณ  Collection ์ „์ฒด์— ์„ค์ •๋œ๋‹ค. โ†’ Collection ๋‚ด๋ถ€์˜ ๋ชจ๋“  item์ด ์‚ญ์ œ๋œ๋‹ค

๐Ÿงฉ O(N) ๊ด€๋ จ ๋ช…๋ น์–ด๋Š” ํ”ผํ•˜์ž

Redis๋Š” ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ ๋ฐฉ์‹์œผ๋กœ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ์š”์ฒญ ์ฒ˜๋ฆฌ ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋ฉด ๋’ค์— ์˜ค๋Š” ๋‚˜๋จธ์ง€ ์š”์ฒญ๋“ค์€ ๊ณ„์† ๋Œ€๊ธฐํ•ด์•ผ ํ•œ๋‹ค.

  • ํ•˜๋‚˜์˜ ์š”์ฒญ์ด 1์ดˆ ์†Œ์š”๋œ๋‹ค๋ฉด ๋‚˜๋จธ์ง€ 9999๊ฐœ์˜ ์š”์ฒญ์€ ๋ชจ๋‘ 1์ดˆ๋™์•ˆ ๋Œ€๊ธฐํ•ด์•ผ ํ•œ๋‹ค. ์ตœ์•…์˜ ๊ฒฝ์šฐ ๋’ท๋‹จ์˜ ์š”์ฒญ์— TIME_OUT์ด ๋ฐœ์ƒํ•˜์—ฌ ์„œ๋น„์Šค๊ฐ€ ํ„ฐ์งˆ ์ˆ˜ ์žˆ๋‹ค.
  • ๋”ฐ๋ผ์„œ ์ฒ˜๋ฆฌ ์‹œ๊ฐ„์ด O(N)์ธ ๋ช…๋ น์–ด๋ฅผ ํ”ผํ•˜๋Š”๊ฒŒ ์ข‹๋‹ค. (KEYS, FLUSHALL, FLUSHDB, Delete Collection, Get All Collections)