๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ–ฅ๏ธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค/Redis

[Redis] ch.16 ์ „์ž ์ƒ๊ฑฐ๋ž˜ ์•ฑ์„ ํ™œ์šฉํ•ด ์‹ค์Šตํ•˜๊ธฐ(์ผ๋ถ€)

by OR15A 2024. 1. 28.

https://github.com/HongHyeongJu/StudySpace/blob/main/database/Redis/Redis_%ED%95%99%EC%8A%B5%EB%85%B8%ED%8A%B8_04.md

์œ ๋ฐ๋ฏธ Redis : ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ Redis ์™„๋ฒฝ ๊ฐ€์ด๋“œ

ch.16 - ์ „์ž ์ƒ๊ฑฐ๋ž˜ ์•ฑ์„ ํ™œ์šฉํ•ด ์‹ค์Šตํ•˜๊ธฐ



  • ์ผ๋ถ€๋ถ„ ๊ฑด๋„ˆ๋œ€


114. ๋™์‹œ์„ฑ ๋ฌธ์ œ ์ดํ•ดํ•˜๊ธฐ

  • ์ž…์ฐฐ ์‹œ ๊ฐ™์€ ์š”์ฒญ์ด ์™”์„ ๋•Œ ๊ฐ์ž์˜ ์‹คํ–‰์„ ์—์„œ ์ฒ˜๋ฆฌํ•˜๋ฏ€๋กœ ์—ฌ๋Ÿฌ๋ช…์ด ๋‚™์ฐฐ๋ฐ›์„ ์ˆ˜ ์žˆ์Œ
  • Redis์—์„œ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์™€ ๊ณ„์‚ฐ ์ž‘์—…์ด๋‚˜ ๊ฒ€์ฆ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ ๋‹ค์Œ ๋‹ค์‹œ Redis์— ์ €์žฅํ•ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ์ด๋ผ๋ฉด ์–ธ์ œ๋‚˜ ์ด์™€ ๋น„์Šทํ•œ ๋™์‹œ์„ฑ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Œ
  • ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ์‹œ์ ๊ณผ Redis์— ๋‹ค์‹œ ์ €์žฅ ๋ฐ ์—…๋ฐ์ดํŠธํ•˜๋Š” ์‹œ์  ์‚ฌ์ด์— ๋‹ค๋ฅธ ์š”์ฒญ ๋˜๋Š” ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋™์ผํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์™€ ์ถฉ๋Œ์ด ์ผ์–ด๋‚  ์ˆ˜ ์žˆ์–ด์š”
  • ์–ธ์ œ๋“ ์ง€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์˜ค๊ณ  + ๋ฌด์–ธ๊ฐ€๋ฅผ ์ฒ˜๋ฆฌํ•œ ๋‹ค์Œ + ๋‹ค์‹œ ์ €์žฅ ๋ฐ ์—…๋ฐ์ดํŠธํ•  ๋•Œ => ๋™์‹œ์„ฑ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฐ€๋Šฅ์„ฑ ์žˆ์Œ!!!
  • ๋™์‹œ์„ฑ ๋ฌธ์ œ๋ฅผ ์ง„์งœ ๋ฌธ์ œ๋กœ ๋ณผ ๊ฑด์ง€ ์•„๋‹Œ์ง€๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ทœ์น™์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง
    • ex)
    • Todo List์—์„œ '์‹œ์ž‘', '์™„๋ฃŒ' ์š”์ฒญ์ด ๊ฒน์น˜๋Š” ๊ฒฝ์šฐ -> ํฐ๋ฌธ์ œ ์•„๋‹˜. ๋งˆ์ง€๋ง‰ ์ •๋ณด๋กœ ์—…๋ฐ์ดํŠธ ํ•˜๊ฑฐ๋‚˜ ๊ถŒํ•œ์„ ์ด์šฉํ•  ์ˆ˜์žˆ์Œ
    • ๋‚™์ฐฐ ๋“ฑ ๋ˆ๊ด€๋ จ ์ค‘์š”ํ•œ ๋ฌธ์ œ์—์„œ๋Š” ์กฐ์‹ฌํ•ด์•ผํ•จ
  • ๋™์‹œ์„ฑ ๋ฌธ์ œ ํ•ด๊ฒฐ๋ฐฉ๋ฒ• 4๊ฐ€์ง€
    • 2๊ฐ€์ง€๋Š” ์ด๋ฒˆ ์ฑ•ํ„ฐ์—์„œ, ๋‚˜๋จธ์ง€๋Š” ํ›„๋ฐ˜์— ์„ค๋ช…
    • [1] ์ž๋™ ์—…๋ฐ์ดํŠธ commeand ์‚ฌ์šฉํ•˜๊ธฐ (HINCRBY or HSETNX)
    • [2] WATCH ๋ช…๋ น์–ด๋กœ ํŠธ๋žœ์ ์…˜ ์‚ฌ์šฉํ•˜๊ธฐ
    • [3] ๋ฝ ์ด์šฉํ•˜๊ธฐ
    • [4] LUA ์—…๋ฐ์ดํŠธ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ปค์Šคํ…€ ํ•˜๊ธฐ

