REDIS

์ •์Šน์›ยท2023๋…„ 5์›” 2์ผ
0
post-thumbnail

๐Ÿ“’ ๋ชฉ์ฐจ

  • ๐Ÿ“Œ Redis๋ž€?
  • ๐Ÿ“Œ Redis์˜ ํŠน์ง•
  • ๐Ÿ“Œ Redis vs Memcached
  • ๐Ÿ“Œ Cache-Aside ํŒจํ„ด๊ณผ Write-Back ํŒจํ„ด

๐Ÿ“Œ Redis๋ž€?

Redis๋Š” Memcached์™€ ๋น„์Šทํ•œย ์บ์‹œ ์‹œ์Šคํ…œ์œผ๋กœ์„œ ๋™์ผํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋ฉด์„œ ์˜์†์„ฑ, ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์™€ ๊ฐ™์€ ๋ถ€๊ฐ€์ ์ธ ๊ธฐ๋Šฅ์„ ์ง€์›ํ•˜๊ณ  ์žˆ๋‹ค.

๋ ˆ๋””์Šค๋Š” ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ•˜๊ณ  ์กฐํšŒํ•œ๋‹ค.
์ฆ‰,ย ์ธ๋ฉ”๋ชจ๋ฆฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šคย ์ด๋‹ค.

์ด ๋ง๋งŒ ๋“ค์œผ๋ฉด Redis์— ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ•˜๋Š” ๋น ๋ฅธ DB์ผ ๋ฟ์ด๋ผ๊ณ  ์ƒ๊ฐํ• ์ง€๋„ ๋ชจ๋ฅธ๋‹ค. ํ•˜์ง€๋งŒ, ๋น ๋ฅธ ์„ฑ๋Šฅ์€ ๋ ˆ๋””์Šค์˜ ํŠน์ง• ์ค‘ ์ผ๋ถ€๋ถ„์ด๋ฉฐ, ๋‹ค๋ฅธ ์ธ๋ฉ”๋ชจ๋ฆฌ ๋””๋น„๋“ค๊ณผ์˜ ๊ฐ€์žฅ ํฐ ์ฐจ์ด์ ์€ย ๋ ˆ๋””์Šค์˜ ๋‹ค์–‘ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค.

์ด๋ ‡๊ฒŒ ๋‹ค์–‘ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์ง€์›ํ•˜๊ฒŒ ๋˜๋ฉดย ๊ฐœ๋ฐœ์˜ ํŽธ์˜์„ฑ์ด ์ข‹์•„์ง€๊ณ  ๋‚œ์ด๋„๊ฐ€ ๋‚ฎ์•„์ง„๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ์–ด๋–ค ๋ฐ์ดํ„ฐ๋ฅผ ์ •๋ ฌ ํ•  ๋•Œ, DBMS๋ฅผ ์ด์šฉํ•œ๋‹ค๋ฉด DB์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ , ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ •๋ ฌํ•˜์—ฌ ๋‹ค์‹œ ์ฝ์–ด์˜ค๋Š” ๊ณผ์ •์€ ๋””์Šคํฌ์— ์ง์ ‘ ์ ‘๊ทผ์„ ํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‹œ๊ฐ„์ด ๋” ๊ฑธ๋ฆฐ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค.

ํ•˜์ง€๋งŒ ์ด ๋•Œย In-Memoryย ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์ธย Redis๋ฅผ ์ด์šฉํ•˜๊ณ  ๋ ˆ๋””์Šค์—์„œ ์ œ๊ณตํ•˜๋Š”ย Sorted-Set์ด๋ผ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋” ๋น ๋ฅด๊ณ  ๊ฐ„๋‹จํ•˜๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ •๋ ฌํ•  ์ˆ˜ ์žˆ๋‹ค. ์ฆ‰, ๋ ˆ๋””์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด ์—ฌ๋Ÿฌ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ž‘์—…์„ ํšจ์œจ์ ์œผ๋กœ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ“Œ Redis์˜ ํŠน์ง•

