[Redis] Remote Dictionary Server ๋ž€ ?

๋‚˜๋‚˜'s Brainยท2023๋…„ 8์›” 30์ผ
0

๊ฐœ๋…Study

๋ชฉ๋ก ๋ณด๊ธฐ
3/21
post-thumbnail

๐Ÿšจ [Redis]

๐Ÿ‘จโ€๐Ÿ’ป Redis ์˜คํ”ˆ์†Œ์Šค๋Š” Remote(์™ธ๋ถ€) Dictionary(ํ‚ค-๊ฐ’) Server์˜ ์•ฝ์–ด๋กœ, ์ „์„ธ๊ณ„์ ์œผ๋กœ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๋Š” In-memory cache ์†”๋ฃจ์…˜์ด๋‹ค.

์ฆ‰, ์˜คํ”ˆ์†Œ์Šค ๋น„๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ฆฌ์‹œ์Šคํ…œ(dbms)

  • ๋ฉ”๋ชจ๋ฆฌ ๊ธฐ๋ฐ˜- nosql cache
  • ์˜๊ตฌ์ ๋ณด์กด
  • ์—ฌ๋Ÿฌ๋Œ€์˜ ์„œ๋ฒ„๊ตฌ์„ฑ
  • ์„ฑ๋Šฅ ์ดˆ๋‹น 2๋งŒ~10๋งŒํšŒ ์ˆ˜ํ–‰. key/value ์ €์žฅ ๋ฐฉ์‹ json์ฒ˜๋ฆฌ์— ์œ ๋ฆฌ
  • ๋ถ€ํ•˜๊ฐ€ ๋งŽ์„๊ฒฝ์šฐ ์บ์‹œ๋ฅผ ํ†ตํ•ด์„œ db read ๊ฐ์†Œ
  • ๋ฐฑ์—… :
    1) ์„œ๋ฒ„ ๋ฉ”๋ชจ๋ฆฌ์— ๋ณต์‚ฌ๋ณต์ €์žฅ
    2) ๋””์Šคํฌ์— ์ €์žฅ
    ํ˜•ํƒœ:
    String/lists/sets/sorted sets/hashs mysql์˜ 10๋ฐฐ
    ๋‹จ์ :
    ๋ฉ”๋ชจ๋ฆฌ์‚ฌ์šฉ๋Ÿ‰์ด sql๋ณด๋‹ค ํฌ๋ฉฐ, node์ฒ˜๋Ÿผ sing thread tree ๊ตฌ์กฐ์ฒ˜๋Ÿผ ์ž์‹ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ƒ๊น€
    ํฐ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ์‹œ, ์›๋ž˜ ์†๋„๋ณด๋‹ค ์ ๊ฒŒ ๋‚˜์˜ค๋ฏ€๋กœ ๋ฉ”๋ชจ๋ฆฌ ํŒŒํŽธํ™”๋กœ ์ธํ•ด ์‘๋‹ต์ด ๋Šฆ์–ด์งˆ์ˆ˜์žˆ๋‹ค.

๐Ÿ“Œ 1) Redis๋Š” NoSQL์˜ ํ•œ ์ข…๋ฅ˜

RDBMS๋ฅผ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ผ๊ณ  ๋ถ€๋ฅด๋ฉด, NOSQL์€ ๋น„๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์ด๋‹ค. RDBMS์™€ ๋‹ค๋ฅธ ํ˜•ํƒœ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ฒŒ ๋œ๋‹ค.

*NOSQL: Not Only SQL, ๋น„๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค

์ด๋Ÿฌํ•œ NoSQL์€ ์•„์ฃผ ๋งŽ์€ ์–‘์˜ ๋ฐ์ดํ„ฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•ด์•ผํ•  ๋•Œ, ๋ฐ์ดํ„ฐ์˜ ๋ถ„์‚ฐ์ฒ˜๋ฆฌ, ๋น ๋ฅธ ์“ฐ๊ธฐ ๋ฐ ๋ฐ์ดํ„ฐ์˜ ์•ˆ์ •์„ฑ์ด ํ•„์š”ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

๐Ÿ“Œ 2) REDIS ํŠน์ง• & ์žฅ์ 

