DB/Redis

[Redis] Redis์˜ ๊ฐœ๋…๊ณผ ํŠน์ง•

giraffe_ 2024. 1. 31. 22:14

 ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ผ๊ณ ๋Š” MySQL, Oracle๊ณผ ๊ฐ™์€ RDBMS๋งŒ ์•Œ๊ณ  ์“ฐ๋˜ ์‹œ์ ˆ.. Redis์— ๋Œ€ํ•ด ‘์บ์‹ฑํ•  ๋•Œ ์“ด๋‹ค, ์ฑ„ํŒ… ์„œ๋ฒ„ ๋งŒ๋“ค ๋•Œ ์“ด๋‹ค, ๋žญํ‚น ์‹œ์Šคํ…œ ๊ตฌํ˜„ํ•  ๋•Œ ์“ด๋‹ค..’ ๋“ฑ์„ ๋“ค์—ˆ๋‹ค. ํ•˜์ง€๋งŒ Redis์— ๋Œ€ํ•ด ์ „ํ˜€ ๋ชจ๋ฅด๊ณ  ์žˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— Redis๋ฅผ ์™œ ์จ์•ผํ•˜๋Š”์ง€๋Š” ์•Œ ์ˆ˜ ์—†์—ˆ๋‹ค.

 

๋„๋Œ€์ฒด Redis๊ฐ€ ๋ฌด์—‡์ด๊ณ , ์–ด๋–ค ํŠน์ง•์„ ๊ฐ€์ง€๊ณ  ์žˆ๊ธธ๋ž˜ Redis๋ฅผ ์“ฐ๋Š” ๊ฒƒ์ผ๊นŒ?

 

 

 

 

โ“ Redis๋ž€?

 

 

 

Redis์— ๋Œ€ํ•ด ์ด๋ ‡๊ฒŒ ํ•œ ์ค„๋กœ ์†Œ๊ฐœํ•  ์ˆ˜ ์žˆ๋‹ค!

 

in-memory ๊ธฐ๋ฐ˜์˜ NoSQL๋กœ, key-value์˜ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค

 

 

 

 

 

NoSQL

 Not Only SQL’๋กœ ‘SQL๋งŒ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค’๋ผ๋Š” ๋œป์œผ๋กœ ๊ธฐ์กด์˜ RDBMS์™€๋Š” ๋‹ค๋ฅธ ๊ตฌ์กฐ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•œ๋‹ค. DBMS(๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค)๋Š” ๋ฐ์ดํ„ฐ ๊ฐ„ ๊ด€๊ณ„๋ฅผ ๊ฐ–๋Š” ํ…Œ์ด๋ธ” ๊ตฌ์กฐ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ , SQL์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•œ๋‹ค. ์ด์™€ ๋‹ฌ๋ฆฌ, NoSQL์€ Document, key-value ๋“ฑ์˜ ๋น„๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ , ๋ณ„๋„์˜ SQL ๋Œ€์‹  ๋ช…๋ น์–ด๋กœ ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•œ๋‹ค.

 

 

in-memory

 ๋ฐ์ดํ„ฐ๋ฅผ ๋””์Šคํฌ๊ฐ€ ์•„๋‹ˆ๋ผ, ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋งํ•œ๋‹ค. ๋””์Šคํฌ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ฒŒ ๋˜๋ฉด, ๋ณ„๋„์˜ I/O(์ž…์ถœ๋ ฅ) ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ณ  ์“ฐ๋Š” ๋ฐ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ๊ฒŒ ๋œ๋‹ค. ๋ฐ˜๋ฉด, ๋ฉ”๋ชจ๋ฆฌ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ฒŒ ๋˜๋ฉด, ๋ฐ”๋กœ ๋ฉ”๋ชจ๋ฆฌ์— ์ ‘๊ทผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ์†๋„๊ฐ€ ๋น ๋ฅด๋‹ค. ํ•˜์ง€๋งŒ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํœ˜๋ฐœ์„ฑ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ์ดํ„ฐ๊ฐ€ ์œ ์‹ค๋  ์ˆ˜ ์žˆ๋‹ค.

 

 

 

NoSQL๊ณผ in-memory๋Š” ์™„์ „ํžˆ ๊ฐ™์€ ๊ฐœ๋…์ด ์•„๋‹ˆ๊ณ , in-memory๋Š” NoSQL์˜ ๋ฐฉ์‹ ์ค‘ ํ•˜๋‚˜๋กœ NoSQL์ด ๋” ํฐ ๊ฐœ๋…์ด๋‹ค.

 

 

 

 

key-value

