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

[Redis] ch.4 Redis ๋กœ์ปฌ ์„ค์ • / ch.5 ํ•ด์‹œ ์ž๋ฃŒ ๊ตฌ์กฐ

by OR15A 2024. 1. 26.

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

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

ch.04 - Redis ๋กœ์ปฌ ์„ค์ • && ch.05 - ํ•ด์‹œ ์ž๋ฃŒ ๊ตฌ์กฐ



Redis Window ์„ค์น˜

  • Redis์—๋Š” Redis์™€ Redis Stack, ๋‘ ๊ฐ€์ง€ ๋ฒ„์ „์ด ์žˆ์Šต๋‹ˆ๋‹ค.
    • Redis์—๋Š” ํ•ต์‹ฌ Redis๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.
    • Redis Stack์—๋Š” ํ•ต์‹ฌ Redis ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ทธ๋ฆฌ๊ณ  Redis์˜ ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•ด ์ฃผ๋Š” ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์ด ํฌํ•จ๋ผ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Redis Labs์— ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๋ฉด Redis Stack์˜ ์‚ฌ๋ณธ์„ ์–ป์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์—ฌ๊ธฐ์—๋Š” ์ด๋ฏธ ์„ค์น˜๋œ ์ถ”๊ฐ€ ๋ชจ๋“ˆ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๊ฐ•์˜ ๊ณผ์ • ํ›„๋ฐ˜๋ถ€๋กœ ๊ฐ€๋ฉด ์ด ์ถ”๊ฐ€ ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋ฏ€๋กœ Redis Stack์„ ์‹คํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ์„ค์น˜ ๊ฐ€์ด๋“œ : https://redis.io/docs/install/install-stack/docker/

Redis์˜ ํ•ด์‹œ

  • ํ•ด์‹œ๋กœ ์ค‘์ฒฉ๋œ ํ‚ค-๊ฐ’ ์Œ์˜ ๋ชจ์Œ์„ ์ €์žฅํ•  ์ˆ˜ ์žˆ์Œ
  • ํ•ด์‹œ์˜ ์ผ๋ฐ˜์ ์ธ ์‚ฌ์šฉ ์‚ฌ๋ก€
    • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํŠน์ • ๋ ˆ์ฝ”๋“œ๋‚˜ ์—”ํ„ฐํ‹ฐ์˜ ์ •๋ณด๋ฅผ ์ €์žฅํ•จ
  • ์ฃผ์˜ํ•  ์ 
    ํ•ด์‹œ๋ฅผ ์‚ฌ์šฉํ•ด ์—ฌ๋Ÿฌ ๋‹จ๊ณ„๋กœ ์ค‘์ฒฉ๋œ ํ‚ค-๊ฐ’ ์Œ์€ ์ €์žฅํ•  ์ˆ˜ ์—†์Œ
    • ์ค‘์ฒฉX ๋ฐฐ์—ดX
  • JSON ๊ตฌ์กฐ์™€ ์œ ์‚ฌํ•จ

ํ•ด์‹œ ์ €์žฅ ๋ฐ ๊ฐ€์ ธ์˜ค๊ธฐ

  • HSET
    • ์ฒซ๋ฒˆ์งธ ์ธ์ˆ˜ : ํ•ด์‹œ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์ €์žฅํ•  ํ‚ค ์ด๋ฆ„
    • ์ฒซ๋ฒˆ์งธ ์ธ์ˆ˜ ๋‹ค์Œ์—๋Š” [ํ‚ค์ด๋ฆ„, ๊ฐ’]์„ ๋ฐ˜๋ณต์ ์œผ๋กœ ์ž‘์„ฑํ•˜๊ธฐ
    • ex) HSET company name, 'Company Co', age, 1915 -> ๋ฐ˜ํ™˜์ˆซ์ž 2 : 2๊ฐœ์˜ ํ‚ค-๊ฐ’ ์Œ์„ ์—…๋ฐ์ดํŠธํ–ˆ๋‹ค๋Š” ์˜๋ฏธ
  • HGET
    • HSET company name -> 'Company Co' q๋ฐ˜ํ™˜
  • HGETALL
    • HGETALL company -> ["name": "Company Co", "age": "1915"] ์‹ค์ œ๋กœ๋Š” ๋ฐฐ์—ด๋กœ ๋ฐ˜ํ™˜ํ•จ
    • ํด๋ผ์ด์–ธํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ๋Š” ์ด์™€ ๊ฐ™์€ ๋ฐฐ์—ด์ด ๋ฐ˜ํ™˜๋˜๋ฏ€๋กœ ์ง์ ‘ ํ‚ค-๊ฐ’ ์Œ์„ ์˜ค๋ธŒ์ ํŠธ๋กœ ๋ณ€ํ™˜ํ•ด์•ผ ํ•  ์ˆ˜ ์žˆ์Œ
  • ํ•„๊ธฐ
  • ํ•„๊ธฐ