1) In-memory ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ : ๋””์Šคํฌ๊ฐ€ ์•„๋‹Œ ๋ฉ”๋ชจ๋ฆฌ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ์•ˆ์— ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋“ค์ด ์žˆ๋‹ค. List, Set, Hash, Map ๋“ฑ์˜ ์œ ํ˜•๋“ค์„ ์ธ ๋ฉ”๋ชจ๋ฆฌ ์•ˆ์— ์ €์žฅ ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ฆ‰, Database๋ณด๋‹ค ๋” ๋น ๋ฅธ Memory์— ๋” ์ž์ฃผ์ ‘๊ทผํ•˜๊ณ  ๋œ ์ž์ฃผ ๋ฐ”๋€Œ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜์ž๋ผ๋Š” ์˜๋ฏธ๋ฅผ ๋‹ด๊ณ ์žˆ๋‹ค.

2) ๋””์Šคํฌ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•œ ๊ฒƒ๊ณผ๋Š” ๋‹ฌ๋ฆฌ ์„œ๋ฒ„์˜ ์ฃผ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ•˜์—ฌ ๋””์Šคํฌ์— ์•ก์„ธ์Šค ํ•ด์•ผํ•  ํ•„์š”๋ฅผ ์—†์• ์„œ ๊ฒ€์ƒ‰ ์‹œ๊ฐ„์œผ๋กœ ์ธํ•œ ์ง€์—ฐ์„ ๋ฐฉ์ง€ํ•˜๊ณ  CPU๋ช…๋ น์„ ์ ๊ฒŒ ์‚ฌ์šฉํ•˜๋Š” ์ข€ ๋” ๊ฐ„๋‹จํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ๋ฐ์ดํ„ฐ์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋‹ค.

3) ๊ฐœ๋ฐœ๊ณผ ์šด์˜์„ ์ข€ ๋” ์‰ฝ๊ฒŒ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, Pub/Sub ์‚ฌ์šฉํ•˜์—ฌ ๋ฉฉ์‹œ์ง• ์‹œ์Šคํ…œ์— ์œ ์šฉํ•˜๋ฉฐ ๋ถˆํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฑ„์šฐ์ง€ ์•Š๊ฒŒํ•˜๋Š” ๋ฐ ์œ ์šฉํ•˜๋‹ค.

4) ์บ์‹œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์†๋„๊ฐ€ ๋น ๋ฅด๊ณ  ์ •๋ณด๊ฐ€ ์‚ฌ๋ผ์ง€์ง€ ์•Š๋Š”๋‹ค

5) ๋‹ค์ˆ˜ ์–ธ์–ด๋ฅผ ์ง€์›ํ•œ๋‹ค.
redis๋Š” NoSQL ์ค‘์—์„œ๋„ Key-Value ํ˜•์‹์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋ฉฐ, ํฌ๊ฒŒ 5๊ฐ€์ง€(String, Set, Sorted Set, Hash, List)์˜ ๋ฐ์ดํ„ฐ ํ˜•์‹์„ ์ง€์›ํ•œ๋‹ค.


๐Ÿท๏ธ Redis ์žฅ์ 

1) ๋ฆฌ์ŠคํŠธ, ๋ฐฐ์—ด๊ณผ ๊ฐ™์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š”๋ฐ ์œ ์šฉํ•˜๋‹ค.
String, List, Set, Sorted set, Hash ๋“ฑ MySQL์— ๋น„ํ•ด์„œ 10๋ฐฐ ์ •๋„ ๋น ๋ฅด๋‹ค๊ณ  ํ•œ๋‹ค.

2) ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ™œ์šฉํ•˜๋ฉด์„œ ์˜์†์ ์ธ ๋ฐ์ดํ„ฐ ๋ณด์กด์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
๋ช…๋ น์–ด๋กœ ๋ช…์‹œ์ ์œผ๋กœ ์‚ญ์ œ(Expires)๋ฅผ ์„ค์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ญ์ œ๋˜์ง€ ์•Š๋Š”๋‹ค.
๋””์Šคํฌ์— ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋กํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋‚ ๋ผ๊ฐ€๋„ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณต๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค.