์ถœ์ฒ˜: https://ko.wikipedia.org/wiki/ํ‚ค-๊ฐ’_๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค

 

 NoSQL์€ Document, Key-value, Graph ๋“ฑ ๋‹ค์–‘ํ•œ ํ˜•ํƒœ์˜ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ์ง€์›ํ•œ๋‹ค. Redis๋Š” ๊ทธ ์ค‘์—์„œ key-value ํ˜•ํƒœ์˜ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ์ง€์›ํ•œ๋‹ค.

 

 Java์—์„œ ์ž์ฃผ ์“ฐ์ด๋Š” ์ž๋ฃŒ๊ตฌ์กฐ Hash์™€ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์ธ JSON, XML์„ ๋– ์˜ฌ๋ฆฌ๋ฉด ๋œ๋‹ค.

 

 

 

 

 

 

๐Ÿ”Ž Redis์˜ ํŠน์ง•

 

1. ์˜์†์„ฑ์„ ์ง€์›ํ•˜๋Š” ์ธ๋ฉ”๋ชจ๋ฆฌ ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ

  • ๋ฐ์ดํ„ฐ์˜ ๋น ๋ฅธ ์ ‘๊ทผ์„ ์œ„ํ•ด ์ธ๋ฉ”๋ชจ๋ฆฌ ์ €์žฅ์†Œ๋ฅผ ์“ด๋‹ค. ํ•˜์ง€๋งŒ ๋ฐ์ดํ„ฐ์˜ ์˜์†์„ฑ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด ๋””์Šคํฌ์— ์ €์žฅํ•œ๋‹ค. ์„œ๋ฒ„์— ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ด๋„ ๋””์Šคํฌ์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ํ†ตํ•ด ๋ณต๊ตฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.

 

2. ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ์ง€์›

  • String, List, Hash, Set, Sorted Set๊ณผ ๊ฐ™์€ ๋‹ค์–‘ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์ง€์›ํ•œ๋‹ค.

 

3. Pub/Sub, TTL(Time To Live)์™€ ๊ฐ™์€ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ ์ œ๊ณต

  • ๋ฉ”์‹œ์ง€๋ฅผ ๊ฒŒ์‹œํ•˜๊ณ , ๊ตฌ๋…์ž์—๊ฒŒ ์ „๋‹ฌํ•˜๋Š” ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋˜๋Š”, ํŠน์ • ๊ธฐ๊ฐ„ ๋’ค์— ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•˜๋„๋ก ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

4. ๋ถ„์‚ฐํ™˜๊ฒฝ์—์„œ ์•ˆ์ •์ ์ธ ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ ๊ฐ€๋Šฅ

 

5. ๋ช…๋ น์–ด๋ฅผ ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ๋กœ ํ•˜๋‚˜์”ฉ ์ฒ˜๋ฆฌ

 

6. C, Java, Python ๋“ฑ์˜ ๋‹ค์–‘ํ•œ ์–ธ์–ด ํ™˜๊ฒฝ์—์„œ ๊ฐœ๋ฐœ ๊ฐ€๋Šฅ

 

 

 

 

 

Redis์˜ ํ™œ์šฉ

1. ์บ์‹ฑ

 ๋นˆ๋ฒˆํ•œ ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ž„์‹œ๋กœ Redis์— ์ €์žฅํ•ด์„œ ๋™์ผํ•œ ๋ฐ์ดํ„ฐ ์š”์ฒญ์ด ๋“ค์–ด์™”์„ ๋•Œ, ์ €์žฅํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ํ•  ์ˆ˜ ์žˆ๋‹ค. ์บ์‹œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์„ฑ๋Šฅ์ด ํ–ฅ์ƒ๋œ๋‹ค.

 

2. ์‹ค์‹œ๊ฐ„ ์ˆœ์œ„ํ‘œ

 RDBMS๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ๋งŽ์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ •๋ ฌํ•˜๊ณ  ์ง‘๊ณ„ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐ ์‹œ๊ฐ„์ด ์˜ค๋ž˜๊ฑธ๋ฆฌ๊ฒŒ ๋œ๋‹ค. Redis์—์„œ ์ง€์›ํ•˜๋Š” Sorted Set์„ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ๋น ๋ฅธ ์†๋„๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

 

3. ์ฑ„ํŒ…

 Redis์—์„œ ์ง€์›ํ•˜๋Š” Pub/Sub ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค๋ฅผ ํ†ตํ•ด ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ฉ”์‹œ์ง€๋ฅผ ์ฃผ๊ณ ๋ฐ›๋„๋ก ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

4. ์„ธ์…˜ ๊ด€๋ฆฌ

 ์‚ฌ์šฉ์ž์˜ ์„ธ์…˜์— ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ๋ฐ Redis์˜ TTL ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•ด ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๊ณ , ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ์„ฑ๋Šฅ์„ ๋†’์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

 

 

 

 

 

 

๐Ÿ“š ์ฐธ๊ณ