์›์ž์  ์—…๋ฐ์ดํ„ฐ ์ ์šฉํ•˜๊ธฐ

  • ๋™์‹œ์„ฑ ๋ฌธ์ œ์˜ ์›์ธ
    • ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ณ  ์“ฐ๋Š” ์‚ฌ์ด์— ์‹œ๊ฐ„ ์ฐจ๊ฐ€ ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ
    • ๋ฐ”๋กœ ์ด ์‹œ๊ฐ„ ๋™์•ˆ ๋‹ค๋ฅธ ์š”์ฒญ์ด ์„œ๋ฒ„๋กœ ๋“ค์–ด์™€์„œ ํ˜„์žฌ ์ฝ๊ณ  ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—
  • ํŠน์ • ๋ช…๋ น์–ด๋ฅผ ์ด์šฉํ•˜๋ฉด ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์˜ค์ง€ ์•Š๊ณ  ํ˜„์žฌ ๊ฐ’์„ ์‚ฌ์šฉํ•ด ์ œ์ž๋ฆฌ์—์„œ ์—…๋ฐ์ดํŠธ ํ•  ์ˆ˜ ์žˆ์Œ
  • ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜๋Š” inStock์˜ ์ดˆ๊นƒ๊ฐ’์„ ํ™•์ธํ•˜๋Š” ๋‹จ๊ณ„๋ฅผ ์ƒ๋žตํ•˜๋Š”๊ฒƒ = ์ฝ๋Š” ๋‹จ๊ณ„๋ฅผ ์ „๋ถ€ ์ƒ๋žตํ•˜๊ณ  ๋ฐ”๋กœ ์“ฐ๋Š” ๋‹จ๊ณ„๋กœ ๋„˜์–ด๊ฐ€๊ธฐ
    • ์ด๋ ‡๊ฒŒ ํ•˜๋ ค๋ฉด โ€˜HINCRBYโ€™ ๋ช…๋ น์–ด๋ฅผ ์“ฐ๊ธฐ (ํ•ด์‹œ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•  ๋•Œ ๋‹ค๋ค˜์Œ)
    • ์“ฐ๋Š” ๋™์ž‘๋งŒ ์ˆ˜ํ–‰ํ•˜๋ฉฐ, ์ฝ๋Š” ๋™์ž‘์€ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์Œ
  • ex) ์ด๋ฒˆ์—๋Š” ์ฐจ๋Ÿ‰ ์ƒ‰์ƒ์„ ๊ธฐ๋กํ•˜๊ธฐ + ํ•œ ๊ฐ€์ง€ ์š”๊ตฌ์‚ฌํ•ญ(์•„์ง ์ƒ‰์ƒ์ด ์ง€์ •๋˜์ง€ ์•Š์€ ์ฐจ๋Ÿ‰์— ๋Œ€ํ•ด์„œ๋งŒ ์ƒ‰์ƒ์„ ์ง€์ •ํ•ด์•ผํ•จ)
    • 'HSETNX'๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ (HSETNX ๋ช…๋ น์–ด๋Š” ํ”„๋กœํผํ‹ฐ๊ฐ€ ์„ค์ •๋˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ์— ํ•œํ•ด ๊ฐ’์„ ์„ค์ •ํ•จ)
  • HINCRBY, HSETNX ๋ช…๋ น์–ด์˜ ํ•ต์‹ฌ
    • ์ด๋ฅผ ์‚ฌ์šฉํ•ด ์ฝ๊ณ  ์“ฐ๋Š” ๋™์ž‘ ์‚ฌ์ด์˜ ์‹œ๊ฐ„ ์ฐจ๋ฅผ ์™„๋ฒฝํžˆ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์Œ
    • ๋˜๋Š” ์ผ์ • ๊ธฐ์ค€์„ ๋งŒ์กฑํ•˜๋Š” ๊ฒฝ์šฐ์—๋งŒ ์—…๋ฐ์ดํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ฒŒํ•  ์ˆ˜ ์žˆ์Œ
  • ํ•˜์ง€๋งŒ ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ์—๋Š” ์ด ๋ช…๋ น์–ด๋งŒ์œผ๋กœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์—†์Œ
    • ์ž…์ฐฐ ๋ฐ์ดํ„ฐ ์ƒ์„ฑ์‹œ HSET๋ฟ๋งŒ ์•„๋‹ˆ๋ผ RPUSH๋„ ์‚ฌ์šฉํ•จ
    • ๋˜ํ•œ ๋ฆฌ์ŠคํŠธ ์ฒ˜๋ฆฌ์‹œ HSETNX ๊ฐ™์€ ๋ช…๋ น์–ด๋Š” ํฐ ๋„์›€์ด ๋˜์ง€ ์•Š์Œ
    • ๊ทธ๋ž˜์„œ ํŠธ๋žœ์žญ์…˜์ด ํ•„์š”ํ•จ