3) ์„œ๋ฒ„ ํ•˜๋‚˜์— ์—ฌ๋Ÿฌ๊ฐœ์˜ ์„œ๋ฒ„๋ฅผ ๋„์šฐ๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
Master - Slave ํ˜•์‹์œผ๋กœ ๊ตฌ์„ฑ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
Master Sserver๊ฐ€ Down ๋˜์–ด๋„ Slave Server๋กœ ์ ‘์†ํ•˜๋ฉด ๋ฐ”๋กœ ์„œ๋น„์Šค๋ฅผ ๊ณ„์†ํ•  ์ˆ˜ ์žˆ๋‹ค.

4) Memcached ๋ณด๋‹ค ๋‹ค์–‘ํ•œ API๋ฅผ ์ง€์›ํ•œ๋‹ค.
Memcached์—์„œ๋Š” ์—ฌ๋Ÿฌ๊ฐœ์˜ ์บ์‹œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š”๊ฑด ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ์—ฌ๋Ÿฌ๊ฐœ์˜ ์บ์‹œ ๋ฐ์ดํ„ฐ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋Š” API๋Š” ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค.
Memcached๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์—…๋ฐ์ดํŠธ ํ•ด์•ผํ•˜๋Š” ๋ฐ์ดํ„ฐ ์–‘๋งŒํผ set API๋ฅผ ํ˜ธ์ถœํ•ด์•ผ ํ•œ๋‹ค.

๐Ÿท๏ธ Redis ๋‹จ์ 

1) ๋” ๋งŽ์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค.
์‹ค์ œ๋กœ ํ•„์š”ํ•œ ๋ฉ”๋ชจ๋ฆฌ ์–‘๋ณด๋‹ค ๋” ๋งŽ์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค.

2) ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์‘๋‹ต์†๋„์˜ ๋ถˆ์•ˆ์ •์„ฑ
๋Œ€๊ทœ๋ชจ ํŠธ๋ž˜ํ”ฝ์œผ๋กœ ์ธํ•ด ๋งŽ์€ ๋ฐ์ดํ„ฐ๊ฐ€ ์—…๋ฐ์ดํŠธ๋˜๋ฉด
Redis๋Š” Memcached์— ๋น„ํ•ด์„œ ์†๋„๊ฐ€ ๋ถˆ์•ˆ์ •ํ•˜๋‹ค.

๐Ÿท๏ธ ์ฃผ์˜ํ•ด์•ผํ• ์ 

Single Thread ์„œ๋ฒ„ ์ด๋ฏ€๋กœ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ณ ๋ คํ•ด์•ผํ•œ๋‹ค.
In-memory ํŠน์„ฑ์ƒ ๋ฉ”๋ชจ๋ฆฌ ํŒŒํŽธํ™”, ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ๋“ฑ์˜ ์ดํ•ด๊ฐ€ ํ•„์š”ํ•˜๋‹ค.


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

    Redis๊ฐ€ ์‹คํ–‰์ค‘์ธ ์„œ๋ฒ„๊ฐ€ ์ถฉ๋Œํ•˜๋Š” ๊ฒฝ์šฐ ์žฅ์•  ์กฐ์น˜ ์ฒ˜๋ฆฌ์™€ ํ•จ๊ป˜ ๋” ๋†’์€ ์ฝ๊ธฐ ์„ฑ๋Šฅ์„ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด slave๊ฐ€ master์— ์—ฐ๊ฒฐํ•˜๊ณ , ์ „์ฒด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ดˆ๊ธฐ ๋ณต์‚ฌ๋ณธ์„ ๋ฐ›๋Š” master/slave ๋ณต์ œ๋ฅผ ์ง€์›ํ•œ๋‹ค. ๋งˆ์Šคํ„ฐ์—์„œ ์“ฐ๊ธฐ๊ฐ€ ์ˆ˜ํ–‰๋˜๋ฉด slave ๋ฐ์ดํ„ฐ ์„ธํŠธ๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์—…๋ฐ์ดํŠธํ•˜๊ธฐ ์œ„ํ•ด ์—ฐ๊ฒฐ๋œ ๋ชจ๋“  slave๋กœ ์ „์†ก๋œ๋‹ค.

  • ์“ฐ๊ธฐ ์„ฑ๋Šฅ ์ฆ๋Œ€๋ฅผ ์œ„ํ•œ ํด๋ผ์ด์–ธํŠธ ์ธก ์ƒค๋”ฉ(Sharding)์„ ์ง€์›ํ•œ๋‹ค.

    *์ƒค๋”ฉ(Sharding): ํŒŒํ‹ฐ์…”๋‹(Partitionong)๊ณผ ๋™์ผํ•˜๋‹ค. ๊ฐ™์€ ํ…Œ์ด๋ธ” ์Šคํ‚ค๋งˆ๋ฅผ ๊ฐ€์ง„ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์ˆ˜์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋ถ„์‚ฐํ•˜์—ฌ ์ €์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์˜๋ฏธํ•œ๋‹ค.

  • ๋ฆฌ์ŠคํŠธ, ๋ฐฐ์—ด๊ฐ™์€ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ์— ์œ ์šฉํ•˜๋‹ค.
  • ๋ฆฌ์ŠคํŠธํ˜• ๋ฐ์ดํ„ฐ ์ž…๋ ฅ๊ณผ ์‚ญ์ œ๊ฐ€ MySQL์— ๋น„ํ•ด์„œ 10๋ฐฐ์ •๋„ ๋น ๋ฅด๋‹ค.