๋ ˆ๋””์Šค(Redis, Remote Dictionary Server)์˜ ์ฃผ์š” ํŠน์ง•์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

  • ์˜์†์„ฑ์„ ์ง€์›ํ•˜๋Š” ์ธ๋ฉ”๋ชจ๋ฆฌ ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ
  • ์ฝ๊ธฐ ์„ฑ๋Šฅ ์ฆ๋Œ€๋ฅผ ์œ„ํ•œ ์„œ๋ฒ„ ์ธก ๋ณต์ œ๋ฅผ ์ง€์›
  • ์“ฐ๊ธฐ ์„ฑ๋Šฅ ์ฆ๋Œ€๋ฅผ ์œ„ํ•œ ํด๋ผ์ด์–ธํŠธ ์ธก ์ƒค๋”ฉ(Sharding) ์ง€์›
  • ๋‹ค์–‘ํ•œ ์„œ๋น„์Šค์—์„œ ์‚ฌ์šฉ๋˜๋ฉฐ ๊ฒ€์ฆ๋œ ๊ธฐ์ˆ 
  • ๋ฌธ์ž์—ด, ๋ฆฌ์ŠคํŠธ, ํ•ด์‹œ, ์…‹, ์ •๋ ฌ๋œ ์…‹๊ณผ ๊ฐ™์€ ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐํ˜•์„ ์ง€์›. ๋ฉ”๋ชจ๋ฆฌ ์ €์žฅ์†Œ์ž„์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ๋งŽ์€ ๋ฐ์ดํ„ฐํ˜•์„ ์ง€์›ํ•˜๋ฏ€๋กœ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„

์ฆ‰, Redis๋ฅผ ํ•œ์ค„๋กœ ์ •๋ฆฌํ•˜์ž๋ฉด, ๊ณ ์„ฑ๋Šฅ ํ‚ค-๊ฐ’ ์ €์žฅ์†Œ๋กœ์„œ Stirng , list, hash, set, sorted setํ˜•์‹์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ง€์›ํ•˜๋Š” NoSQL์ด๋‹ค.

๐Ÿ“Œ Redis vs Memcached

Redis ์ด์ „ ๋ฒ„์ „์œผ๋กœ๋Š” Memcached๊ฐ€ ์žˆ๋‹ค.

โœ… Redis์™€ Memcached ๊ณตํ†ต์ 

  1. 1ms ์ดํ•˜์˜ ์‘๋‹ต๋Œ€๊ธฐ์‹œ๊ฐ„

1ms ์ดํ•˜์˜ ์‘๋‹ต์‹œ๊ฐ„์„ ์ œ๊ณตํ•œ๋‹ค. ๋ฐ์ดํ„ฐ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ๋””์Šคํฌ ๊ธฐ๋ฐ˜์˜ ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค๋ณด๋‹ค ๋น ๋ฅด๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์„ ์ˆ˜ ์žˆ๋‹ค.

  1. ๊ฐœ๋ฐœ์˜ ์šฉ์ด์„ฑ

๋ฌธ๋ฒ•์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฝ๊ณ , ๊ฐœ๋ฐœ์ฝ”๋“œ ์–‘ ๋˜ํ•œ ์ ๋‹ค.

  1. ๋ฐ์ดํ„ฐ ํŒŒํ‹ฐ์…”๋‹

๋ฐ์ดํ„ฐ๋ฅผ ์—ฌ๋Ÿฌ ๋…ธ๋“œ์— ๋ถ„์‚ฐํ•˜์—ฌ ์ €์žฅ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ˆ˜์š”๊ฐ€ ์ฆ๊ฐ€ํ•  ๋•Œ ๋” ๋งŽ์€ ๋ฐ์ดํ„ฐ๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•˜์—ฌ ์Šค์ผ€์ผ์•„์›ƒ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

  1. ๋‹ค์–‘ํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด ์ง€์›

์—ฌ๋Ÿฌ ๊ฐœ๋ฐœ์–ธ์–ด๋ฅผ ์ง€์›ํ•œ๋‹ค. ์ž๋ฐ”, ํŒŒ์ด์ฌ, C, C++, C#, JavaScript, Node.Js, Ruby, Go ๊ทธ๋ฆฌ๊ณ  ๋‹ค๋ฅธ ์–ธ์–ด๋“ค์„ ์ง€์›ํ•œ๋‹ค.