ํŠธ๋žœ์žญ์…˜

  • ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ช…๋ น์„ ๊ทธ๋ฃน์œผ๋กœ ๋ฌถ์–ด ์ˆœ์ฐจ์ ์œผ๋กœ ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋„๋ก ๋ณด์žฅํ•ด์คŒ
  • Redis์—์„œ๋Š” ํŠธ๋žœ์žญ์…˜ ๋กค๋ฐฑ๊ณผ ์ทจ์†Œ๋Š” ํ•  ์ˆ˜ ์—†์Œ(๊ทธ๋ž˜์„œ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋น„ํ•ด ํŠธ๋žœ์žญ์…˜์˜ ํ™œ์šฉ๋„๊ฐ€ ๋–จ์–ด์ง)
  • MULTI
    • Redis์—๊ฒŒ ๊ณง ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ช…๋ น์–ด๋ฅผ ๋ณด๋‚ผ ๊ฑฐ๊ณ , ๋ฐ”๋กœ ์‹คํ–‰ํ•˜์ง€๋Š” ์•Š์„ ๊ฑฐ๋ผ๋Š” ๋œป
    • ์กฐ๊ธˆ ๊ธฐ๋‹ค๋ ธ๋‹ค๊ฐ€ ๋‚˜์ค‘์— ์ฐจ๋ก€๋Œ€๋กœ ์‹คํ–‰ํ•  ๋•Œ ์‚ฌ์šฉํ•จ
    • MULTI๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํŠธ๋žœ์žญ์…˜์„ ์‹œ์ž‘ํ•œ ๋‹ค์Œ์—๋Š”, ์‹ค์ œ๋กœ ์‹คํ–‰ํ•  ๋ช…๋ น์–ด๋“ค์„ ์ „์†กํ•จ
    • โ€˜QUEUEDโ€™๋ผ๋Š” ๋ฉ”์„ธ์ง€ : ๋ช…๋ น์–ด๊ฐ€ ๋Œ€๊ธฐ์—ด์— ์ถ”๊ฐ€๋˜์–ด ์‹คํ–‰์„ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ์Œ์„ ์˜๋ฏธํ•จ
  • EXEC
    • ์‹คํ–‰ํ•  ๋ช…๋ น์–ด๋“ค์„ ์‹ค์ œ๋กœ ์‹คํ–‰ํ•˜๊ฒŒ ํ•จ