๐Ÿ“Œ 3) Redis ๊ธฐ๋ณธ์‚ฌ์šฉ๋ฒ•

redis ์„œ๋ฒ„ ๊ตฌ๋™์‹œ protected mode๋ฅผ no๋กœ ํ•˜๋ฉด bind ip์—†์ด ip/port ์ ‘์†๊ฐ€๋Šฅ

Redis๋Š” RDB, AOF ๋ฐฉ์‹์œผ๋กœ ์‹คํ–‰ ๊ฐ€๋Šฅ

  • RDB : ํŠน์ •ํ•œ ์‹œ๊ฐ„๋งˆ๋‹ค ๋ฉ”๋ชจ๋ฆฌ์— ์žˆ๋Š” ๋ ˆ๋””์Šค ๋ฐ์ดํ„ฐ ์ „์ฒด๋ฅผ ๋””์Šคํฌ์— ์ €์žฅ.
  • AOF : Append Only File๋กœ ๋ช…๋ น์ด ์‹คํ–‰๋ ๋•Œ ๋งˆ๋‹ค ๊ธฐ๋ก.

Redis์˜ ํŠธ๋žœ์žญ์…˜ ๊ธฐ๋Šฅ
๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์ฐจ์ด๊ฐ€ ์žˆ์Œ. ํŠธ๋žœ์ ์…˜ ์ฟผ๋ฆฌ์ค‘ ์ž๋™ ๋กค๋ฐฑ(rollback)์ด ์•„๋‹Œ ๋ฌดํšจํ™”๋งŒ ์กด์žฌ. ํŠธ๋žœ์žญ์…˜์œผ๋กœ ๋ฌถ์–ด ๋†“์€ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋™์•ˆ ๋‹ค๋ฅธ ์ปค๋‚ต์…˜์œผ๋กœ ๋ถ€ํ„ฐ์˜ ์ฟผ๋ฆฌ ์š”์ฒญ์€ ๋Œ€๊ธฐ.

์—„๋ฐ€ํžˆ ๋งํ•ด ๋ช…๋ น์–ด Queue์— ๊ฐ์ข… command๋ฅผ ๋„ฃ์–ด๋†“๋Š”๊ฒƒ์ด๋ผ ๋ณด๋ฉด ์ข‹์Œ

  • multi : ํŠธ๋žœ์žญ์…˜ ์‹œ์ž‘

  • discard : ํ์— ์ ์žฌ๋œ ๋‚ด์šฉ์„ ์‹คํ–‰ํ•˜์ง€ ์•Š๊ณ  ์‚ญ์ œ

  • exec : ํ์— ์ ์žฌ๋œ ์š”์ฒญ ๋‚ด์šฉ๋“ค์„ ์‹คํ–‰

  • watch : ๋ณ€๊ฒฝ ๊ฐ์‹œ ๊ธฐ๋Šฅ ํ™œ์„ฑํ™”

  • unwatch : ๋ณ€๊ฒฝ๊ฐ์‹œ ๊ธฐ๋Šฅ ๋น„ํ™œ์„ฑํ™”