ํ•ด์‹œ ๋ฐ์ดํ„ฐ ์‚ญ์ œํ•˜๊ธฐ

  • HEXISTS
    • ๊ธฐ์กด ํ•ด์‹œ์— ํ‚ค๊ฐ€ ์ •์˜๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธ. ํ‚ค์˜ ์กด์žฌ๋งŒ ํ™•์ธ
    • ex) HEXISTS company age -> ํ•ด์‹œ์•ˆ์— age๊ฐ€ ์žˆ์œผ๋ฉด 1 ๋ฐ˜ํ™˜, ์—†์œผ๋ฉด 0 ๋ฐ˜ํ™˜
    • ์ฃผ์˜์ 
      • Redis๊ฐ€ ์ €์žฅ๋œ ๊ฐ’์„ ๊ฒ€์ฆํ•˜์ง€๋Š” ์•Š์Œ. age์— ๋นˆ ๋ฌธ์ž์—ด, 0, false๋“ฑ ์ž˜๋ชป๋œ ๊ฐ’์ด ๋‹ด๊ฒจ์žˆ์„ ์ˆ˜ ์žˆ์Œ
  • DEL
    • ๋ฌธ์ž์—ด์˜ ๋ช…๋ น์–ด์™€ ๋™์ผํ•˜๊ฒŒ ์ž‘๋™ํ•˜๋ฉฐ ํ•ด๋‹น ํ‚ค์— ์ €์žฅ๋œ ํ•ด์‹œ ์ „์ฒด๋ฅผ ์‚ญ์ œํ•จ
    • DEL company
  • HDEL
    • ํ•ด์‹œ์— ์ €์žฅ๋œ ํ‚ค-๊ฐ’ ์Œ ํ•˜๋‚˜๋ฅผ ์‚ญ์ œ
    • HGETALL company

ํ•ด์‹œ์—์„œ ์ˆซ์ž ๋‹ค๋ฃจ๊ธฐ

  • HINCRBY
    • ํ•ด์‹œ ๋‚ด์˜ ์ˆซ์ž์— ์ •์ˆ˜ ๋”ํ•˜๊ธฐ
    • HINCRBY company age 10
    • ํ•ด์‹œ ๋‚ด์— ์กด์žฌํ•˜์ง€ ์•Š๋Š” ํ‚ค์— HINCRBY๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ํ‚ค๊ฐ€ ์ƒ์„ฑ๋จ
    • ์Œ์ˆ˜ ๊ฐ’์„ ์ „๋‹ฌํ•˜๋ฉด ๊ธฐ์กด ๊ฐ’์—์„œ ๋บ„ ์ˆ˜ ์žˆ์Œ
  • HINCRBYFLOAT
    • ํ•ด์‹œ ๋‚ด์˜ ์ˆซ์ž์— ์‹ค์ˆ˜ ๋”ํ•˜๊ธฐ
    • HINCRBYFLOAT company age 1.005
  • HSTRLEN
    • ํ•ด์‹œ์— ์ €์žฅ๋œ ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๋ฅผ ๊ฐ€์ ธ์˜ด
  • HKEYS
    • ํ•ด์‹œ์˜ ๋ชจ๋“  ํ‚ค ๊ฐ€์ ธ์˜ค๊ธฐ
  • HVALUES
    • ํ•ด์‹œ์˜ ๋ชจ๋“  ๊ฐ’ ๊ฐ€์ ธ์˜ค๊ธฐ

HSET์™€ HGETALL์˜ ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ๋™์ž‘