ํŠธ๋žœ์žญ์…˜์œผ๋กœ ํ‚ค ๊ฐ์‹œํ•˜๊ธฐ

  • WATCH
    • Redis๊ฐ€ ํŠน์ • ํ‚ค์— ์ €์žฅ๋œ ๊ฐ’์„ ์ง€์ผœ๋ณด๋„๋ก ์ง€์‹œํ•จ
    • ๋‹ค์Œ ํŠธ๋žœ์žญ์…˜์ด ์‹คํ–‰๋˜๊ธฐ ์ „์— ์ง€์ผœ๋ณด๋˜ ๊ฐ’์ด ๋ณ€๊ฒฝ๋˜๋ฉด, ํ•ด๋‹น ํŠธ๋žœ์žญ์…˜์€ ์ž๋™์œผ๋กœ ์‹คํŒจํ•จ
    • ์ง€์ผœ๋ณด๋˜ ํ‚ค๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ๋‹ค๋ฉด EXEC๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ์ˆœ๊ฐ„ null์ด ๋ฐ˜ํ™˜๋จ
  • Redis์—์„œ ๊ฐ’์„ ์ฝ์–ด์˜จ ๋‹ค์Œ, ์ž ์‹œ ์‹œ๊ฐ„์„ ๋“ค์—ฌ ์ฒ˜๋ฆฌ ์ž‘์—…์„ ์ง„ํ–‰ํ•˜๊ณ , ๋‹ค์‹œ ์“ฐ๊ธฐ ์ž‘์—…์„ ์‹คํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ์ผ๋ จ์˜ ๊ณผ์ •์„ ๋ชจ๋‘ ํŠธ๋žœ์žญ์…˜์œผ๋กœ ๊ฐ์‹ธ์ฃผ๊ณ , WATCH ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ
  • WATCH ํ‚ค์›Œ๋“œ์—์„œ ์ž์ฃผ ๋ณผ ์ˆ˜ ์žˆ๋Š” ์ „ํ˜•์ ์ธ ์‚ฌ์šฉ ํŒจํ„ด ์•Œ์•„๋‘๊ธฐ

ํŠธ๋žœ์žญ์…˜์šฉ ์—ฐ๊ฒฐ ๋ถ„๋ฆฌ

  • ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ํŒจํ„ด
    • WATCH => ๋ฐ์ดํ„ฐ ๊ฐ€์ ธ์˜ค๊ธฐ => ํŠธ๋žœ์žญ์…˜ ์‹คํ–‰
      • WATCH ์‹คํ–‰
      • GET, HGETALL ๋“ฑ์˜ ๋ช…๋ น์–ด๋กœ Redis์—์„œ ๋ฐ์ดํ„ฐ ๊ฐ€์ ธ์˜ค๊ธฐ
      • ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌํ•˜๊ธฐ
      • MULTI, SET, EXEC๋กœ ํŠธ๋žœ์žญ์…˜์„ ๊ตฌ์„ฑํ•˜๊ธฐ
  • ์ฃผ์˜์ 
    • ํŠธ๋žœ์žญ์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด WATCH๋‚˜ MULTIํ‚ค์›Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ๋งˆ๋‹ค Redis๊ณผ์˜ ์—ฐ๊ฒฐ์„ ์™„์ „ํžˆ ์ ์œ ํ•˜๊ฒŒ๋จ
    • ํ•ด๋‹น ์—ฐ๊ฒฐ์€ ์ด ํŠธ๋žœ์žญ์…˜๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜๊ณ , ๋‹ค๋ฅธ๋ฐ์„œ๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Œ

ํŠธ๋žœ์žญ์…˜์œผ๋กœ ์ค‘๋ณต ์ž…์ฐฐ ๋ฌธ์ œ ํ•ด๊ฒฐํ•˜๊ธฐ

  • ํ•„๊ธฐ
  • ํ•„๊ธฐ
  • ํ•„๊ธฐ
  • ํ•„๊ธฐ
  • ํ•„๊ธฐ

๊ฐ€๊ฒฉ์ˆœ ์ •๋ ฌ & ํ•จ์ˆ˜ ๊ตฌํ˜„

  • ํ•„๊ธฐ
  • ํ•„๊ธฐ
  • ํ•„๊ธฐ
  • ํ•„๊ธฐ
  • ํ•„๊ธฐ