Redis๋Š” ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ์ง‘ํ•ฉ์„ ์ œ๊ณตํ•˜๊ณ  ์žˆ๋‹ค. DB-Engines Ranking of Key-value Stores์— ๋”ฐ๋ฅด๋ฉด, Redis๋Š” ํ˜„์žฌ ๊ฐ€์žฅ ์ธ๊ธฐ ์žˆ๋Š” key-value store๋กœ์จ, BSD ๋ผ์ด์„ ์Šค๋ฅผ ๋ณด์œ ํ•˜๊ณ  ์ตœ์ ํ™”๋œ C์–ธ์–ด ์ฝ”๋“œ๋กœ ์ž‘์„ฑ๋˜์–ด ์žˆ์œผ๋ฉฐ, ๋‹ค์–‘ํ•œ ๊ฐœ๋ฐœ ์–ธ์–ด๋ฅผ ์ง€์›ํ•˜๊ณ  ์žˆ๋‹ค. ์ฃผ์š” Redis ์‚ฌ์šฉ ์‚ฌ๋ก€๋Š” caching, ์„ธ์…˜ ๊ด€๋ฆฌ, pub/sub, ์ˆœ์œ„ํ‘œ ๋“ฑ์ด ์žˆ๋‹ค.

Redis๋Š” ์˜๊ตฌ์ ์œผ๋กœ ์ €์žฅํ•˜๋Š” AOF/RDB ๋ฐฉ์‹์˜ Redis DB๋ฐฑ์—…์šฉ๋„๋กœ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ์œผ๋ฉฐ, ์ฃผ๋กœ In-memory cache ๋‹ค ๋ณด๋‹ˆ ์ €์žฅ cache ์šฉ๋„๋กœ ๋งŽ์ด ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๋‹ค. Redis๋Š” ์‹œ์Šคํ…œ ์„ฑ๋Šฅ์„ ๋†’์ด๋Š”๋ฐ ๋งŽ์€ ์—ญํ• ์„ ํ•˜๋Š” ์ข‹์€ ์†”๋ฃจ์…˜์ด์ง€๋งŒ, Redis๋ผ๋Š” ์†”๋ฃจ์…˜์€ ๋ฉ”๋ชจ๋ฆฌ ์ธก๋ฉด์—์„œ ์ œ๋Œ€๋กœ ๊ด€๋ฆฌํ•˜์ง€ ์•Š์œผ๋ฉด ์žฅ์• ๋กœ ์ด์–ด์ง€๊ธฐ๋„ ํ•œ๋‹ค. Redis๋Š” ๋ฉ”๋ชจ๋ฆฌ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฌผ๋ฆฌ๋ฉ”๋ชจ๋ฆฌ(RAM) ์šฉ๋Ÿ‰๋ณด๋‹ค ๋” ๋งŽ์€ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋  ๊ฒฝ์šฐ ๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ์œผ๋กœ ์ธํ•ด swap์ด ๋ฐœ์ƒํ•˜์—ฌ Redis์˜ ์„ฑ๋Šฅ ์ €ํ•˜๋ฅผ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

์œ„์˜ [๊ทธ๋ฆผ2]์™€ ๊ฐ™์ด ๋ฐ์ดํ„ฐ๋ฅผ ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ์˜ ์šฉ๋Ÿ‰๋ณด๋‹ค ๋” ๋งŽ์ด ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด, swap์ด ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜๊ฐ€ ์žˆ์œผ๋ฉฐ, ์šด์˜์ฒด์ œ์—์„œ Swap space์˜ ์ฃผ์š” ๊ธฐ๋Šฅ์€ ๋ฌผ๋ฆฌ๋ฉ”๋ชจ๋ฆฌ(RAM)์˜ ์–‘์ด ๊ฐ€๋“ ์ฐจ๊ณ  ๋” ๋งŽ์€ ๋ฉ”๋ชจ๋ฆฌ์˜ ์–‘์ด ํ•„์š”ํ•  ๋•Œ Backing store(๋””์Šคํฌ)์˜ ๊ฐ€์ƒ๋ฉ”๋ชจ๋ฆฌ์— ๋Œ€์ฒดํ•˜๊ฒŒ ๋œ๋‹ค.


๐Ÿšฉ Redis๋Š” ๋ฉ”๋ชจ๋ฆฌ์— ๋Œ€ํ•ด ์–ด๋–ป๊ฒŒ ๊ด€๋ฆฌํ• ๊นŒ?