โœ… Memcached๋งŒ์˜ ํŠน์ง•

๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ๋ฅผ ์ง€์›ํ•˜๊ธฐ ๋•Œ๋ฌธ์—,ย ๋ฉ€ํ‹ฐํ”„๋กœ์„ธ์Šค์ฝ”์–ด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ, ์Šค์ผ€์ผ ์—…์„ ํ†ตํ•˜์—ฌ ๋”์šฑ ๋งŽ์€ ์ž‘์—…์ฒ˜๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋‹ค.

โœ… Redis๋งŒ์˜ ํŠน์ง•

1. ๋”์šฑ ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ

๋ฌธ์ž์—ด ๋ฟ๋งŒ ์•„๋‹ˆ๋ผย List,ย Set,ย ์ •๋ ฌ๋œ Set,ย Hash,ย Bit ๋ฐฐ์—ด,ย hyperloglogsย (๋งค์šฐ ์ ์€ ๋ฉ”๋ชจ๋ฆฌ๋กœ ์ง‘ํ•ฉ์˜ ๊ฐœ์ˆ˜๋ฅผ ์ถ”์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•)์„ ์ง€์›ํ•œ๋‹ค. ํ”„๋กœ๊ทธ๋žจ์—์„œ ์œ„์˜ ๋‹ค์–‘ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด,ย Sorted Set์„ ํ™œ์šฉํ•˜์—ฌ ๊ฒŒ์ž„์œ ์ €์˜ ์ƒ์œ„๋žญํฌ ์ •๋ณด๋ฅผ ์‰ฝ๊ฒŒ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋‹ค.

2. Snapshots

๋ ˆ๋””์Šค๋Š” ํŠน์ •์‹œ์ ์— ๋ฐ์ดํ„ฐ๋ฅผ ๋””์Šคํฌ์— ์ €์žฅํ•˜์—ฌ ํŒŒ์ผ ๋ณด๊ด€์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ, ์žฅ์•  ์ƒํ™ฉ์‹œ ๋ณต๊ตฌ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

3. ๋ณต์ œ

Master โ€” Salvesย ๊ตฌ์กฐ๋กœ, ์—ฌ๋Ÿฌ๊ฐœ์˜ ๋ณต์ œ๋ณธ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ฝ๊ธฐ๋ฅผ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋†’์€ ๊ฐ€์šฉ์„ฑ(์˜ค๋žœ ์‹œ๊ฐ„๋™์•ˆ ๊ณ ์žฅ๋‚˜์ง€ ์•Š์Œ) ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

3. ํŠธ๋žœ์ ์…˜

ํŠธ๋ Œ์ ์…˜์ด๋ž€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝ์‹œํ‚ค๋Š” ์ž‘์—… ๋‹จ์œ„๋ฅผ ์˜๋ฏธํ•˜๊ณ , ์›์ž์„ฑ, ์ผ๊ด€์„ฑ, ๋…๋ฆฝ์„ฑ, ์ง€์†์„ฑ์˜ ํŠน์ง•์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. Redis๋Š” ์ด๋Ÿฌํ•œ ํŠน์ง•์„ ์ง€์›ํ•œ๋‹ค.

4. Pub / Sub messaging

Publish(๋ฐœํ–‰)๊ณผ Sub(๊ตฌ๋…)๋ฐฉ์‹์˜ ๋ฉ”์‹œ์ง€๋ฅผ ํŒจํ„ด ๊ฒ€์ƒ‰์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ๋”ฐ๋ผ์„œ ๋†’์€ ์„ฑ๋Šฅ์„ ์š”๊ตฌํ•˜๋Š” ์ฑ„ํŒ…, ์‹ค์‹œ๊ฐ„ ์ŠคํŠธ๋ฆฌ๋ฐ, SNS ํ”ผ๋“œ ๊ทธ๋ฆฌ๊ณ  ์„œ๋ฒ„์ƒํ˜ธํ†ต์‹ ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