HSET ๊ด€๋ จ ๋ฌธ์ œ

  • HSET ๋ช…๋ น์–ด์—๋Š” ํ‚ค์™€ ๊ฐ’์ด ๋ฒˆ๊ฐˆ์•„ ๊ฐ€๋ฉฐ ๋ฌธ์ž์—ด๋กœ ์ž‘์„ฑ๋˜์–ด์•ผ ํ•จ
  • node์—์„œ ์ฟผ๋ฆฌ ์ž…๋ ฅ ์‹œ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ๊ทธ๋Œ€๋กœ Redis์— ์ „๋‹ฌํ•˜๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ node-redis๊ฐ€ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•œ ๋‹ค์Œ์— ์ „๋‹ฌํ•จ
  • ์ด ์ฒ˜๋ฆฌ ๊ณผ์ •์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒ๋‹ˆ๋‹ค
    • node-redis๊ฐ€ ํ•˜๋Š” ์ž‘์—…
    • ์˜ค๋ธŒ์ ํŠธ๋ฅผ ๋ฐ›์•„ Redis๊ฐ€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” HSET ๋ช…๋ น์–ด๋กœ ๋ณ€ํ™˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค
    • ๋ฌธ์ž์—ด์„ ๋งŒ๋“ค๊ธฐ ์‹œ์ž‘
    • ํ•ด์‹œ์˜ ํ‚ค ์ด๋ฆ„์ธ car ์ดํ›„์—๋Š” ์ผ๋ฐ˜์ ์ธ HSET ๋ช…๋ น์–ด์ฒ˜๋Ÿผ ํ‚ค์™€ ๊ฐ’์„ ๋ฒˆ๊ฐˆ์•„ ์ž‘์„ฑ => OK
    • ์ด์ œ ๋ฌธ์ž์—ด์— ๊ฐ’์„ ์ž…๋ ฅํ•  ๋•Œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒ
      • ์˜ค๋ธŒ์ ํŠธ ์•ˆ์˜ ๊ฐ’์„ ํ•˜๋‚˜์”ฉ ํ™•์ธํ•ด toString() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•จ (๊ทธ๋Ÿฌ๋‚˜ ๊ฐ’ ์ค‘์— null๊ณผ undefined๊ฐ€ ์žˆ์Œ)
      • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ null ๋˜๋Š” undefined์˜ ํ”„๋กœํผํ‹ฐ๋ฅผ ์•ก์„ธ์Šคํ•˜๋ ค๊ณ  ํ•˜๋ฉด ์ฆ‰์‹œ ํ„ฐ๋ฏธ๋„์— ํ‘œ์‹œ๋˜์—ˆ๋˜ ๊ฒƒ๊ณผ ๊ฐ™์€ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๊ฐ€ ๋ฐ˜ํ™˜ ๋จ
    • node-redis๋กœ๋Š” null ๊ฐ’์„ ์ €์žฅํ•  ์ˆ˜ ์—†์Œ
  • ํ•ด๊ฒฐ๋ฐฉ์•ˆ
    • ๊ฐ’ ์—†๋Š” ์†์„ฑ ์‚ญ์ œ
    • null || ''๋กœ ์ •์˜ํ•ด์„œ ๋นˆ ๋ฌธ์ž์—ด ๋„ฃ๊ธฐ

HGETALL ๊ด€๋ จ ๋ฌธ์ œ

  • ์ด์ƒํ•˜๊ฒŒ ๋™์ž‘ํ•˜๋Š” ์ด์œ  : HGETALL์˜ ๊ธฐ๋ณธ์ ์ธ ํŠน์„ฑ ๋•Œ๋ฌธ
  • Redis์— ์กด์žฌํ•˜์ง€ ์•Š๋Š” ํ‚ค์— ์•ก์„ธ์Šคํ•ด ํ•ด์‹œ๋ฅผ ์ฝ์œผ๋ ค๊ณ  ํ•˜๋ฉด => ๊ธฐ๋ณธ์ ์œผ๋กœ ๋นˆ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ๋ฐ˜ํ™˜ํ•จ {}
  • ํ•ด๊ฒฐ๋ฐฉ์•ˆ
    • if(!car){ํ•ด๋‹น ํ‚ค๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์„ ๋•Œ์˜ ๋™์ž‘} : if๋ฌธ์€ ์ ˆ๋Œ€ ์ถฉ์กฑ๋  ์ˆ˜ ์—†์Œ
    • ์กฐ๊ฑด์„ ์ˆ˜์ •ํ•˜์ž! ๋นˆ ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ๋ฐ˜ํ™˜๋˜์—ˆ๋‹ค๋ฉด ์•„๋งˆ ์›ํ•˜๋˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ์ง€ ๋ชปํ–ˆ์„ ๊ฒƒ์ด๋ฏ€๋กœ ๋”ฐ๋ผ์„œ car ์˜ค๋ธŒ์ ํŠธ์˜ ๊ธธ์ด๋ฅผ ํ™•์ธํ•˜๋ฉด ๋จ
    • ๊ธธ์ด๊ฐ€ 0์ด๋ผ๋ฉด ๋นˆ ์˜ค๋ธŒ์ ํŠธ
    • if(Objet.keys(car).length===0){ํ‚ค ์กด์žฌ ์•ˆํ• ๋•Œ ์›ํ•˜๋Š” ๋™์ž‘}
  • ์ •๋ฆฌ
    • HSET์„ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ์ €์žฅํ•˜๋ ค๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์ฃผ์˜ํ•ด์•ผํ•จ.
    • HGETALL์„ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ์กด์žฌํ•˜์ง€ ์•Š๋Š” ํ‚ค๋ฅผ ๊ฐ€์ ธ์˜ค๋ ค๊ณ  ํ•ด๋„ ํ•ญ์ƒ ๋นˆ ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ๋ฐ˜ํ™˜๋˜๋ฏ€๋กœ ํ™•์ธ ์‹œ ๊ฐ์ฒด์˜ ๊ธธ์ด ํ™•์ธํ•˜๊ธฐ