Redis๋Š” ์ด๋Ÿฌํ•œ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด โ€œmaxmemoryโ€ ์˜ต์…˜ ์„ค์ •์„ ํ†ตํ•ด ๋ฉ”๋ชจ๋ฆฌ์˜ ์–‘์„ ๊ทธ ์ด์ƒ์˜ ๋ฒ”์œ„๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋„๋ก ์ œํ•œํ•  ์ˆ˜ ์žˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ , Redis๋Š” ์ธ ๋ฉ”๋ชจ๋ฆฌ ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ๋กœ ์‚ฌ์šฉํ•˜๋ฉฐ ์ผ๋ฐ˜์ ์ธ ๋””์Šคํฌ ์†”๋ฃจ์…˜์— ๋น„ํ•ด ์ ์€ ์–‘์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•จ์œผ๋กœ์จ, ์ด๋กœ ์ธํ•ด ์ตœ๋Œ€์น˜๋กœ ์ €์žฅํ•˜๊ฒŒ ๋˜๋ฉด Redis ๋ฉ”๋ชจ๋ฆฌ์— ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด์˜ค๊ฒŒ ๋˜๊ณ , ๊ธฐ์กด์˜ ๋ฐ์ดํ„ฐ๋Š” ์ œ๊ฑฐ๋˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ž‘๋™๋˜์–ด์•ผ ํ•œ๋‹ค.
์ด๊ฒƒ์„ eviction์ด๋ผ๊ณ  ๋ถ€๋ฅด๋Š”๋ฐ, ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด โ€œmaxmemory-policyโ€์˜ต์…˜์„ ํ†ตํ•ด eviction ์ •์ฑ…์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.


๐Ÿ“Œ Redis ์‚ฌ์šฉ ์‚ฌ๋ก€

์บ์‹ฑ
๋‹ค๋ฅธ DB "์•ž"์— ๋ฐฐ์น˜๋œ ๋ ˆ๋””์Šค๋Š” ์„ฑ๋Šฅใ…‡์ด ๋›ฐ์–ด๋‚œ ์ธ ๋ฉ”๋ชจ๋ฆฌ ์บ์‹œ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์•ก์„ธ์Šค ์ง€์—ฐ ์‹œ๊ฐ„์„ ์ค„์ด๊ณ , ์ฒ˜๋ฆฌ๋Ÿ‰์„ ๋Š˜๋ฆฌ๋ฉฐ ๊ด€๊ณ„ํ˜• ๋˜๋Š” NoSQL DB์˜ ๋ถ€๋‹ด์„ ์ค„์—ฌ์ค€๋‹ค.

์„ธ์…˜๊ด€๋ฆฌ
๋ ˆ๋””์Šค๋Š” ์„ธ์…˜ ๊ด€๋ฆฌ ์ž‘์—…์— ๋งค์šฐ ์ ํ•ฉํ•˜๋‹ค. ๋ ˆ๋””์Šค๋Š” ์„ธ์…˜ ํ‚ค์— ๋Œ€ํ•œ ์ ์ ˆํ•œ TTL๊ณผ ํ•จ๊ผ ๋น ๋ฅธ ํ‚ค ๊ฐ’ ์Šคํ† ์–ด๋กœ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ„๋‹จํ•˜๊ฒŒ ์„ธ์…˜ ์ •๋ณด๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.
์„ธ์…˜ ๊ด€๋ฆฌ๋Š” ์ฃผ๋กœ ๊ฒŒ์ž„, ์ „์ž ์ƒ๊ฑฐ๋ž˜ ์›น ์‚ฌ์ดํŠธ, ์†Œ์…œ ๋ฏธ๋””์–ด ํ”Œ๋žซํผ์„ ๋น„๋กฏํ•œ ์˜จ๋ผ์ธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ํ•„์š”ํ•˜๋‹ค.