5. ๋ฃจ์•„ ์Šคํฌ๋ฆฝํŠธ ์ง€์›

๋งค์šฐ ๊ฒฝ๋Ÿ‰ํ™”๋œ ์ ˆ์ฐจ์Šคํฌ๋ฆฝํŠธ ์–ธ์–ด์ธ ๋ฃจ์•„๋ฅผ ์ง€์›ํ•œ๋‹ค. eval ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฃจ์•„์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ, ํ”„๋กœ๊ทธ๋žจ์„ ๋ช…๋ฃŒํ•˜๊ฒŒํ•˜๊ณ  ์„ฑ๋Šฅ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค.

6. ์œ„์น˜๊ธฐ๋ฐ˜ ๋ฐ์ดํ„ฐ ํƒ€์ž… ์ง€์›

Redis๋Š” ์‹ค์‹œ๊ฐ„ ์œ„์น˜๊ธฐ๋ฐ˜๋ฐ์ดํ„ฐ๋ฅผ ์ง€์›ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ, ๋‘ ์œ„์น˜์˜ ๊ฑฐ๋ฆฌ๋ฅผ ์ฐพ๊ฑฐ๋‚˜, ์‚ฌ์ด์— ์žˆ๋Š” ์š”์†Œ ์ฐพ๊ธฐ๋“ฑ์˜ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋ง›์ง‘, ๊ธธ์ฐพ๊ธฐ ๊ทธ๋ฆฌ๊ณ  ์ง€๋„๊ธฐ๋ฐ˜์˜ ๊ณ ์„ฑ๋Šฅ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ“Œ Cache-Aside ํŒจํ„ด๊ณผ Write-Back ํŒจํ„ด

Cache-Aside ํŒจํ„ด๊ณผ Write-Back ํŒจํ„ด์€ Redis์—์„œ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ํŒจํ„ด์ด๋‹ค.

โœ… Cache-Aside ํŒจํ„ด (๋น ๋ฅธ ๊ฒ€์ƒ‰์šฉ)

  • ๊ฒ€์ƒ‰ ์‹œ Redis์—์„œ ๋จผ์ € ์ฐพ์•„๋ณด๊ณ  Redis์— ์ €์žฅ๋œ ๋‚ด์šฉ์ด ์žˆ๋‹ค๋ฉด ์ €์žฅ๋œ ์ •๋ณด๋ฅผ ๋ฐ”๋กœ ๋ณด์—ฌ์ฃผ๊ณ 
    ์—†๋‹ค๋ฉด MySQL์—์„œ ์ •๋ณด๋ฅผ ๋ณด์—ฌ์ค€ ๋‹ค์Œ ๊ฒ€์ƒ‰๋œ ๋‚ด์šฉ์„ redis์— ์ €์žฅ
    ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

  • Cache-AsideํŒจํ„ด๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ๊ฐ™์€ ๋‚ด์šฉ์˜ 2๋ฒˆ์งธ ๊ฒ€์ƒ‰๋ถ€ํ„ฐ๋Š” redis์— ์ €์žฅ๋œ ์ •๋ณด๋ฅผ ๋ณด์—ฌ์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ์†๋„๊ฐ€ ๋นจ๋ผ์ง„๋‹ค.

โœ… Write-Back ํŒจํ„ด(์ž„์‹œ์ €์žฅ์šฉ)

  • redis์— ๋จผ์ € ์ž„์‹œ ์ €์žฅํ•ด๋†“์€ ๋’ค Database์— ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

  • ๋””์Šคํฌ ๊ธฐ๋ฐ˜์˜ Database์— ์ €์žฅํ•ด์•ผํ•  ๋ฐ์ดํ„ฐ ์–‘์ด ๋งŽ์€ ๊ฒฝ์šฐ ๋””์ŠคํฌI/O(์†๋„๊ฐ€ ๋Š๋ฆฐ ํ˜„์ƒ)๊ฐ€
    ๋ฐœ์ƒํ•˜๊ฒŒ ๋˜๋Š”๋ฐ ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด Write-Back ํŒจํ„ด์„ ์‚ฌ์šฉํ•œ๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€