์‹ค์‹œ๊ฐ„ ์ˆœ์œ„ํ‘œ
Redis Sorted Set ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์š”์†Œ๊ฐ€ ๋ชฉ๋ก์— ์œ ์ง€๋˜๊ณ  ์ ์ˆ˜์— ๋”ฐ๋ผ ์ •๋ ฌ๋œ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์†์‰ฝ๊ฒŒ ๋™์  ์ˆœ์œ„ํ‘œ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๊ฒŒ์ž„์—์„œ ์•ž์„œ์žˆ๋Š” ์‚ฌ๋žŒ์ด ๋ˆ„๊ตฌ์ธ์ง€ ๋ณด์—ฌ์ฃผ๊ฑฐ๋‚˜, ์ข‹์•„์š”๋ฅผ ๊ฐ€์žฅ ๋งŽ์ด ๋ฐ›์€ ๋ฉ”์‹œ์ง€๋ฅผ ๊ฒŒ์‹œํ•˜๊ฑฐ๋‚˜, ์„ ๋‘์— ์žˆ๋Š” ์‚ฌ๋žŒ์ด ๋ˆ„๊ตฌ์ธ์ง€ ๋ณด์—ฌ์ฃผ๋ ค๋Š” ๋‹ค์–‘ํ•œ ์‚ฌ๋ก€์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

์†๋„ ์ œํ•œ
Redis๋Š” ์ด๋ฒคํŠธ ์†๋„๋ฅผ ์ธก์ •ํ•˜๊ณ  ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์ œํ•œํ•  ์ˆ˜ ์žˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ์˜ API ํ‚ค์— ์—ฐ๊ฒฐ๋œ Redis ์นด์šดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŠน์ • ๊ธฐ๊ฐ„ ๋™์•ˆ ์•ก์„ธ์Šค ์š”์ฒญ์˜ ์ˆ˜๋ฅผ ์„ธ๊ณ  ํ•œ๋„๊ฐ€ ์ดˆ๊ณผ๋˜๋Š” ๊ฒฝ์šฐ ์กฐ์น˜๋ฅผ ์ทจํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์†๋„ ์ œํ•œ๊ธฐ๋Š” ํฌ๋Ÿผ์˜ ๊ฒŒ์‹œ๋ฌผ ์ˆ˜๋ฅผ ์ œํ•œํ•˜๊ณ , ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ๋Ÿ‰์„ ์ œํ•œํ•˜๋ฉฐ, ์ŠคํŒจ๋จธ์˜ ์˜ํ–ฅ์„ ์–ต์ œํ•˜๋Š” ๋ฐ ์ฃผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

๋Œ€๊ธฐ์—ด
Redis List ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ„๋‹จํ•œ ์˜๊ตฌ ๋Œ€๊ธฐ์—ด์„ ์†์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Redis List๋Š” ์ž๋™ ์ž‘์—… ๋ฐ ์ฐจ๋‹จ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋ฏ€๋กœ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค ๋˜๋Š” ์ˆœํ™˜ ๋ชฉ๋ก์ด ํ•„์š”ํ•œ ๋‹ค์–‘ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

์ฑ„ํŒ… ๋ฐ ๋ฉ”์‹œ์ง•
Redis์—์„œ๋Š” ํŒจํ„ด ๋งค์นญ๊ณผ ๋”๋ถˆ์–ด PUB/SUB ํ‘œ์ค€์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ Redis๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ณ ์„ฑ๋Šฅ ์ฑ„ํŒ…๋ฐฉ, ์‹ค์‹œ๊ฐ„ ์ฝ”๋ฉ˜ํŠธ ์ŠคํŠธ๋ฆผ ๋ฐ ์„œ๋ฒ„ ์ƒํ˜ธ ํ†ต์‹ ์„ ์ง€์›ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ PUB/SUB๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฒŒ์‹œ๋œ ์ด๋ฒคํŠธ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž‘์—…์„ ํŠธ๋ฆฌ๊ฑฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : https://blog.voidmainvoid.net/233
https://s-core.co.kr/insight/view/redis-%EB%82%B4%EB%B6%80-%EB%8F%99%EC%9E%91-%EC%9B%90%EB%A6%AC%EC%99%80-%EC%B5%9C%EC%A0%81%ED%99%94-%EB%B0%A9%EC%95%88/
https://velog.io/@mon99745/Redis%EB%9E%80

profile
"๋กœ์ปฌ์—์„  ๋ฌธ์ œ์—†์—ˆ๋Š”๋ฐโ€ฆ?"

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