Skip to content

redis-study/redis-summary

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

46 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

redis-summary

  • redis๋Š” ๊ณ ์„ฑ๋Šฅ key-value๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ์ธ NoSQL(Not Only SQL)
  • ๋ฌธ์ž์—ด(string), ํ•ด์‹œ(hash), ๋ฆฌ์ŠคํŠธ(list), ์…‹(set), ์ •๋ ฌ๋œ ์…‹(sorted set), ๋น„ํŠธ๋งต(bitmap), ํ•˜์ดํผ๋กœ๊ทธ๋กœ๊ทธ(hyperloglog) ์™€ ๊ฐ™์€ ๊ฐ•๋ ฅํ•œ ๋ฐ์ดํ„ฐ ํƒ€์ž… ๋•Œ๋ฌธ์— ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ์„œ๋ฒ„๋ผ๊ณ ๋„ ๋ถˆ๋ฆฐ๋‹ค.
  • ๋ ˆ๋””์Šค๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ผ๊ธฐ์™€ ์“ฐ๊ธฐ ๋ช…๋ น์ด ๋งค์šฐ ๋น ๋ฅด๋‹ค.
  • ๋ ˆ๋””์Šค๋Š” ๋””์Šคํฌ์—๋„ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ ˆ๋””์Šค ๋ฐ์ดํ„ฐ์˜ ์˜์†์„ฑ(data persistance)
  • help ์ปค๋งจ๋“œ๋Š” ๋„์›€๋ง์„ ์ค€๋‹ค keys ์ปค๋งจ๋“œ๋Š” ํŒจํ„ด๊ณผ ์ผ์น˜ํ•˜๋Š” ๋ชจ๋“  ํ‚ค๋ฅผ ๋ฆฌํ„ดํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์œ ์šฉํ•˜๋‹ค
  • ๋ ˆ๋””์Šค ๋ฐ์ดํ„ฐ ํƒ€์ž…์˜ ์ž‘๋™ ๋ฐฉ๋ฒ•์„ ์ดํ•ดํ•˜๋ฉด ์—ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ค๊ณ„๋ฅผ ์ข€ ๋” ์ž˜ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋ ˆ๋””์Šค๊ฐ€ ๋งŽ์€ ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ด์œ ๋Š” ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค. ํ•˜๋‚˜์˜ ํฌ๊ธฐ๋กœ ๋ชจ๋“  ๊ฒƒ์„ ๋งŒ์กฑ์‹œํ‚ฌ ์ˆ˜ ์—†๊ณ , ๋‹ค์–‘ํ•œ ๋ฌธ์ œ๊ฐ€ ์กด์žฌํ•˜๋Š” ๋งŒํผ ๋‹ค์–‘ํ•œ ์†”๋ฃจ์…˜์ด ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๋ฐ์ดํ„ฐ ํƒ€์ž…

1. ๋ฌธ์ž์—ด

  • ๋ฌธ์ž์—ด์€ ๊ฐ€์žฅ ๋งŽ์€ ์ปค๋งจ๋“œ๋ฅผ ๊ฐ€์ง€๋ฉฐ ์—ฌ๋Ÿฌ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋ ˆ๋””์Šค์—์„œ ๊ฐ€์žฅ ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ ํƒ€์ž…์ด๋‹ค.
  • ๋ฌธ์ž์—ด์€ ์ •์ˆ˜(integer) ๋˜๋Š” ๋ถ€๋™์†Œ์ˆ˜์ (float), ํ…์ŠคํŠธ ๋ฌธ์ž์—ด, ๋น„ํŠธ๋งต ๊ฐ’์ด ๊ธฐ๋ฐ˜์ด์ด๊ณ  ์—ฐ๊ด€ ์ปค๋งจ๋“œ๋ฅผ ์‚ฌ์šฉํ•จ์œผ๋กœ์จ ๋™์ž‘ํ•œ๋‹ค.
  • ๋ฌธ์ž์—ด์€ ๋ฌธ์ž์—ด์€ ํ…์ŠคํŠธ(XML, JSON, HTML, ์›๋ฌธ ํ…์ŠคํŠธ) ๋‚˜ ์ •์ˆ˜, ๋ถ€๋™์†Œ์ˆ˜์ , ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ฐ์ดํ„ฐ(๋น„๋””์˜ค, ์ด๋ฏธ์ง€, ์˜ค๋””์˜ค ํŒŒ์ผ) ์™€ ๊ฐ™์ด ์–ด๋– ํ•œ ์ข…๋ฅ˜์˜ ๋ฐ์ดํ„ฐ๋ผ๋„ ์ €์žฅ ๊ฐ€๋Šฅ
  • ๋ฌธ์ž์—ด ๊ฐ’์„ ํ…์ŠคํŠธ ๋˜๋Š” ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ฐ์ดํ„ฐ์˜ 512MB๋ฅผ ์ดˆ๊ณผํ•  ์ˆ˜ ์—†๋‹ค.
  • ์‚ฌ์šฉ ์˜ˆ์‹œ : ์บ์‹œ ๋ฉ”์ปค๋‹ˆ์ฆ˜, ์ž๋™ ๋งŒ๋ฃŒ๋˜๋Š” ์บ์‹œ, Count ๊ณ„์‚ฐ
  • Command
    • MSET, MGET : Multiple Set & Get
    • EXPIRE, TTL : set expire, check ttl
      • TTL ์ปค๋งจ๋“œ๋Š” ๋‹ค์Œ์ค‘ ํ•˜๋‚˜๋กœ ๋ฆฌํ„ดํ•œ๋‹ค.
        • ์–‘์˜ ์ •์ˆ˜ : ์ฃผ์–ด์ง„ ํ‚ค๊ฐ€ ์–ผ๋งˆ๋‚˜ ์ƒ์กดํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์ดˆ๋กœ ๋ณด์—ฌ์คŒ
        • -2 : ํ‚ค๊ฐ€ ๋งŒ๋ฃŒ๋˜๊ฑฐ๋‚˜ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ์ƒํƒœ
        • -1 : ํ‚ค๊ฐ€ ์กด์žฌํ•˜์ง€๋งŒ ๋งŒ๋ฃŒ ์‹œ๊ฐ„์„ ์ •ํ•˜์ง€ ์•Š์Œ
    • (Atomic) INCR, INCRBY : 1์”ฉ ํ˜น์€ ์ฃผ์–ด์ง„ ๊ฐ’๋งŒํผ ํ‚ค๊ฐ’๋ฅผ ์ฆ๊ฐ€์‹œํ‚ค๊ณ  ์ฆ๊ฐ€์‹œํ‚จ ๊ฐ’์„ ๋ฆฌํ„ดํ•œ๋‹ค.
    • (Atomic) DECR, DECRBY : 1์”ฉ ํ˜น์€ ์ฃผ์–ด์ง„ ๊ฐ’๋งŒํผ ํ‚ค๊ฐ’์„ ๊ฐ์†Œ์‹œํ‚ค๊ณ  ๊ฐ์†Œ์‹œํ‚จ ๊ฐ’์„ ๋ฆฌํ„ดํ•œ๋‹ค.
    • (Atomic) INCRBYFLOAT, DECRBYFLOAT : ์ฃผ์–ด์ง„ ๋ถ€๋™์†Œ์ˆ˜์ ๋งŒํผ ํ‚ค๊ฐ’์„ ์ค‘๊ฐ€ ํ˜น์€ ๊ฐ์†Œ์‹œํ‚ค๊ณ  ๋ณ€๊ฒฝ์‹œํ‚จ ๊ฐ’์„ ๋ฆฌํ„ดํ•œ๋‹ค.
  • Atomic Prefix๊ฐ€ ๋ถ™์€ ์ปค๋งจ๋“œ๋Š” ์›์ž์  ์ปค๋งจ๋“œ๋กœ์„œ ์„œ๋กœ ๋‹ค๋ฅธ ๋‘๊ฐœ์˜ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋™์ผํ•œ ์ปค๋งจ๋“œ๋ฅผ ๋™์‹œ์— ์‹คํ–‰ํ•ด๋„ ๋™์ผํ•œ ๊ฐ’์„ ์–ป์„ ์ˆ˜ ์—†๋‹ค. ์ปค๋งจ๋“œ ๊ฐ„์—๋Š” ์–ด๋– ํ•œ ๊ฒฝํ•ฉ ์กฐ๊ฑด๋„ ์—†๊ธฐ ๋•Œ๋ฌธ.
    • ๋ ˆ๋””์Šค๋Š” ํ•ญ์ƒ ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ์ปค๋งจ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ•ญ์ƒ ๊ฒฝํ•ฉ ์กฐ๊ฑด์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค.


(MSET, MGET)



(INCR, INCRBY, DECR, DECRBY, INCRBYFLOAT)



(EXPIRE, TTL)

2. ๋ฆฌ์ŠคํŠธ

  • ๋ฆฌ์ŠคํŠธ๋Š” ๊ฐ„๋‹จํ•œ ์ฝœ๋ž™์…˜, ์Šคํƒ, ํ์™€ ๊ฐ™์ด ๋™์ž‘ํ•  ์ˆ˜ ์žˆ๋Š” ๋งค์šฐ ์œ ์—ฐํ•œ ๋ฐ์ดํ„ฐ ํƒ€์ž…์ด๋‹ค.
  • ๋งŽ์€ ์ด๋ฒคํŠธ ์‹œ์Šคํ…œ์˜ ํ๋กœ์„œ ์‚ฌ์šฉ๋˜๋Š”๋ฐ ๋ฆฌ์ŠคํŠธ ์ปค๋งจ๋“œ ์—ญ์‹œ ์›์ž์ ์ธ ํŠน์„ฑ์„ ๊ฐ–๊ณ  ์žˆ์–ด ๋ณ‘๋ ฌ ์‹œ์Šคํ…œ์ด ํ์—์„œ ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ์–ป์–ด๋‚ผ ๋•Œ ์ค‘๋ณต์œผ๋กœ ์–ป์ง€ ์•Š๋„๋ก ๋ณด์žฅํ•ด์ค€๋‹ค.
  • ๋ ˆ๋””์Šค ๋ฆฌ์ŠคํŠธ์— ๋ธ”๋กœํ‚น ์ปค๋งจ๋“œ๊ฐ€ ์กด์žฌํ•œ๋‹ค. ์ฆ‰ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋น„์–ด์žˆ๋Š” ๋ฆฌ์ŠคํŠธ์— ๋ธ”๋กœํ‚น ์ปค๋งจ๋“œ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ, ํด๋ผ์ด์–ธํŠธ๋Š” ๋ฆฌ์ŠคํŠธ์— ์ƒˆ๋กœ์šด ์—˜๋ฆฌ๋จผํŠธ๊ฐ€ ์ถ”๊ฐ€๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฐ๋‹ค๋Š” ์˜๋ฏธ๋‹ค.
  • ๋ ˆ๋””์Šค์˜ ๋ฆฌ์ŠคํŠธ๋Š” Linked List ๋ผ์„œ ๋ฆฌ์ŠคํŠธ์˜ ์ฒ˜์Œ ๋˜๋Š” ๊ธ‘์—์„œ ์—˜๋ฆฌ๋จผํŠธ์˜ ์ถ”๊ฐ€ ๋ฐ ์‚ญ์ œ๋Š” ํ•ญ์ƒ O(1), ์ผ์ • ์‹œ๊ฐ„์˜ ์„ฑ๋Šฅ์„ ๊ฐ€์ง„๋‹ค.
  • ์ฆ‰ ๋ฆฌ์ŠคํŠธ์—์„œ ์—˜๋ฆฌ๋จผํŠธ์— ์ ‘๊ทผํ•˜๋Š” ์ž‘์—…์€ O(N) ์‹œ๊ฐ„์ด์ง€๋งŒ ์ฒซ๋ฒˆ์งธ ๋˜๋Š” ๋งˆ์ง€๋ง‰ ์—˜๋ฆฌ๋จผํŠธ์—๋Š” O(1)๋กœ ์ ‘๊ทผํ•œ๋‹ค.
  • ๋ฆฌ์ŠคํŠธ์˜ ๊ฐ ์—˜๋ฆฌ๋จผํŠธ๊ฐ€ list-max-ziplist-value ์„ค์ • ๊ฐ’๋ณด๋‹ค ์ž‘๊ณ  , ์—˜๋ฆฌ๋จผํŠธ ๊ฐœ์ˆ˜๊ฐ€ list-max-ziplist-entries ์„ค์ • ๊ฐ’๋ณด๋‹ค ์ž‘์œผ๋ฉด ๋ฆฌ์ŠคํŠธ๋Š” ์ธ์ฝ”๋“œ ๋  ์ˆ˜ ์žˆ๊ณ  ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ตœ์ ํ™” ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋ฆฌ์ŠคํŠธ๊ฐ€ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ์—˜๋ฆฌ๋จผํŠธ์˜ ์ตœ๋Œ€ ๊ฐœ์ˆ˜๋Š” 2^32-1 ์ด๋ฉฐ 40์–ต๊ฐœ ์ด์ƒ์˜ ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค.
  • ๋ฆฌ์ŠคํŠธ ์‹ค์ œ ์‚ฌ์šฉ ์˜ˆ์‹œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. ๋ ˆ์Šคํ, ์…€๋Ÿฌ๋ฆฌ, ๋กœ๊ทธ์Šคํƒœ์‹œ๋ฅผ ํฌํ•จํ•œ ๋งŽ์€ ํˆด์—์„œ ์‚ฌ์šฉํ•œ๋‹ค.
  • ํŠธ์œ„ํ„ฐ๋Š” ์‚ฌ์šฉ์ž์˜ ์ตœ๊ทผ ํŠธ์œ—์„ ์ €์žฅํ•  ๋•Œ ๋ฆฌ์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
  • Command
    • LPUSH : ๋ฆฌ์ŠคํŠธ์˜ ์ฒ˜์Œ์— ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€
    • RPUSH : ๋ฆฌ์ŠคํŠธ์˜ ๋งˆ์ง€๋ง‰์— ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€
    • LLEN : ๋ฆฌ์ŠคํŠธ์˜ ๊ธธ์ด๋ฅผ ๋ฆฌํ„ด
    • LINDEX : ์ฃผ์–ด์ง„ ์ธ๋ฑ์Šค์˜ ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ๋ฆฌํ„ด (์ธ๋ฑ์Šค๋Š” 0๋ถ€ํ„ฐ ์‹œ์ž‘), ๋ฆฌ์ŠคํŠธ์˜ ์—˜๋ฆฌ๋จผํŠธ๋Š” ํ•ญ์ƒ ์™ผ์ชฝ์—์„œ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ ‘๊ทผํ•œ๋‹ค. ์Œ์ˆ˜๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค. -1์€ ๋ฆฌ์ŠคํŠธ์˜ ๋, -2๋Š” ๋ฆฌ์ŠคํŠธ์˜ ๋์—์„œ ๋‘๋ฒˆ์งธ ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค.
    • LRANGE : ์‹œ์ž‘๊ณผ ๋ ์ธ๋ฑ์Šค๋ฅผ ํฌํ•จ์‹œ์ผœ ์ฃผ์–ด์ง„ ์ธ๋ฑ์Šค ๋ฒ”์œ„์— ์žˆ๋Š” ๋ชจ๋“  ์—˜๋ฆฌ๋จผํŠธ ๊ฐ’์„ ๋ฐฐ์—ด๋กœ ๋ฆฌํ„ดํ•œ๋‹ค. ์ธ๋ฑ์Šค๋Š” 0๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๊ณ  ์–‘์ˆ˜๋‚˜ ์Œ์ˆ˜๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค.
    • LPOP : ๋ฆฌ์ŠคํŠธ์˜ ์ฒซ ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ์‚ญ์ œํ•˜๊ณ  ๋ฆฌํ„ด
    • RPOP : ๋ฆฌ์ŠคํŠธ์˜ ๋งˆ์ง€๋ง‰ ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ์‚ญ์ œํ•˜๊ณ  ๋ฆฌํ„ด
    • BLPOP, BRPOP : LPOP๊ณผ RPOP์„ blockingํ•˜๋ฉด์„œ ๊ธฐ๋‹ค๋ฆฐ๋‹ค.
      • ์ด๋ฅผ ์ด์šฉํ•ด์„œ Message Queue์ฒ˜๋Ÿผ ์ด์šฉ ๊ฐ€๋Šฅ
      • ํ•ด๋‹น ๋ถ€๋ถ„ ํ…Œ์ŠคํŠธ https://spring.io/guides/gs/messaging-redis/ ์—์„œ ํ™•์ธ ๊ฐ€๋Šฅ


(LPUSH, RPUSH)



(LLEN, LINDEX)



(LRANGE)



(LPOP, RPOP)



(BLPOP)



(Message Queue with Spring boot Code)



(Message Queue with Spring boot Result)


3. ํ•ด์‹œ

  • ํ•ด์‹œ๋Š” ํ•„๋“œ๋ฅผ ๊ฐ’์œผ๋กœ ๋งคํ•‘ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ์ฒด๋ฅผ ์ €์žฅํ•˜๋Š”๋ฐ ํ›Œ๋ฅญํ•œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋‹ค.
  • ํ•ด์‹œ๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์“ธ ์ˆ˜ ์žˆ๊ณ , ๋ฐ์ดํ„ฐ๋ฅผ ๋นจ๋ฆฌ ์ฐพ์„ ์ˆ˜ ์žˆ๊ฒŒ ์ตœ์ ํ™” ๋˜์–ด ์žˆ๋‹ค.
  • ํ•ด์‹œ์—์„œ ํ•„๋“œ ์ด๋ฆ„๊ณผ ๊ฐ’์€ ๋ฌธ์ž์—ด ์ด๋‹ค. ๋”ฐ๋ผ์„œ ํ•ด์‹œ๋Š” ๋ฌธ์ž์—ด์„ ๋ฌธ์ž์—ด๋กœ ๋งคํ•‘ํ•œ๋‹ค.
  • hash-max-ziplist-entries, hash-max-ziplist-value ์„ค์ •์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ๋‹ค. (๋’ค์— ์„ค๋ช…ํ•จ)
  • ํ•ด์‹œ๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ ziplist ์™€ hash table์ด ๋  ์ˆ˜ ์žˆ๋‹ค.
  • ziplist๋Š” ๋ฉ”๋ชจ๋ฆฌ ํšจ์œจํ™”์— ๋ชฉ์ ์„ ๋‘” ์–‘์ชฝ์œผ๋กœ ์—ฐ๊ฒฐ๋œ ๋ฆฌ์ŠคํŠธ์ด๋‹ค.
  • ziplist์„œ๋Š” ์ •์ˆ˜๋ฅผ ์ผ๋ จ์˜ ๋ฌธ์ž๋กœ ์ €์žฅํ•˜์ง€ ์•Š๊ณ  ์‹ค์ œ ์ •์ˆ˜์˜ ๊ฐ’์œผ๋กœ ์ €์žฅํ•œ๋‹ค.
  • ziplist๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ์ตœ์ ํ™”๊ฐ€ ๋ผ ์žˆ๋‹ค ํ• ์ง€๋ผ๋„ ์ผ์ •ํ•œ ์‹œ๊ฐ„ ๋‚ด๋กœ ๊ฒ€์ƒ‰์ด ์ˆ˜ํ–‰ ๋˜์ง€๋Š” ์•Š๋Š”๋‹ค.
  • hash table์—์„œ๋Š” ์ผ์ •ํ•œ ์‹œ๊ฐ„ ๋‚ด๋กœ ๊ฒ€์ƒ‰์€ ๋˜์ง€๋งŒ ๋ฉ”๋ชจ๋ฆฌ ์ตœ์ ํ™”๊ฐ€ ์ด๋ฃจ์–ด์ง€์ง€ ์•Š๋Š”๋‹ค.
  • Command
    • HSET HMSET : ํ‚ค๋กœ ๊ฐ’ ๋“ฑ๋ก (single, multiple)
    • HGET HMGET : ํ‚ค๋กœ ๊ฐ’ ์กฐํšŒ (single, multiple)
    • HINCR, HINCRBY, HDECR, HDECRBY, HINCRBYFLOAT, HDECRBYFLOAT : ์ฃผ์–ด์ง„ ์ •์ˆ˜ ํ˜น์€ ๋ถ€๋™์†Œ์ˆ˜์  ๋งŒํผ ํ•„๋“œ๋ฅผ ์ฆ๊ฐ€ ๊ฐ์†Œ ์‹œํ‚ด. (HINCR, HDECR์€ 1์”ฉ ์ฆ๊ฐ€ ๊ฐ์†Œ)
    • HDEL : ํ•ด์‹œ์—์„œ ํ•„๋“œ๋ฅผ ์‚ญ์ œ
    • HGETALL : ๋ชจ๋“  ํ•„๋“œ ์กฐํšŒ
    • HKEYS : ๋ชจ๋“  ํ•„๋“œ key ์กฐํšŒ
    • HVALS : ๋ชจ๋“  ํ•„๋“œ value ์กฐํšŒ


(HSET, HMSET, HINCRBY, HGET, HMGET, HDEL, HGETALL)


4. ์…‹

  • ์ˆœ์„œ๊ฐ€ ์—†๊ณ  ๋™์ผํ•œ ๋ฌธ์ž์—ด์ด ์—†๋Š” ์ฝœ๋ ‰์…˜
  • ์ผ๋ถ€ ์ปค๋งจ๋“œ(์—˜๋ฆฌ๋จผํŠธ ์ถ”๊ฐ€ ๋ฐ ์‚ญ์ œ, ๊ฒ€์ƒ‰์˜ ์„ฑ๋Šฅ ์†๋„๋Š” ํ•ญ์ƒ O(1)์ด๋‹ค)๋ฅผ ์ตœ์ ํ™”ํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ•ด์‹œ ํ…Œ์ด๋ธ”๋กœ ๊ตฌํ˜„
  • ์…‹์˜ ๋ชจ๋“  ์—˜๋ฆฌ๋จผํŠธ ๊ฐ’์ด ์ •์ˆ˜(integer)๋ฉด ์…‹ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์€ ์ค„์–ด๋“ค๊ณ  ์ „์ฒด ์—˜๋ฆฌ๋จผํŠธ ๊ฐฏ์ˆ˜๋Š” set-max-intset-entries ์„ค์ • ๊ฐ’๋งŒํผ ์ปค์งˆ ์ˆ˜ ์žˆ๋‹ค.
  • ์…‹์ด ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ์—˜๋ฆฌ๋จผํŠธ์˜ ์ตœ๋Œ€ ๊ฐœ์ˆ˜๋Š” 2^32-1 ์ด๋‹ค. ์ฆ‰, ํ•œ ์…‹์— 40์–ต๊ฐœ ์ด์ƒ์˜ ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์…‹์€ ๋ฐ์ดํ„ฐ ํ•„ํ„ฐ๋ง, ๋ฐ์ดํ„ฐ ๊ทธ๋ฃนํ•‘, ์—˜๋ฆฌ๋จผํŠธ์‹ญ ํ™•์ธ ๋“ฑ์— ์‚ฌ์šฉํ•˜๊ธฐ ์ข‹๋‹ค
  • Command
    • SADD : ์…‹์— ํ•˜๋‚˜ ์ด์ƒ์˜ ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ์ถ”๊ฐ€ํ•œใ„ท.
    • SINTER : ํ•˜๋‚˜ ์ด์ƒ์˜ ์…‹์„ ๋ฐ›์•„ ๋ชจ๋“  ์…‹์— ๊ณตํ†ต์œผ๋กœ ์กด์žฌํ•˜๋Š” ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ๋ฐฐ์—ด๋กœ ๋ฆฌํ„ด
    • SDIFF : ํ•˜๋‚˜ ์ด์ƒ์˜ ์…‹์„ ๋ฐ›๊ณ  ์ฒซ๋ฒˆ์งธ ์…‹์˜ ๋ชจ๋“  ์—˜๋ฆฌ๋ฉ˜ํŠธ์ค‘ ๊ทธ ๋’ค์— ๋”ฐ๋ฅด๋Š” ์…‹์— ์กด์žฌํ•˜์ง€ ์•Š๋Š” ์—˜๋ฆฌ๋ฉ˜ํ„ฐ๋ฅผ ๋ฐฐ์—ด๋กœ ๋ฆฌํ„ด
    • SUNION : ํ•˜๋‚˜ ์ด์ƒ์˜ ์…‹์„ ๋ฐ›๊ณ  ๋ชจ๋“  ์…‹์˜ ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ํ•˜๋‚˜๋กœ ๋ชจ์•„ ๋ฆฌํ„ดํ•œ๋‹ค. ๋ฆฌํ„ด๋œ ๊ฒฐ๊ณผ์—๋Š” ์ค‘๋ณต๋œ ์—˜๋ฆฌ๋จผํŠธ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค.
    • SRANDMEMBER : ์…‹์—์„œ ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ๋ฌด์ž‘์œ„๋กœ ๋ฝ‘์€ ํ›„ ๋ฆฌํ„ดํ•œ๋‹ค.
    • SISMEMBER : ์…‹์— ์—˜๋ฆฌ๋จผํŠธ๊ฐ€ ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.
    • SREM : ์ฃผ์–ด์ง„ ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ์…‹์—์„œ ์‚ญ์ œํ•œ ํ›„ ์…‹์— ๋‚จ์•„์žˆ๋Š” ์—˜๋ฆฌ๋จผํŠธ์˜ ๊ฐœ์ˆ˜๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค.
    • SCARD : ์…‹์˜ ์—˜๋ฆฌ๋จผํŠธ ๊ฐฏ์ˆ˜๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค. (cardinality)
    • SMEMBERS : ์…‹์˜ ๋ชจ๋“  ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ๋ฐฐ์—ด๋กœ ๋ฆฌํ„ด


(SADD, SINGET, SDIFF, SUNION, SRANDOMEMBER, SREM, SISMEMBER, SCARD, SMEMBERS)


5. ์ •๋ ฌ๋œ ์…‹ (sorted set)

  • ์ •๋ ฌ๋œ ์…‹์€ ์…‹๊ณผ ๋น„์Šทํ•˜์ง€๋งŒ, ์ •๋ ฌ๋œ ์…‹์˜ ๋ชจ๋“  ์—˜๋ฆฌ๋จผํŠธ๋Š” ์—ฐ๊ด€ ์ ์ˆ˜ ๋ฅผ ๊ฐ€์ง„๋‹ค.
  • ์ฆ‰ sorted set์€ ์ ์ˆ˜๋กœ ์ •๋ ฌ๋œ, ์ค‘๋ณต ๋ฌธ์ž์—ด์ด ์—†๋Š” ์ฝœ๋ž™์…˜์ด๋‹ค.
  • ๋ฐ˜๋ณต ์ ์ˆ˜๋ฅผ ๊ฐ€์ง„ ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค. ์ด๋Ÿฐ ๊ฒฝ์šฐ์— ๋ฐ˜๋ณต ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ์‚ฌ์ „ ํŽธ์ง‘ ์ˆœ์„œ๋Œ€๋กœ ์ •๋ ฌํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ •๋ ฌ๋œ ์…‹ ์ปค๋งจ๋“œ๋Š” ๋น ๋ฅธ ํŽธ์ด์ง€๋งŒ ์ ์ˆ˜๋กœ ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ๋น„๊ตํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์…‹ ์ปค๋งจ๋“œ๋ณด๋‹ค ๋น ๋ฅด์ง€ ์•Š๋‹ค.
  • ์ •๋ ฌ๋œ ์…‹์—์„œ ์—˜๋ฆฌ๋จผํŠธ์˜ ์ถ”๊ฐ€ ๋ฐ ์‚ญ์ œ, ๋ณ€๊ฒฝ ์„ฑ๋Šฅ์€ O(logN)์ด๋ฉฐ ์—ฌ๊ธฐ์„œ N์€ ์ •๋ ฌ๋œ ์…‹์˜ ์—˜๋ฆฌ๋จผํŠธ ๊ฐœ์ˆ˜๋‹ค.
  • ์ •๋ ฌ๋œ ์…‹์˜ ๋‚ด๋ถ€ ๊ตฌํ˜„์€ 2๊ฐœ์˜ ๋ถ„๋ฆฌ๋œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋กœ ๋˜์–ด ์žˆ๋‹ค.
    1. skiplist : ์ˆœ์„œ๋Œ€๋กœ ์ •๋ ฌ๋œ ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ๋น ๋ฅด๊ฒŒ ๊ฒ€์ƒ‰
    2. ziplist : zset-max-ziplist-entries์™€ zset-max-ziplist-value ์„ค์ •์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•จ
  • sorted set์€ ๊ณ ๊ฐ ์„œ๋น„์Šค ์‹ค์‹œ๊ฐ„ ๋Œ€๊ธฐ ๋ชฉ๋ก ๋งŒ๋“ค๊ธฐ, ์ˆ˜๋ฐฑ๋งŒ๊ฐœ์˜ ๋‹จ์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ž๋™ ์™„์„ฑ ์‹œ์Šคํ…œ ๋งŒ๋“ค๊ธฐ ๋“ฑ์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค.
  • Command
    • ZADD : sorted set์— ํ•˜๋‚˜ ์ด์ƒ์˜ ์—˜๋ฆฌ๋จผํŠธ ์ถ”๊ฐ€, ๋งŒ์•ฝ ํ•ด๋‹น ์—˜๋ฆฌ๋จผํŠธ๊ฐ€ ์ด๋ฏธ ์กด์žฌํ•˜๋ฉด ๋ฌด์‹œํ•˜๊ณ  ์ถ”๊ฐ€๋œ ์—˜๋ฆฌ๋จผํŠธ์˜ ๊ฐœ์ˆ˜๋ฅผ ๋ฆฌํ„ด
    • ZRANGE, ZRANGEBYLEX, ZRANGEBYSCORE, ZREVRANGE, ZREVRANGEBYLEX, ZREVRANGEBYSCORE : ๋ฒ”์œ„๋ฅผ ์ฝ์–ด์˜ค๋Š”๋ฐ ์‚ฌ์šฉ
    • WITHSCORES : ๋ฒ”์œ„ ์ปค๋งจ๋“œ์˜ ์˜ต์…˜, ์—˜๋ฆฌ๋จผํŠธ์˜ ์ ์ˆ˜๋ฅผ ํ•จ๊ป˜ ๋ฆฌํ„ด
    • ZREM : ์ •๋ ฌ๋œ ์…‹์—์„œ ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ์‚ญ์ œ
    • ZSCORE : ์—˜๋ฆฌ๋จผํŠธ์˜ ์ ์ˆ˜๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค.
    • ZRANK : ๋“ฑ์ˆ˜๊ฐ€ ๋‚ฎ์€ ์ˆœ์œผ๋กœ ์ •๋ ฌ๋œ ์—˜๋ฆฌ๋จผํŠธ์˜ ๋“ฑ์ˆ˜๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค.
    • ZREVRANK : ๋“ฑ์ˆ˜๊ฐ€ ๋†’์€ ์ˆœ์—์„œ ๋‚ฎ์€ ์ˆœ์œผ๋กœ ์ •๋ ฌ๋œ ์—˜๋ฆฌ๋จผํŠธ์˜ ๋“ฑ์ˆ˜๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค.


(ZADD, ZRANGE, ZREVRANGE, ZREM, ZSCORE, ZRANK, ZREVRANK)


6. ๋น„ํŠธ๋งต

  • ๋น„ํŠธ๋งต์€ ๋ ˆ๋””์Šค์˜ ์‹ค์ œ ๋ฐ์ดํ„ฐ ํƒ€์ž…์ด ์•„๋‹ˆ๋‹ค. ๋‚ด๋ถ€์ ์œผ๋กœ ๋น„ํŠธ๋งต์€ ๋ฌธ์ž์—ด ์ด๋‹ค.
  • ๋น„ํŠธ๋งต์€ ๋ฌธ์ž์—ด์˜ bit ์—ฐ์‚ฐ์ž ์ง‘ํ•ฉ ์ด๋ผ๊ณ  ๋งํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๊ทธ๋Ÿฌ๋‚˜ ๋ ˆ๋””์Šค๋Š” ๋ฌธ์ž์—ด์„ ๋น„ํŠธ๋งต์œผ๋กœ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋Š” ์ปค๋งจ๋“œ๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ๋น„ํŠธ๋งต์„ ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ๊ฐ„์ฃผ ํ•œ๋‹ค.
  • ๋น„ํŠธ๋งต์€ ๋น„ํŠธ ๋ฐฐ์—ด(bit array) ๋˜๋Š” ๋ฐฐํŠธ ์…‹(bit set)์œผ๋กœ ์•Œ๋ ค์ ธ ์žˆ๋‹ค.
  • ๋น„ํŠธ๋งต์€ ๊ฐœ๋ณ„ ๋น„ํŠธ๋ฅผ 0 ๋˜๋Š” 1๋กœ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๋น„ํŠธ ์—ด์ด๋‹ค.
  • ๋น„ํŠธ๋งต์„ 0๊ณผ 1๋กœ ๊ตฌ์„ฑ๋œ ๋ฐฐ์—ด๋กœ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋ ˆ๋””์Šค ๋ฌธ์„œ๋Š” ๋น„ํŠธ๋งต ์ธ๋ฑ์Šค๋ฅผ ์˜คํ”„์…‹ ์œผ๋กœ ๋‚˜ํƒ€๋‚ธ๋‹ค.
  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋„๋ฉ”์ธ์€ ๊ฐœ๋ณ„ ๋น„ํŠธ๋งต ์ธ๋ฑ์Šค๊ฐ€ ๋ฌด์—‡์„ ์˜๋ฏธํ•˜๋Š”์ง€ ์ง€์‹œํ•œ๋‹ค.
  • ๋น„ํŠธ๋งต์€ ๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ์ด ์ข‹๊ณ  ๋น ๋ฅธ ๊ฒ€์ƒ‰์„ ์ง€์›ํ•˜๋ฉฐ, 2^32๋น„ํŠธ (40์–ต๋น„ํŠธ ์ด์ƒ)๊นŒ์ง€ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.
  • true false๊ฐ’์„ ๋‹จ์ˆœํžˆ ์ €์žฅํ•  ๋•Œ ์“ธ๋งŒํ•˜๋‹ค
  • Command
    • SETBIT : ๋น„ํŠธ๋งต ์˜คํ”„์…‹์— ๊ฐ’์„ ์ €์žฅ
    • GETBIT : ๋น„ํŠธ๋งต ์˜คํ”„์…‹ ๊ฐ’์„ ๋ฆฌํ„ด
    • BITCOUNT: ๋น„ํŠธ๋งต์— 1๋กœ ํ‘œ์‹œ๋œ ๋ชจ๋“  ๋น„ํŠธ์˜ ๊ฐœ์ˆ˜๋ฅผ ๋ฆฌํ„ด
    • BITOP : ๋Œ€์ƒ ํ‚ค, ๋น„ํŠธ ์—ฐ์‚ฐ, ํ•ด๋‹น ์—ฐ์‚ฐ์— ์ ์šฉํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ๋Œ€์ƒ ํ‚ค์— ์ €์žฅํ•  ํ‚ค ๋ชฉ๋ก (OR, AND, XOR, NOT)


(SETBIT, GETBIT, BITCOUNT, BITOP, ZSCORE, ZRANK, ZREVRANK)


7. ํ•˜์ดํผ๋กœ๊ทธ๋กœ๊ทธ

  • ๋ ˆ๋””์Šค์˜ ์‹ค์ œ ๋ฐ์ดํ„ฐ ํƒ€์ž…์ด ์•„๋‹ˆ๋‹ค. ํ•˜์ดํผ๋กœ๊ทธ๋กœ๊ทธ๋Š” ๊ฐœ๋…์ ์œผ๋กœ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค.
  • ์…‹์— ์กด์žฌํ•˜๋Š” ๊ณ ์œ  ์—˜๋ฆฌ๋จผํŠธ ๊ฐœ์ˆ˜๋ฅผ ์•„์ฃผ ์ข‹์€ ๊ทผ์‚ฌ์น˜ ๋กœ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด ํ™•๋ฅ ํ™”๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค.
  • ํ•˜๋‚˜์˜ ํ‚ค๋‹น ์•„์ฃผ ์ž‘์€ ๋ฉ”๋ชจ๋ฆฌ(์ตœ๋Œ€12KB)๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ, ํ•ญ์ƒ O(1)๋กœ๋งŒ ๋™์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋งค๋ ฅ์ ์ด๋‹ค.
  • ๊ธฐ์ˆ ์ ์œผ๋กœ๋Š” ํ•˜์ดํผ๋กœ๊ทธ๋กœ๊ทธ๊ฐ€ ์‹ค์ œ ๋ฐ์ดํ„ฐ ํƒ€์ž…์ด ์•„๋‹์ง€๋ผ๋„, ๋ ˆ๋””์Šค๋Š” ํ•˜์ดํผ๋กœ๊ทธ๋กœ๊ทธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•ด ์…‹์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•˜๊ธฐ ์œ„ํ•œ ๋ฌธ์ž์—ด ์ œ์–ดํ•˜๋Š” ์ปค๋ฉ˜๋“œ๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ์ดํ„ฐํƒ€์ž…์ฒ˜๋Ÿผ ๋‹ค๋ฃฐ๊ฒƒ์ด๋‹ค.
  • ํ•˜์ดํผ๋กœ๊ทธ๋กœ๊ทธ๋Š” 100%์˜ ์ •ํ™•๋„๋ฅผ ๋ณด์žฅํ•˜์ง€ ์•Š๋Š” ํ™•๋ฅ ์ ์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค.
  • ํ•˜์ดํผ๋กœ๊ทธ๋กœ๊ทธ์˜ ๋ ˆ๋””์Šค ๊ตฌํ˜„์€ 0.81ํผ์„ผํŠธ์˜ ํ‘œ์ค€์˜ค์ฐจ๋ฅผ ๊ฐ€์ง„๋‹ค.
  • ์ด๋ก ์ƒ ์…€ ์ˆ˜ ์žˆ๋Š” ์…‹์˜ ๊ฐœ์ˆ˜ ์ œํ•œ์€ ์‚ฌ์‹ค ์—†๋‹ค.
  • ํ•˜์ดํผ๋กœ๊ทธ๋กœ๊ทธ ๋…ผ๋ฌธ(Philippe Flajolet, Eric Fusy, Oliver Gandouet, Frederic Meunier์˜ ๊ณต๋™๋†๋ฌธ 'The analysis of a newar-optiomal cardinality estimation algorithm)์—์„œ ํ•˜์ดํผ๋กœ๊ทธ๋กœ๊ทธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์ฒ˜์Œ์œผ๋กœ๏ฟฝ ์„ค๋ช…๋๋‹ค.
  • ํ•˜์ดํผ๋กœ๊ทธ๋กœ๊ทธ์—๋Š” PFADD, PFCOUNT, PFMERGE ์„ธ ๊ฐœ์˜ ์ปค๋งจ๋“œ๋งŒ ์กด์žฌํ•œ๋‹ค.
  • ์ข…์ข… ๊ณ ์œ  ๊ฐœ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•˜๊ธฐ ์œ„ํ•ด, ํ˜„์žฌ ๊ณ„์‚ฐ ์ค‘์ธ ์…‹์˜ ์—˜๋ฆฌ๋จผํŠธ ์ˆ˜์— ๋น„๋ก€ํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์žˆ์–ด์•ผ ํ•œ๋‹ค.
  • ํ•˜์ดํผ๋กœ๊ทธ๋กœ๊ทธ๋Š” ์ข‹์€ ์„ฑ๋Šฅ, ๋‚ฎ์€ ๊ณ„์‚ฐ ๋น„์šฉ, ์ ์€ ๋ฉ”๋ชจ๋ฆฌ ์–‘์œผ๋กœ ํ•ด๋‹น ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•œ๋‹ค.
  • ๊ทธ๋Ÿฌ๋‚˜ ํ•˜์ดํผ๋กœ๊ทธ๋กœ๊ทธ๋Š” 100ํผ์„ผํŠธ ์ •ํ™•ํ•˜์ง€๋Š” ์•Š๋‹ค. ๊ทธ๋Ÿผ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ์ผ๋ถ€ ์ƒํ™ฉ์—์„œ๋Š” 99.19ํผ์„ผํŠธ์ •๋„๋ผ๋ฉด ์ถฉ๋ถ„ํžˆ ๊ดœ์ฐฎ์„ ์ˆ˜ ์žˆ๋‹ค.
  • ํ•˜์ดํผ๋กœ๊ทธ๋กœ๊ทธ๋Š” ์›น์‚ฌ์ดํŠธ ๊ณ ์œ  ๋ฐฉ๋ฌธ์ž ์ˆ˜ ๊ณ„์‚ฐ, ํŠน์ • ๋‚ ์งœ ๋˜๋Š” ์‹œ๊ฐ„์— ์›น์‚ฌ์ดํŠธ์—์„œ ๊ฒ€์ƒ‰ํ•œ ๊ณ ์œ  ํ‚ค์›Œ๋“œ ๊ฐœ์ˆ˜ ๊ณ„์‚ฐ, ์‚ฌ์šฉ์ž๊ฐ€ ์‚ฌ์šฉํ•œ ๊ณ ์œ  ํ•ด์‹œํƒœ๊ทธ ๊ฐœ์ˆ˜ ๊ณ„์‚ฐ, ์ฑ…์— ๋‚˜์˜ค๋Š” ๊ณ ์œ  ๋‹จ์–ด ๊ฐœ์ˆ˜ ๊ณ„์‚ฐ ๋“ฑ์— ์“ฐ์ด๋ฉด ์ข‹๊ฒ ๋‹ค.
  • Command
    • PFADD : ํ•˜๋‚˜ ์ด์ƒ์˜ ๋ฌธ์ž์—ด์„ ํ•˜์ดํผ๋กœ๊ทธ๋กœ๊ทธ์— ์ถ”๊ฐ€ํ•œ๋‹ค.
      • ํ•˜์ดํผ๋กœ๊ทธ๋กœ๊ทธ์˜ ๊ฐœ์ˆ˜(cardinality)๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด 1์„ ๋ฆฌํ„ดํ•˜๊ณ , ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์œผ๋ฉด 0์„ ๋ฆฌํ„ดํ•œ๋‹ค.
    • PFCOUNT : ํ•˜๋‚˜ ์ด์ƒ์˜ ํ‚ค๋ฅผ ๋งค๊ฒŒ ๋ณ€์ˆ˜๋กœ ๋ฐ›๊ณ , ๊ทผ์‚ฌ์น˜ ๊ฐœ์ˆ˜๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค.
      • ๋‹ค์ค‘ ํ‚ค๋ฅผ ๋ช…์„ธํ•˜๋ฉด ๊ณ ์œ  ์—˜๋ฆฌ๋จผํŠธ ๊ฐœ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•˜๊ธฐ ์œ„ํ•ด ๊ทผ์‚ฌ์น˜ ๊ฐœ์ˆ˜๋กœ ๋ฆฌํ„ดํ•œ๋‹ค.
    • PFMERGE : ๋Œ€์ƒํ‚ค์™€ ํ•˜๋‚˜ ์ด์ƒ์˜ ํ•˜์ดํผ๋กœ๊ทธ๋กœ๊ทธ ํ‚ค๋ฅผ ๋งค๊ฒŒ๋ณ€์ˆ˜๋กœ ๋ฐ›์•„์•ผ ํ•˜๋ฉฐ, ๋ชจ๋“  ํ•˜์ดํผ๋กœ๊ทธ๋ฅผ ๋ณ‘ํ•ฉํ•˜๊ณ , ๋ณ‘ํ•ฉํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋Œ€์ƒ ํ‚ค์— ์ €์žฅํ•œ๋‹ค.


(PFADD, PFCOUNT, PFRANGE)



(Hyperloglog์™€ set ๋น„๊ต)


์ปค๋งจ๋“œ

1. Pub/Sub

  • Pub/Sub๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ํŠน์ • ์ˆ˜์‹ ์ž์—๊ฒŒ ์ง์ ‘ ๋ฐœ์†กํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ณณ์—์„œ ์“ฐ์ด๋Š” ํŒจํ„ด
  • Publish-Subscribe์˜ ์•ฝ์ž์ด๋‹ค.
  • Publisher์™€ Subscriber๊ฐ€ ํŠน์ • ์ฑ„๋„์„ ๋ฆฌ์Šค๋‹ ํ•˜๊ณ  ์žˆ๋‹ค๋ฉด Publisher๋Š” ์ฑ„๋„์— ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ด๊ณ , ๊ตฌ๋…์ž๋Š” ๋ฐœ์†ก์ž์˜ ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ›๋Š”๋‹ค.
  • redis๋Š” Pub/Sub ํŒจํ„ด ์„ ์ง€์›ํ•˜๊ณ , ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐœ์†กํ•˜๊ณ  ์ฑ„๋„์„ ๊ตฌ๋…ํ•˜๋Š” ์ปค๋งจ๋“œ๋ฅผ ์ œ๊ณตํ•œ๋‹ค.
  • Pub/Sub ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์˜ˆ์‹œ : ๋‰ด์Šค์™€ ๋‚ ์”จ ๋Œ€์‹œ๋ณด๋“œ, ์ฑ„ํŒ…, ์ง€ํ•˜์ฒ  ์ง€์—ฐ ๊ฒฝ๊ณ , SaltStack ํˆด์ด ์ง€์›ํ•˜๋Š” ๊ฒƒ๊ณผ ์œ ์‚ฌํ•œ ๋ฆฌ๋ชจํŠธ ์ฝ”๋“œ์˜ ์‹คํ–‰
  • Command
    • PUBLISH : ๋ฉ”์‹œ์ง€๋ฅผ ๋ ˆ๋””์Šค ์ฑ„๋„์— ๋ณด๋‚ด๊ณ  ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ›์€ ํด๋ผ์ด์–ธํŠธ ์ˆ˜๋ฅผ ๋ฆฌํ„ด.
    • SUBSCRIBE : ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํ•˜๋‚˜ ์ด์ƒ์˜ ์ฑ„๋„์„ ๊ตฌ๋…ํ•œ๋‹ค.
    • UNSUBSCRIBE : ํ•˜๋‚˜ ์ด์ƒ์˜ ์ฑ„๋„์—์„œ ํด๋ผ์ด์–ธํŠธ๋ฅผ ๊ตฌ๋… ํ•ด์ง€ํ•œ๋‹ค.
    • PSUBSCRIBE์™€ PUNSUBSCRIBE ์ปค๋งจ๋“œ๋Š” SUBSCRIVE์™€ UNSUBSCRIBE์™€ ๋™์ผํ•˜๊ฒŒ ์ž‘๋™ํ•˜์ง€๋งŒ ์ฑ„๋„ ์ด๋ฆ„์€ GLOB ํ˜•ํƒœ๋กœ ๋ฐ›๋Š”๋‹ค.
      • ๋ ˆ๋””์Šค ํด๋ผ์ด์–ธํŠธ๊ฐ€ SUBSCRIBE๋‚˜ PSUBSCRIBE ์ปค๋งจ๋“œ๋ฅผ ์‹คํ–‰ํ•œ๋‹ค๋ฉด ๊ตฌ๋…๋ชจ๋“œ์— ๋“ค์–ด๊ฐ€๊ธฐ ๋•Œ๋ฌธ์— SUBSCRIBE, PSUBSCRIBE, UNSUBSCRIBE, PUNSUBSCRIBE ์™ธ์˜ ๋‹ค๋ฅธ ์ปค๋งจ๋“œ๋ฅผ ๋ฐ›์ง€ ์•Š๋Š”๋‹ค.
    • PUBSUB : ๋ ˆ๋””์Šค์˜ PUB/SUB์‹œ์Šคํ…œ์˜ ์ƒํƒœ๋ฅผ ์กฐ์‚ฌํ•œ๋‹ค.
      • 3๊ฐœ์˜ ํ•˜์œ„ ์ปค๋งจ๋“œ CHANNELS, NUMSUB, NUMPAT๋ฅผ ๋ฐ›๋Š”๋‹ค.
      • PUBSUB CHANNELS [pattern] : ๋™์ž‘์ค‘์ธ ๋ชจ๋“  ์ฑ„๋„(์ตœ์†Œ ํ•˜๋‚˜์˜ ๊ตฌ๋…์ž ์กด์žฌ)์„ ๋ฆฌํ„ดํ•œ๋‹ค./
      • PUBSUB NUMSUB [channel-1, channel-2...] : ์ ‘์†ํ•œ ํด๋ผ์ด์–ธํŠธ์˜ ๊ฐœ์ˆ˜๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค.
      • PUBSUB NUMPAT : PSUBSCRIBE ์ปค๋งจ๋“œ๋ฅผ ํ†ตํ•ด ์ ‘์†ํ•œ ํด๋ผ์ด์–ธํŠธ์˜ ๊ฐœ์ˆ˜๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค.


(command๋กœ pub-sub ์ˆ˜ํ–‰)



(node๋กœ pub-sub ๊ตฌํ˜„ - sources/pub-sub/)


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

  • ๋ ˆ๋””์Šค์˜ ํŠธ๋žœ์žญ์…˜์€ ์ˆœ์„œ๋Œ€๋กœ ์›์ž์ ์œผ๋กœ ์‹คํ–‰๋˜๋Š” ์ปค๋งจ๋“œ์˜ ์—ด ์ด๋‹ค.
  • MULTI, EXEC
    • MULTI ์ปค๋งจ๋“œ๋Š” ํŠธ๋žœ์žญ์…˜์˜ ์‹œ์ž‘์„ ํ‘œ์‹œํ•˜๊ณ , EXEC ์ปค๋งจ๋“œ๋Š” ํŠธ๋žœ์žญ์…˜์˜ ๋งˆ์ง€๋ง‰์„ ํ‘œ์‹œํ•œ๋‹ค.
    • MULTI์™€ EXEC ์ปค๋งจ๋“œ ๊ฐ„์˜ ๋ชจ๋“  ์ปค๋งจ๋“œ๋Š” ์ง๋ ฌํ™”๋˜๋ฉฐ ์›์ž์ ์œผ๋กœ ์‹คํ–‰๋œ๋‹ค.
    • ๋ ˆ๋””์Šค๋Š” ํŠธ๋žœ์žญ์…˜์˜ ์ฒ˜๋ฆฌ ๋„์ค‘์— ๋‹ค๋ฅธ ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์— ์‘ํ•˜์ง€ ์•Š๋Š”๋‹ค.
    • ํŠธ๋žœ์žญ์…˜์˜ ๋ชจ๋“  ์ปค๋งจ๋“œ๋Š” ํด๋ผ์ด์–ธํŠธ์˜ ํ์— ์Œ“์ด๊ณ , EXEC ์ปค๋งจ๋“œ๊ฐ€ ์‹คํ–‰๋˜๋ฉด์„œ ์„œ๋ฒ„๋กœ ์ „๋‹ฌ๋œ๋‹ค.
    • EXEC ์ปค๋งจ๋“œ ๋Œ€์‹  DISCARD ์ปค๋งจ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด, ํŠธ๋žœ์žญ์…˜์€ ์‹คํ–‰๋˜์ง€ ์•Š๋Š”๋‹ค.
    • ๊ธฐ์กด์˜ SQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ๋‹ฌ๋ฆฌ, ๋ ˆ๋””์Šค์˜ ํŠธ๋žœ์žญ์…˜์€ ํŠธ๋žœ์žญ์…˜ ๊ณผ์ •์„ ์‹คํ–‰ํ•˜๋‹ค ์‹คํŒจํ•˜๋”๋ผ๋„ ๋กค๋ฐฑํ•˜์ง€ ์•Š๋Š”๋‹ค.
    • ๋ ˆ๋””์Šค๋Š” ํŠธ๋žœ์žญ์…˜์˜ ์ปค๋งจ๋“œ๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ์‹คํ–‰ํ•˜๊ณ , ์ปค๋งจ๋“œ ์ค‘ ์ผ๋ถ€๊ฐ€ ์‹คํŒจํ•˜๋ฉด ๋‹ค์Œ ์ปค๋งจ๋“œ๋กœ ์ฒ˜๋ฆฌํ•œ๋‹ค.
    • ๋ ˆ๋””์Šค ํŠธ๋žœ์žญ์…˜์˜ ๋‹จ์ ์€ ๋ชจ๋“  ์ปค๋งจ๋“œ๊ฐ€ ํ์— ์Œ“์ด๊ธฐ ๋•Œ๋ฌธ์—, ํŠธ๋žœ์žญ์…˜ ๋‚ด๋ถ€์—์„œ ์–ด๋– ํ•œ ๊ฒฐ์ •๋„ ๋‚ด๋ฆด ์ˆ˜ ์—†๋‹ค๋Š” ์ ์ด๋‹ค.
  • WATCH, UNWATCH
    • ํ‚ค ๊ทธ๋ฃน์— ๋‚™๊ด€์  ์žก๊ธˆ(Optimistic Lock)์„ ๊ตฌํ˜„ํ•œ WATCH ์ปค๋งจ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ํŠธ๋žœ์žญ์…˜์„ ์กฐ๊ฑด๋ถ€๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • WATCH๊ฐ€ ์ปค๋งจ๋“œ๋Š” ์ฃผ์‹œ๋ฐ›๋Š” ํ‚ค๋ฅผ ํ‘œ์‹œํ•˜๊ณ  ์ฃผ์‹œ๋ฐ›๋Š” ํ‚ค๊ฐ€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์œผ๋ฉด EXEC ์ปค๋งจ๋“œ๋Š” ํŠธ๋žœ์žญ์…˜๋งŒ ์‹คํ–‰ํ•œ๋‹ค.
    • ์ฃผ์‹œ๋ฐ›๋Š” ํ‚ค๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด null์„ ๋ฆฌํ„ดํ•˜๊ณ , ํ•ด๋‹น ์ปค๋งจ๋“œ๋ฅผ ๋‹ค์‹œ ์‹คํ–‰์‹œ์ผœ์•ผ ํ•œ๋‹ค.
    • UNWATCH ์ปค๋งจ๋“œ๋Š” ์ฃผ์‹œ๋ชฉ๋ก์— ์žˆ๋Š” ํ‚ค๋ฅผ ์ œ๊ฑฐํ•œ๋‹ค.


(node์—์„œ ๋ฉ€ํ‹ฐ exec ํŠธ๋žœ์ ์…˜ ํ…Œ์ŠคํŠธ sources/transaction/bank-transaction.js)



(node์—์„œ watch ํŠธ๋žœ์ ์…˜ ํ…Œ์ŠคํŠธ sources/transaction/watch-transaction.js)


3. ํŒŒ์ดํ”„๋ผ์ธ (์ž๋ฐ” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์กฐ์‚ฌ ํ•„์š”)

  • ๋ ˆ๋””์Šค์—์„œ ํŒŒ์ดํ”„๋ผ์ธ์€ ๋‹ค์ค‘ ์ปค๋งจ๋“œ๋ฅผ ๋ ˆ๋””์Šค ์„œ๋ฒ„์— ํ•œ๊บผ๋ฒˆ์— ๋ณด๋‚ด๋Š” ๋ฐฉ๋ฒ• ์„ ๋งํ•˜๋ฉฐ, ๊ฐœ๋ณ„ ์‘๋‹ต์„ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๊ณ  ํด๋ผ์ด์–ธํŠธ์— ์˜ํ•ด ์‘๋‹ต์„ ํ•œ๊บผ๋ฒˆ์— ์ฝ์„ ์ˆ˜ ์žˆ๋‹ค.
  • ๋ ˆ๋””์Šค ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ปค๋งจ๋“œ๋ฅผ ๋ณด๋‚ด๊ณ  ๋ ˆ๋””์Šค ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์‘๋‹ต์„ ๋ฐ›๋Š”๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์„ Round Trip Time(RTT) ๋ผ๊ณ  ํ•œ๋‹ค.
  • ๋‹ค์ค‘ ์ปค๋งจ๋“œ๋ฅผ ๋ ˆ๋””์Šค๋กœ ๋ณด๋‚ด๋ฉด ๋‹ค์ค‘ RTT๊ฐ€ ์กด์žฌํ•œ๋‹ค.
  • ํŒŒ์ดํ”„๋ผ์ธ์„ ํ™œ์šฉํ•˜๋ฉด ์ด RTT ๊ฐ’์„ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค. (10๊ฐœ์˜ ์ปค๋งจ๋“œ๋ฅผ ํ•œ๊บผ๋ฒˆ์— ๋ณด๋‚ด๋ฉด 10RTT๊ฐ€ ์•„๋‹Œ 1RTT๊ฐ€ ๊ฑธ๋ฆฐ๋‹ค.)
  • ์ฆ‰ ๋ ˆ๋””์Šค ๋„คํŠธ์›Œํฌ ์„ฑ๋Šฅ์„ ํ™•์—ฐํžˆ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ํŒŒ์ดํ”„๋ผ์ธ์œผ๋กœ ์ „๋‹ฌ๋œ ๋ ˆ๋””์Šค ์ปค๋งจ๋“œ๋Š” ๋…๋ฆฝ์ ์ด์–ด์•ผ ํ•œ๋‹ค.
    • ๋ ˆ๋””์Šค ์ปค๋งจ๋“œ๋Š” ์„œ๋ฒ„์—์„œ ์ˆœ์ฐจ์ ์œผ๋กœ ์‹คํ–‰๋˜์ง€๋งŒ, ํŠธ๋ Œ์žญ์…˜ ์ฒ˜๋ฆฌ๊ฐ€ ๋˜์ง€ ์•Š๋Š”๋‹ค.
    • ํŒŒ์ดํ”„๋ผ์ธ์ด ์ „ํ˜€ ํŠธ๋žœ์žญ์…˜์ ์ด๊ฑฐ๋‚˜ ์›์ž์ ์ด์ง€ ์•Š๋‹ค๊ณ  ํ•ด๋„(์„œ๋กœ ๋‹ค๋ก  ๋ ˆ๋””์Šค ์ปค๋งจ๋“œ๊ฐ€ ํ•˜๋‚˜์˜ ํŒŒ์ดํ”„๋ผ์ธ์—์„œ ์‹คํ–‰๋จ) ๋ถ€ํ•˜๊ฐ€ ๋†’์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋„คํŠธ์›Œํฌ ๋ณ‘๋ชฉ ํ˜„์ƒ์„ ๋ฐœ์ƒ์‹œํ‚ค๋Š” ๋ถ€๋ถ„ ๋“ฑ์„ ๊ฐœ์„ ํ•˜๋Š”๋ฐ์—๋Š” ์—ฌ์ „ํžˆ ์œ ์šฉํ•˜๋‹ค.
  • ํ˜„์žฌ ์ด์šฉ์ค‘์ธ node_redis ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ํŒŒ์ดํ”„๋ผ์ธ์„ ์ด์šฉํ•˜์—ฌ ์ปค๋งจ๋“œ๋ฅผ ๋ณด๋‚ธ๋‹ค.
  • ํ•˜์ง€๋งŒ ๋‹ค๋ฅธ ํด๋ผ์ด์–ธํŠธ๋“ค์€ ํŒŒ์ดํ”„๋ผ์ธ์„ ๊ธฐ๋ณธ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ด ๋ถ€๋ถ„์„ ์‚ดํŽด๋ณผ ํ•„์š”๊ฐ€ ์žˆ๋‹ค.

4. ์Šคํฌ๋ฆฝํŠธ

  • ๋ ˆ๋””์Šค์—์„œ ๋ฃจ์•„ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋‹ค.
  • ๋ฃจ์•„ ์Šคํฌ๋ฆฝํŠธ๋Š” ์›์ž์ ์œผ๋กœ ์‹คํ–‰๋œ๋‹ค, ์ฆ‰ ๋ ˆ๋””์Šค ์„œ๋ฒ„์—์„œ ๋ฃจ์•„ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์‹คํ–‰๋˜๋Š” ๋™์•ˆ ๋ ˆ๋””์Šค ์„œ๋ฒ„๋Š” ๋ธ”๋ก๋œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.
  • ์ด๋Ÿฐ ์ด์œ ๋กœ ๋ ˆ๋””์Šค๋Š” ๋ฃจ์•„ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ๊ธฐ๋ณธ 5์ดˆ์˜ ํƒ€์ž„์•„์›ƒ์„ ๊ฐ€์ง„๋‹ค.
  • lua-tim-limit ์„ค์ •์„ ์ˆ˜์ •ํ•ด ๋ฃจ์•„ ์Šคํฌ๋ฆฝํŠธ์˜ ํƒ€์ž„์•„์›ƒ ๊ฐ’์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋ ˆ๋””์Šค๋Š” ๋ฃจ์•„ ์Šคํฌ๋ฆฝํŠธ์˜ ํƒ€์ž„์•„์›ƒ์ด ๋ฐœ์ƒํ–ˆ์„ ๋•Œ, ์ž๋™์œผ๋กœ ๋ฃจ์•„ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ข…๋ฃŒํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • ๋Œ€์‹  ๋ฃจ์•„ ์ŠคํทํŠธ๊ฐ€ ๋™์ž‘ ์ค‘์ž„์„ ์•Œ๋ฆฌ๊ธฐ ์œ„ํ•ด๋ชจ๋“  ์ปค๋ฉ˜๋“œ์— BUSY ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ธ๋‹ค.
  • ๋ฃจ์•„ ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰์„ ์ทจ์†Œํ•ด ์„œ๋ฒ„๋ฅผ ์ •์ƒ์œผ๋กœ ๋งŒ๋“œ๋Š” ์œ ์ผํ•œ ๋ฐฉ๋ฒ•์€ SCRIPT KILL ์ปค๋งจ๋“œ ํ˜น์€ SHUTDOWN NOSAVE ์ปค๋งจ๋“œ์˜ ํ˜ธ์ถœ์ด๋‹ค.
  • ์ด์ƒ์ ์œผ๋กœ ์Šคํฌ๋ฆฝํŠธ๋Š” ๊ฐ„๋‹จํ•ด์•ผ ํ•˜๊ณ , ๋‹จ์ผ ์ฑ…์ž„์„ ๊ฐ€์ ธ์•ผ ํ•˜๋ฉฐ, ๋นจ๋ฆฌ ์‹คํ–‰๋ผ์•ผ ํ•œ๋‹ค.
  • ๋ฃจ์•„ ์Šคํฌ๋ฆฝํŠธ ๋‚ด์—์„œ ๋ ˆ๋””์Šค ์ปค๋งจ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋‘ ๊ฐœ์˜ ํ•จ์ˆ˜(redis.call๊ณผ redis.pcall)
    • redis.call : ์ปค๋งจ๋“œ ์ด๋ฆ„๊ณผ ๋ชจ๋“  ํ•จ์ˆ˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋ฐ›์œผ๋ฉฐ ์ปค๋งจ๋“œ ๊ฒฐ๊ณผ๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค.
    • redis.pcall : redis.call ํ•จ์ˆ˜์™€ ๋น„์Šทํ•˜์ง€๋งŒ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ ๋ฃจ์•„ ํ…Œ์ด๋ธ”๋กœ ์—๋Ÿฌ๋ฅผ ๋ฆฌํ„ดํ•˜๊ณ  ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๊ณ„์† ์ง„ํ–‰ํ•œ๋‹ค.
  • ๋ฃจ์•„ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋Š” 2๊ฐœ์˜ ์ปค๋งจ๋“œ๋Š” EVAL, EVALSHA๊ฐ€ ์žˆ๋‹ค.
    • EVAL์€ ๋‹จ์ˆœ ๋ฃจ์•„ ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰์ธ ๋ฐ˜๋ฉด EVALSHA๋Š” SCRIPT LOAD ์ปค๋งจ๋“œ๊ฐ€ ๋ฆฌํ„ดํ•œ ์‹๋ณ„์ž๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฃจ์•„ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.


(node์—์„œ lua script in redis ํ…Œ์ŠคํŠธ sources/lus-script/intro-lua.js)



(node์—์„œ lua script ๋ฅผ ์ด์šฉํ•˜์—ฌ zpop ์ˆ˜ํ–‰ sources/lus-script/zpop-lua.js)



(node์—์„œ lua script evalsha๋ฅผ ์ด์šฉํ•˜์—ฌ zpop ์ˆ˜ํ–‰ sources/lus-script/zpop-lua-evalsha.js)


5. ๊ธฐํƒ€ ์ปค๋งจ๋“œ

  • INFO : ๋ ˆ๋””์Šค ๋ฒ„์ „๊ณผ ์šด์˜์ฒด์ œ, ์—ฐ๊ฒฐ๋œ ํด๋ผ์ด์–ธํŠธ, ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰, ์ €์žฅ์†Œ, ๋ณต์ œ๋ณธ, ํ‚ค ์ŠคํŽ˜์ด์Šค์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ํฌํ•จํ•œ ๋ชจ๋“  ๋ ˆ๋””์Šค ์„œ๋ฒ„ ํ†ต๊ณ„๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค.
    • ๊ธฐ๋ณธ์ ์œผ๋กœ INFO ์ปค๋งจ๋“œ๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ์„น์…˜์„ ๋ณด์—ฌ์ค€๋‹ค.
    • ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์„น์…˜ ์ด๋ฆ„์„ ๋ช…์„ธํ—ค ๊ฒฐ๊ณผ๋ฅผ ์ œํ•œํ•  ์ˆ˜๋„ ์žˆ๋‹ค. (memory, cpu ๋“ฑ)
  • CONFIG : ๋ ˆ๋””์Šค ์„ค์ •์„ ๋ณด์—ฌ์ค€๋‹ค
  • DBSIZE : ๋ ˆ๋””์Šค ์„œ๋ฒ„์— ์กด์žฌํ•˜๋Š” ํ‚ค ๊ฐœ์ˆ˜๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค.
  • DEBUG SEGFAULT : ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์€ ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ์„ ์ˆ˜ํ–‰ํ•ด ๋ ˆ๋””์Šค ์„œ๋ฒ„ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ข…๋ฃŒํ•œ๋‹ค.
    • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ ์ค‘ ๋ฒ„๊ทธ๋ฅผ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ํ•  ๋•Œ ์œ ์šฉํ•˜๋‹ค.
  • MONITOR : ๋ ˆ๋””์Šค ์„œ๋ฒ„๊ฐ€ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ชจ๋“  ์ปค๋งจ๋“œ๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ณด์—ฌ์ค€๋‹ค.
  • CLIENT LIST : ํด๋ผ์ด์–ธํŠธ์— ๋Œ€ํ•œ ๊ด€๋ จ ์ •๋ณด์™€ ํ†ต๊ณ„๋ฟ ์•„๋‹ˆ๋ผ ์„œ๋ฒ„์— ์—ฐ๊ฒฐ๋œ ๋ชจ๋“  ํด๋ผ์ด์–ธํŠธ ๋ชฉ๋ก์„ ๋ฆฌํ„ดํ•œ๋‹ค.
  • CLIENT SETNAME : ํด๋ผ์ด์–ธํŠธ์˜ ์ด๋ฆ„์„ ๋ณ€๊ฒฝํ•œ๋‹ค.
  • CLIENT KILL : ํด๋ผ์ด์–ธํŠธ์˜ ์—ฐ๊ฒฐ์„ ์ข…๋ฃŒํ•œ๋‹ค. IP๋‚˜ ํฌํŠธ iD ํƒ€์ž…์œผ๋กœ ํด๋ผ์ด์–ธํŠธ ์—ฐ๊ฒฐ์„ ์ข…๋ฃŒํ•  ์ˆ˜ ์žˆ๋‹ค.
  • FLUSHALL : ๋ ˆ๋””์Šค์˜ ๋ชจ๋“  ํ‚ค๋ฅผ ์‚ญ์ œํ•œ๋‹ค. ์‚ญ์ œํ•œ ํ‚ค๋Š” ๋‹ค์‹œ ๋ณต๊ตฌํ•  ์ˆ˜ ์—†๋‹ค.
  • RANDOMKEY : ์กด์žฌํ•˜๋Š” ํ‚ค ์ค‘ ๋ฌด์ž‘์œ„๋กœ ์„ ํƒํ•œ ํ•˜๋‚˜์˜ ํ‚ค ์ด๋ฆ„์„ ๋ฆฌํ„ดํ•œ๋‹ค.
  • EXIRE : ํŠน์ • ํ‚ค์˜ ํƒ€์ž„์•„์›ƒ์„ ์ดˆ ๋‹จ์œ„๋กœ ์„ค์ •ํ•œ๋‹ค.
  • EXPIREAT : ์œ ๋‹‰์Šค ํƒ€์ž„์Šคํƒฌํ”„๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํŠน์ • ํ‚ค์˜ ํƒ€์ž„์•„์›ƒ์„ ์„ค์ •ํ•œ๋‹ค.
  • TTL : ํƒ€์ž„์•„์›ƒ ๊ฐ’์ด ์žˆ๋Š” ํ‚ค์˜ ๋‚จ์•„ ์žˆ๋Š” ์ƒ์กด์‹œ๊ฐ„์„ ์ดˆ ๋‹จ์œ„๋กœ ๋ฆฌํ„ดํ•œ๋‹ค.
  • PTTL : TTL๊ณผ ๊ฐ™์ง€๋งŒ ๋‹จ์œ„๊ฐ€ ๋ฐ€๋ฆฌ ์ดˆ์ด๋‹ค.
  • PERSIST : ํŠน์ • ํ‚ค์— ์ฃผ์–ด์ง„ ํ˜„์กด ํƒ€์ž„์•„์›ƒ์„ ์ œ๊ฑฐํ•œ๋‹ค.
  • SETEX : ํŠน์ • ํ‚ค์— ๊ฐ’์„ ์ €์žฅํ• ๋•Œ ๋งŒ๋ฃŒ ์‹œ๊ฐ„๋„ ํ•จ๊ป˜ ์›์ž์ ์œผ๋กœ ์„ค์ •ํ•œ๋‹ค.
  • DEL : ํ•˜๋‚˜ ์ด์ƒ์˜ ํ‚ค๋ฅผ ๋ ˆ๋””์Šค์—์„œ ์‚ญ์ œํ•œ๋‹ค.
  • EXISTS : ํŠน์ • ํ‚ค๊ฐ€ ์กด์žฌํ•˜๋ฉด 1์„, ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉด 0์„ ๋ฆฌํ„ดํ•œ๋‹ค.
  • PING : PONG ๋ฌธ์ž์—ด์„ ๋ฆฌํ„ดํ•œ๋‹ค. ๋ ˆ๋””์Šค๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ตํ™˜ํ•  ์ˆ˜ ์žˆ๋Š” ์ƒํƒœ์ธ์ง€๋ฅผ ํ™•์ธํ•  ๋•Œ ์œ ์šฉํ•˜๋‹ค.
  • MIGRATE : ํŠน์ • ํ‚ค๋ฅผ ๋Œ€์ƒ ๋ ˆ๋””์Šค ์„œ๋ฒ„๋กœ ์˜ฎ๊ธด๋‹ค. ํ‚ค๋ฅผ ์ €์žฅํ•  ๋ ˆ๋””์Šค ์„œ๋ฒ„์— ํ‚ค๊ฐ€ ์กด์žฌํ•œ๋‹ค๋ฉด ์‹คํŒจํ•œ๋‹ค.
  • SELECT : ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์—ฐ๊ฒฐ๋œ ํ˜„์žฌ์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋ณ€๊ฒฝํ•œ๋‹ค. (๋ ˆ๋””์Šค๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋‹ค์ค‘ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์ด๋‹ค.)
  • AUTH : ๋ ˆ๋””์Šค์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ํด๋ผ์ด์–ธํŠธ๋ฅผ ํ—ˆ๊ฐ€(authorization)ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.
  • SCRIPT KILL : ๋ฃจ์•„ ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰์„ ์ข…๋ฃŒํ•œ๋‹ค.
  • SHUTDOWN : ๋ชจ๋“  ํด๋ผ์ด์–ธํŠธ๋ฅผ ์ข…๋ฃŒํ•˜๊ณ , ์ตœ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋ ค๊ณ  ํ•œ ํ›„ ๋ ˆ๋””์Šค ์„œ๋ฒ„๋ฅผ ์ข…๋ฃŒํ•œ๋‹ค.
    • SAVE, NOSAVE ๋‘๊ฐœ์˜ ๋งค๊ฐœ๋ณ€์ˆ˜ ์ค‘ ํ•˜๋‚˜๋ฅผ ๋ฐ›๋Š”๋‹ค.
  • OBJECT ENCODING : ์ฃผ์–ด์ง„ ํ‚ค์—์„œ ์‚ฌ์šฉ์ค‘์ธ ์ธ์ฝ”๋”ฉ ๊ฐ’์„ ๋ฆฌํ„ดํ•œ๋‹ค.


(max entries ๊ด€๋ จํ•œ config ์กฐํšŒ)


๋ฐ์ดํ„ฐ ํƒ€์ž…์˜ ์ตœ์ ํ™”

  • ๋ ˆ๋””์Šค์—์„œ ๋ชจ๋“  ๋ฐ์ดํ„ฐ ํƒ€์ž…์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ €์žฅํ•˜๊ฑฐ๋‚˜ ์„ฑ๋Šฅ์„ ๋†’์ด๋Š” ๋‹ค์–‘ํ•œ ์ธ์ฝ”๋”ฉ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์˜ˆ๋ฅผ ๋“ค์–ด ๋‹จ์ง€ ์ˆซ์ž๋งŒ ๊ฐ–๋Š” ๋ฌธ์ž์—ด์€ ๋‹ค๋ฅธ ์ธ์ฝ”๋”ฉ์„ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ธ€์ž๋งŒ ๊ฐ–๋Š” ๋ฌธ์ž์—ด๋ณด๋‹ค ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋œ ์‚ฌ์šฉํ•œ๋‹ค.
  • ๋ฐ์ดํ„ฐ ํƒ€์ž…์€ ๋ ˆ๋””์Šค์˜ ์„œ๋ฒ„ ์„ค์ •์— ์ •์˜๋œ ์ž„๊ณ„ ๊ฐ’์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋‹ค์–‘ํ•œ ์ธ์ฝ”๋”ฉ์„ ์‚ฌ์šฉํ•œ๋‹ค.
  • ๋ณดํ†ต redis.conf ํŒŒ์ผ์—์„œ ์ด๋Ÿฌํ•œ ์„ค์ •๋“ค์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
  • linked list ์„ค๋ช… : http://redisgate.kr/redis/configuration/internal_linkedlist.php
  • ziplist ์„ค๋ช… : http://redisgate.kr/redis/configuration/internal_ziplist.php
  • quicklist, ์••์ถ•๋œ quicklist ์„ค๋ช… : http://redisgate.kr/redis/configuration/internal_quicklist.php

1. ๋ฌธ์ž์—ด

  • ๋ฌธ์ž์—ด์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ธ์ฝ”๋”ฉ ์ •๋ณด๋Š” int, embstr, raw ์„ธ๊ฐ€์ง€์ด๋‹ค.
  • embstr์€ 40๋ฐ”์ดํŠธ๋ณด๋‹ค ์ž‘์€ ๋ฌธ์ž์—ด, raw๋Š” 40๋ฐ”์ดํŠธ๋ณด๋‹ค ํฐ ๋ฌธ์ž์—ด์„ ํ‘œํ˜„ํ•  ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค.


(string ๋ฐ์ดํ„ฐ ํƒ€์ž…)


2. ๋ฆฌ์ŠคํŠธ

  • ๋ฆฌ์ŠคํŠธ์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ธ์ฝ”๋”ฉ์€ ziplist์™€ linked list๊ฐ€ ์žˆ๋‹ค.
    • ziplist : ๋ฆฌ์ŠคํŠธ ํฌ๊ธฐ์˜ ์—˜๋ฆฌ๋จผํŠธ๊ฐ€ list-max-ziplist-entires ์„ค์ •๋ณด๋‹ค ์ž‘๊ณ , ๋ฆฌ์ŠคํŠธ์˜ ๊ฐœ๋ณ„ ๋ฐ”์ดํŠธ๊ฐ€ list-max-ziplist-value ์„ค์ •๋ณด๋‹ค ์ž‘๋‹ค๋ฉด ์ง‘ ๋ฆฌ์ŠคํŠธ๊ฐ€ ์‚ฌ์šฉ๋œ๋‹ค.
    • linked list : ๋ฆฌ์ŠคํŠธ ํฌ๊ธฐ์˜ ์—˜๋ฆฌ๋จผํŠธ๊ฐ€ list-max-ziplist-entires ์„ค์ •๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜, ๋ฆฌ์ŠคํŠธ์˜ ๊ฐœ๋ณ„ ์—˜๋ฆฌ๋จผํŠธ์˜ ๋ฐ”์ดํŠธ๊ฐ€ list-max-ziplist-value ์„ค์ •๋ณด๋‹ค ํฌ๋ฉด linked list๊ฐ€ ์‚ฌ์šฉ๋œ๋‹ค.
  • ํ˜„์žฌ๋Š” quick list๋งŒ ์‚ฌ์šฉ๋œ๋‹ค๊ณ  ํ•˜๋˜๋ฐ ์กฐ๊ธˆ ๋” ์กฐ์‚ฌ๊ฐ€ ํ•„์š”ํ•˜๋‹ค (https://matt.sh/redis-quicklist)
    • ziplist๊ฐ€ ์—ฌ๋Ÿฌ๊ฐœ ๋ฆฌ์ŠคํŠธ๋กœ ๋˜์–ด ์žˆ๋Š” ํ˜•ํƒœ๋ผ๊ณ  ํ•จ.
    • ziplist์˜ ๋งˆ์ง€๋ง‰๋ณด๋‹ค ์ฐพ๋Š” ์ธ๋ฑ์Šค๊ฐ€ ๋‹ค์Œ์— ์žˆ์œผ๋ฉด ๋‹ค์Œ ziplist๋กœ ์ด๋™ํ•˜๋Š” ํ˜•์‹์œผ๋กœ ๋‹ค์ˆ˜๋ฅผ skipํ•˜์—ฌ ๋ฆฌ์ŠคํŠธ ํƒ์ƒ‰ ์‹œ๊ฐ„์„ ์ค„์ž„


(list ๋ฐ์ดํ„ฐ ํƒ€์ž… - ์ฑ…์—์„œ ๋ณธ ๊ฒƒ๊ณผ ๋‹ค๋ฅด๋‹ค. ์š”์ฆ˜์€ ์ „๋ถ€ quick list๋ผ๊ณ  ํ•œ๋‹ค.)


3. ์…‹

  • ์…‹์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ธ์ฝ”๋”ฉ์€ intset, hashtable์ด๋‹ค.
    • intset : ์…‹์˜ ๋ชจ๋“  ์—˜๋ฆฌ๋จผํŠธ๊ฐ€ ์ •์ˆ˜๊ณ  ์…‹์˜ ๊ฐœ์ˆ˜๊ฐ€ set-max-intset-entries ์„ค์ •๋ณด๋‹ค ์ž‘์œผ๋ฉด ์ธํŠธ์…‹์ด ์‚ฌ์šฉ๋œ๋‹ค.
    • hashtable : ์…‹์˜ ์—˜๋ฆฌ๋จผํŠธ ์ค‘ ํ•˜๋‚˜๋ผ๋„ ์ •์ˆ˜๊ฐ€ ์•„๋‹ˆ๊ฑฐ๋‚˜, ์…‹์˜ ๊ฐœ์ˆ˜๊ฐ€ set-max-intset-entries ์„ค์ •๋ณด๋‹ค ํฌ๋ฉด ํ•ด์‹œํ…Œ์ด๋ธ”์ด ์‚ฌ์šฉ๋œ๋‹ค.


(set ๋ฐ์ดํ„ฐ ํƒ€์ž…)


4. ํ•ด์‹œ

  • ํ•ด์‹œ์—์„œ๋Š” ziplist, hashtable ์ธ์ฝ”๋”ฉ์„ ์‚ฌ์šฉํ•œ๋‹ค.
    • ziplist : ํ•ด์‹œ์˜ ํ•„๋“œ ๊ฐœ์ˆ˜๊ฐ€ hash-max-ziplist-entries ์„ค์ •๋ณด๋‹ค ์ž‘๊ณ  ํ•ด์‹œ์˜ ํ•„๋“œ ์ด๋ฆ„๊ณผ ๊ฐ’์ด hash-max-ziplist-value ์„ค์ •๋ณด๋‹ค ์ž‘์œผ๋ฉด ์ง‘ ๋ฆฌ์ŠคํŠธ๊ฐ€ ์‚ฌ์šฉ๋œ๋‹ค.
    • hashtable : ํ•ด์‹œ์˜ ํ•„๋“œ ๊ฐœ์ˆ˜๊ฐ€ hash-max-ziplist-entries ์„ค์ •๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ํ•ด์‹œ์˜ ํ•„๋“œ ๊ฐ’ ์ค‘ ํ•˜๋‚˜๋ผ๋„ hash-max-ziplist-value(๋ฐ”์ดํŠธ) ์„ค์ •๋ณด๋‹ค ํฌ๋ฉด ํ•ด์‹œํ…Œ์ด๋ธ”์ด ์‚ฌ์šฉ๋œ๋‹ค.


(hash ๋ฐ์ดํ„ฐ ํƒ€์ž…)


5. ์ •๋ ฌ๋œ ์…‹

  • sorted set์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ธ์ฝ”๋”ฉ์€ ziplist, skiplist + hashtable ์ด๋‹ค.
    • ziplist : ์ •๋ ฌ๋œ ์…‹์˜ ๊ฐœ์ˆ˜๊ฐ€ set-max-ziplist-entries ์„ค์ •๋ณด๋‹ค ์ž‘๊ณ , ์ •๋ ฌ๋œ ์…‹์˜ ์—˜๋ฆฌ๋จผํŠธ ๊ฐ’์ด ๋ชจ๋‘ zset-max-ziplist-value(๋ฐ”์ดํŠธ)์„ค์ •๋ณด๋‹ค ์ž‘์œผ๋ฉด ์ง‘๋ฆฌ์ŠคํŠธ๊ฐ€ ์‚ฌ์šฉ๋œ๋‹ค.
    • skiplist + hashtable : ์ •๋ ฌ๋œ ์…‹์˜ ๊ฐœ์ˆ˜๊ฐ€ set-max-ziplist-entries ์„ค์ •๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ sorted set์˜ ์—˜๋ฆฌ๋จผํŠธ ๊ฐ’ ์ค‘ ํ•˜๋‚˜๋ผ๋„ zset-max-ziplist-value(๋ฐ”์ดํŠธ) ์„ค์ •๋ณด๋‹ค ํฌ๋ฉด skiplist + hashtable์ด ์‚ฌ์šฉ๋œ๋‹ค.
  • ๊ฐ•์ œ๋กœ ์ธ์ฝ”๋”ฉ์„ ziplist๋กœ ์ „ํ™˜์‹œํ‚ฌ์ˆ˜๋Š” ์žˆ์œผ๋‚˜, ์„ฑ๋Šฅ๊ณผ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์— ๋Œ€ํ•œ ํŠธ๋ ˆ์ด๋“œ ์˜คํ”„์ด๊ธฐ ๋•Œ๋ฌธ์— ์ž˜ ์ƒ๊ฐํ•ด๋ด์•ผ ํ•œ๋‹ค.
  • ํ…Œ์ŠคํŠธ ์ดํ›„ "INFO MEMORY" command๋ฅผ ํ†ตํ•ด ์‹ค์ œ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์„ ์ธก์ •ํ•ด ๋ณผ ์ˆ˜ ์žˆ๋‹ค.


(sorted set ๋ฐ์ดํ„ฐ ํƒ€์ž…)


์ผ๋ฐ˜์ ์ธ ์‹ค์ˆ˜

  • bitmap์€ set, list์™€ ๋‹ค๋ฅด๊ฒŒ ๋“ค์–ด๊ฐ„ ํ‚ค์˜ ์‚ฌ์ด์ฆˆ ์ค‘ ๊ฐ€์ž” ํฐ ์‚ฌ์ด์ฆˆ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์‚ฌ์ด์ฆˆ๊ฐ€ ํ”ฝ์Šค ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ €์žฅ ๊ณต๊ฐ„ ํšจ์œจ์ด ๋” ์•ˆ์ข‹์„ ์ˆ˜ ์žˆ๋‹ค.
  • ๋ ˆ๋””์Šค์—๋Š” ๋‹ค์ค‘ ๋ ˆ๋””์Šค ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ์กด์žฌํ•˜๊ธด ํ•˜์ง€๋งŒ ์ด๋ฏธ ๋ ˆ๋””์Šค์—์„œ ๋‹ค์ค‘ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ์‚ฌ๋ผ์งˆ ๊ฒƒ์ด๋ผ๊ณ  ๊ณต์‹ ๋ฐ”๋ฃŒ๋œ ์ƒํƒœ์ด๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค.
    • ๋ ˆ๋””์Šค๋Š” ๋‹จ์ผ ์Šค๋ ˆ๋“œ ๊ธฐ๋ฐ˜์ด๋ฏ€๋กœ, ํ•˜๋‚˜์˜ ๋ ˆ๋””์Šค ์„œ๋ฒ„์˜ ๋‹ค์ค‘ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ํ•˜๋‚˜์˜ cpu ์ฝ”์–ด๋งŒ ์‚ฌ์šฉํ•œ๋‹ค.
    • ๋‹ค์ค‘ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ๋ ˆ๋””์Šค ๊ด€๋ฆฌ๋ฅผ ์–ด๋ ต๊ฒŒ ํ•˜๊ณ  ์„ฑ๋Šฅ๊ณผ ์ž์›์— ๋Œ€ํ•œ ์‚ฌ์šฉ ์ง„๋‹จ์„ ๋ณต์žกํ•˜๊ฒŒ ํ•œ๋‹ค.
  • ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค.
    • ํ‚ค ์ด๋ฆ„์„ ์ •์˜ํ• ๋•Œ ์ถฉ๋Œ์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ •๋ณด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ‚ค๋ฅผ ๊ตฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ์ž‘์„ฑํ•ด๋ผ.
    • ๋ ˆ๋””์Šค๋Š” ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๊ธฐ๋Šฅ์„ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค. ๊ทธ๋ž˜์„œ prefix๋ฅผ ์ง์ ‘ ์ž‘๋ช…ํ•ด ๋ถ™์—ฌ๋ผ.
  • ์Šค์™‘๊ณต๊ฐ„ ์„ค์ •์„ ํ™•์‹คํžˆ ํ•ด๋ผ
  • ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ ์ ˆํ•˜๊ฒŒ ์„ค์ •ํ•ด์•ผํ•œ๋‹ค.
    • ๋ ˆ๋””์Šค๋Š” ๋ฐฑ์—… ํ”„๋กœ์„ธ์Šค์—์„œ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์ตœ๋Œ€ 2๋ฐฐ ๋กœ ๋Š˜์–ด๋‚  ์ˆ˜ ์žˆ๋‹ค.
    • RDB snapshot์„ ์ƒ์„ฑํ•˜๊ณ  AOF rewrite์ด ์ง„ํ–‰๋˜๋Š” ๋™์•ˆ redis-server๋Š” ๋ ˆ๋””์Šค๋ฅผ ๋ณต์ œํ•ด์•ผํ•œ๋‹ค. ์ฆ‰ 2๋ฐฐ์˜ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋“ค ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ.
    • ๋”ฐ๋ผ์„œ ๋ ˆ๋””์Šค๋Š” ๋ฉ”๋ชจ๋ฆฌ์˜ 50ํผ์„ผํŠธ ์ด์ƒ์„ ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ•˜๋„๋ก ํ•ด์•ผํ•˜๋ฉฐ, ๋ ˆ๋””์Šค ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์— ๋Œ€ํ•œ ๊ฒฝ๊ณ  ์•Œ๋ฆผ์„ ๋ฐ˜๋“œ์‹œ ์„ค์ •ํ•ด์•ผํ•œ๋‹ค.
  • ๋ถ€์ ์ ˆํ•œ ์ €์žฅ ์ „๋žต
    • 8์žฅ ๊ณต๋ถ€ ์ดํ›„ ๋Œ์•„์˜ด

๋ณด์•ˆ ๊ธฐ์ˆ 

  • ๋ ˆ๋””์Šค๋Š” ์‹ ๋ขฐํ•  ๋งŒํ•œ ๋‚ด๋ถ€ ๋„คํŠธ์›Œํฌ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„๋๋‹ค.
  • ๋ ˆ๋””์Šค๋Š” ํ‰๋ฌธ ํŒจ์Šค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๊ฐ„์˜ ์—ฐ๊ฒฐ์„ ๋ณดํ˜ธํ•˜๋Š” ๊ธฐ๋ณธ์ ์ธ ๋ณด์•ˆ ์‹œ์Šคํ…œ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.
  • ๊ธฐ๋ณธ์ ์ธ ๋ณด์•ˆ
    • ๋ ˆ๋””์Šค๋ฅผ ์„ค๊ณ„ํ–ˆ์„ ๋•Œ, ๋ ˆ๋””์Šค์˜ ์ฃผ์š” ๋ชฉํ‘œ๋Š” ์ตœ๊ณ ์˜ ๋ณด์•ˆ์ˆ˜์ค€๋ณด๋‹ค๋Š” ์ตœ๊ณ ์˜ ์„ฑ๋Šฅ๊ณผ ๋‹จ์ˆœ์„ฑ์ด์—ˆ๋‹ค.
    • ๋ ˆ๋””์Šค๊ฐ€ ํ‰๋ฌธ ํŒจ์Šค์›Œ๋“œ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ๊ธฐ๋ณธ ๋ณด์•ˆ ๋งค์ปค๋‹ˆ์ฆ˜์„ ๊ตฌํ˜„ํ–ˆ์ง€๋งŒ, ๋ ˆ๋””์Šค๋Š” ACL์„ ๊ตฌํ˜„ํ•˜์ง€ ์•Š์•˜๋‹ค. ๋”ฐ๋ผ์„œ ํผ๋ฏธ์…˜ ๋ ˆ๋ฒจ ๋‹จ์œ„๋กœ ์‚ฌ์šฉ์ž๋ฅผ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์—†๋‹ค.
    • ์ธ์ฆ ๊ธฐ๋Šฅ์€ requirepass ์„ค์ •์œผ๋กœ ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ํ•˜์ง€๋งŒ ๋ ˆ๋””์Šค๋Š” ๋น ๋ฅด๊ธฐ ๋•Œ๋ฌธ์—, ์•…์„ฑ ์œ ์ €๊ฐ€ ์ดˆ๋‹น ์ˆ˜์ฒœ ๊ฐœ์˜ ํŒจ์Šค์›Œ๋“œ๋ฅผ ์š”์ฒญํ•ด ์ž ์žฌ์ ์œผ๋กœ ์•Œ์•„๋งžํž ์ˆ˜ ์žˆ์–ด์„œ requirepass ์„ค์ •์ด ์œ„ํ—˜ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.
    • ๋”ฐ๋ผ์„œ ์ตœ์†Œ 64์ž์˜ ๋ณต์žกํ•œ ํŒจ์Šค์›Œ๋“œ๋ฅผ ๋ช…์„ธํ•ด ํŒจ์Šค์›Œ๋“œ๋ฅผ ์•Œ์•„๋งžํžˆ์ง€ ๋ชปํ•˜๊ฒŒ ํ•ด์•ผํ•œ๋‹ค.
    • requirepass๋ฅผ ํ™œ์„ฑํ™”ํ•˜๋ฉด, ๋ ˆ๋””์Šค๋Š” ์ธ์ฆ ์—†๋Š” ํด๋ผ์ด์–ธํŠธ์˜ ๋ชจ๋“  ์ปค๋งจ๋“œ ์š”์ฒญ์„ ๊ฑฐ๋ถ€ํ•œ๋‹ค.
    • FLUSHDB, FLUSHALL, CONFIG, KEYS, DEBUG, SAVE ์™€ ๊ฐ™์€ ๋ช…๋ น์–ด๋“ค์„ ์•Œ๊ธฐ ์–ด๋ ต๊ฒŒ ํ•˜๊ฑฐ๋‚˜ ์‚ฌ์šฉ์„ ๊ธˆ์ง€ํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ๋‹ค.
      • redis.conf์—์„œ rename-command ์„ค์ •์„ ํ†ตํ•ด ๊ฐ€๋Šฅ.
    • ์ด ์ด์™ธ์— ๋„คํŠธ์›Œํฌ ์ ์œผ๋กœ ์ถ”๊ฐ€ ๋ณด์•ˆ์„ ์ ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ• ๋“ฑ์„ ์„ ํƒํ•œ๋‹ค.
    • ํ•œ๋งˆ๋””๋กœ ๋ณด์•ˆ์ด ์ข€ ์•ฝํ•˜๋‹ค.


(์•ฝํ•œ ๋ณด์•ˆ requirepass)


๋ ˆ๋””์Šค ํ™•์žฅํ•˜๊ธฐ

1. ์ €์žฅ

  • ๋ ˆ๋””์Šค๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ•œ๋‹ค.
  • ๋ฉ”๋ชจ๋ฆฌ๋Š” ์ž ์‹œ ๋™์•ˆ๋งŒ ์ €์žฅ๋˜๋Š” ์ž„์‹œ ์ €์žฅ์†Œ๋ผ์„œ ๋ ˆ๋””์Šค ์ธ์Šคํ„ด์Šค๊ฐ€ ์ข…๋ฃŒ, ํฌ๋ž˜์‹œ, ์žฌ์‹œ์ž‘๋˜๋ฉด ์ €์žฅ๋œ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์žƒ๊ฒŒ ๋œ๋‹ค.
  • ๋”ฐ๋ผ์„œ ๋ฐ์ดํ„ฐ ์†์‹ค ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋ ˆ๋””์Šค๋Š” ์ €์žฅ ๊ฐ€๋Šฅํ•œ ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•, **๋ ˆ๋””์Šค ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค(RDB)**์™€ **Append-only File(AOF)**์„ ์ œ๊ณตํ•œ๋‹ค.
  • ๋™์ผํ•œ ๋ ˆ๋””์Šค ์ธ์Šคํ„ด์Šค์—์„œ ๋‘ ๋ฐฉ๋ฒ•์„ ๊ฐœ๋ณ„์ ์œผ๋กœ, ๋˜๋Š” ๋™์‹œ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋ ˆ๋””์Šค ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค (RDB)
    • rdb ํŒŒ์ผ์€ ํŠน์ • ์‹œ์ ์˜ ๋ฐ์ดํ„ฐ ๋ฐ”์ด๋„ˆ๋ฆฌ๋กœ, ๋ ˆ๋””์Šค ์ธ์Šคํ„ด์Šค์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ํ‘œํ˜„ํ•œ๋‹ค.
    • rdb ํŒŒ์ผ ํ˜•ํƒœ๋Š” ๋น ๋ฅธ ์ผ๊ธฐ์™€ ์“ฐ๊ธฐ์— ์ตœ์ ํ™”๋ผ ์žˆ๋‹ค.
    • ์„ฑ๋Šฅ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด ๋””์‹œํฌ์˜ rdb ํŒŒ์ผ์˜ ๋‚ด๋ถ€ ๊ตฌ์กฐ๋Š” ๋ ˆ๋””์Šค ์ธ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ์™€ ๋งค์šฐ ๋น„์Šทํ•˜๊ฒŒ ๋ผ์žˆ๋‹ค.
    • rdbํŒŒ์ผ ์••์ถ• ์‹œ์— lzf ์••์ฃฝ ์„ ํ™œ์šฉํ•œ๋‹ค.
      • lzf ์••์ถ•์€ ์••์ถ•์„ ์ง„ํ–‰ํ•  ๋•Œ ์•„์ฃผ ์ž‘์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋А ๋น ๋ฅธ ์••์ถ• ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค.
      • lzf ์••์ถ• ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ๋‹ค๋ฅธ ์•Œ๊ณ ๋ฆฌ์ฆ˜๋ณด๋‹ค ์ตœ๊ณ ์˜ ์••์ถ•๋ฅ ์„ ๊ฐ€์ง€๊ณ  ์žˆ์ง€๋Š” ์•Š๋‹ค.
    • ๋ ˆ๋””์Šค ์ธ์Šคํ„ด์Šค๋ฅผ ์™„์ „ํ•˜๊ฒŒ ๋ณต๊ตฌ ํ•˜๋Š”๋ฐ ํ•˜๋‚˜์˜ RDB ํŒŒ์ผ๋งŒ ์žˆ์œผ๋ฉด ๋œ๋‹ค.
    • ํ•„์š”ํ•  ๋•Œ๋งˆ๋‹ค ๋งค์‹œ๊ฐ„, ๋งค์ผ, ๋งค์ฃผ, ๋งค๋‹ฌ RDB ํŒŒ์ผ์„ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • SAVE ์ปค๋งจ๋“œ๋ฅผ ํ†ตํ•ด RDB ํŒŒ์ผ์„ ์ฆ‰์‹œ ์ƒ์„ฑํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด ๊ณผ์ •์—์„œ ๋ ˆ๋””์Šค ์„œ๋ฒ„๋ฅผ ๋ธ”๋กํ•˜๊ธฐ ๋•Œ๋ฌธ์— SAVE ์ปค๋งจ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋„๋ก ํ•œ๋‹ค.
    • BGSAVE ์ปค๋งจ๋“œ๋Š” ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ ˆ๋””์Šค๋ฅผ ๋ธ”๋กํ•˜์ง€ ์•Š๋Š”๋‹ค. (์ž์‹ ํ”„๋กœ์„ธ์Šค๋กœ ์‹คํ–‰)
    • ๋ฐฑ๊ทธ๋ผ์šด๋“œ๋กœ RDB ํŒŒ์ผ์„ ์ €์žฅํ•  ๋•Œ ์„ฑ๋Šฅ ์ €ํ•˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋„๋ก reids-server๋Š” ๋ชจ๋“  ์ €์žฅ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ด์„œ ์ž์‹ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. ๋”ฐ๋ผ์„œ redis-server ํ”„๋กœ์„ธ์Šค๋Š” ์–ด๋– ํ•œ ๋””์Šคํฌ I/O์ž‘์—…๋„ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š๋Š”๋‹ค.
    • redis-server๊ฐ€ ์“ฐ๊ธฐ ์ž‘์—…์„ ๋ฐ›๊ณ  ์žˆ๋Š” ์ƒํƒœ๋ฉด, ์ž์‹ ํ”„๋กœ์„ธ์Šค๋Š” ๋ณ€๊ฒฝ๋œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋ณต์‚ฌํ•ด์•ผ ํ•œ๋‹ค. ์ด๋กœ ์ธํ•ด ์ „์ฒด ์‚ฌ์šฉ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ˜„๊ฒฉํ•˜๊ธฐ ์ฆ๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.
      • ๋ ˆ๋””์Šค๋Š” copy-on-write๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
    • ์‹ค์ œ redis.conf๋ฅผ ์—ด์–ด๋ณด๋ฉด ์ด๋Ÿฌํ•œ ์„ค์ •์ด ์žˆ์Œ (save 900 1, save 300 10, save 60 10000)
      • save ์ง€์‹œ์ž ๋ฌธ๋ฒ•์€ save number_of_seconds number_of_changes ์ด๋‹ค.
      • ์ฆ‰ ํ•˜๋‚˜ ์ด์ƒ์˜ ์“ฐ๊ธฐ ์ž‘์—…์ด ์‹คํ–‰๋˜๋ฉด 900์ดˆ๋งˆ๋‹ค ๋””์Šคํฌ์— rdb ํŒŒ์ผ ์ €์žฅ
      • 10๊ฐœ ์ด์ƒ์˜ ์“ฐ๊ธฐ ์ž‘์—…์ด ์‹คํ–‰๋˜๋ฉด 300์ดˆ๋งˆ๋‹ค ๋””์Šคํฌ์— rdb ํŒŒ์ผ ์ €์žฅ
      • 10,000๊ฐœ ์ด์ƒ์˜ ์“ฐ๊ธฐ ์ž‘์—…์ด ์‹คํ–‰๋˜๋ฉด 60์ดˆ๋งˆ๋‹ค ๋””์Šคํฌ์— rdb ํŒŒ์ผ์„ ์ €์žฅ
    • ๋‹จ์ 
      • ์ฆ‰ rdb๋Š” ํ•ด๋‹น ์„ค์ • ์ด๋‚ด์˜ 100% ๋ณต๊ตฌ๋ฅผ ์žฅ๋‹ดํ•˜์ง€ ๋ชปํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด์— ๋Œ€ํ•œ ๋Œ€๋น„๊ฐ€ ํ•„์š”ํ•˜๋‹ค.
      • ๊ทธ๋ฆฌ๊ณ  snapshot์˜ ๋‹จ์ ์€ ์ƒ์„ฑ ์‹œ๋งˆ๋‹ค ๋ ˆ๋””์Šค๋Š” ๋””์Šคํฌ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด ์ž์‹ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ƒ์„ฑ ํ•œ๋‹ค๋Š” ์ ์ด๋‹ค.
        • ์ž์‹ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋™์•ˆ ์„œ๋น„์Šค์ค‘์ธ ํด๋ผ์ด์–ธํŠธ๋ฅผ ๋ฉˆ์ถ”๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด ๋ถ€๋ถ„์€ ๋ ˆ๋””์Šค์—์„œ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ฐ์ดํ„ฐ ์ง‘ํ•ฉ์˜ ํฌ๊ธฐ์— ์˜ํ–ฅ์„ ๋ฐ›๋Š”๋‹ค. ๋•Œ๋กœ๋Š” ๋ช‡ ms์—์„œ ๋ช‡ s๊นŒ์ง€ ๊ฑธ๋ฆด ์ˆ˜ ์žˆ๋‹ค.
    • ๋ ˆ๋””์Šค ์„ค์ •์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” RDB ๊ด€๋ จ ์ง€์‹œ์ž๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค
      • stop-writes-on-bgsabve-error : (yes or no) ๋งˆ์ง€๋ง‰์œผ๋กœ ์‹คํ–‰ํ•œ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ €์žฅ์ด ์‹คํŒจํ•œ๋‹ค๋ฉด, ๋ ˆ๋””์Šค๊ฐ€ ์“ฐ๊ธฐ ์ž‘์—…์„ ๋ฐ›๋Š” ๊ฒƒ์„ ๋ฉˆ์ถ”๋„๋ก ๊ฒฐ์ •. ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ €์žฅ์ด ์„ฑ๊ณตํ•˜๋ฉด ์“ฐ๊ธฐ ์ž‘์—…์„ ๋‹ค์‹œ ๋ฐ›๊ธฐ ์‹œ์ž‘.
      • rdbcompression : (yes or no) rdbํŒŒ์ผ์— ๋Œ€ํ•ด lzf ์••์ถ•์„ ์‚ฌ์šฉํ•  ์ง€์— ๋Œ€ํ•œ ์˜ต์…˜
      • rdbchecksum : rdb ํŒŒ์ผ์˜ ๋งˆ์ง€๋ง‰์— ์ฒดํฌ์„ฌ(checksum)์„ ์ €์žฅํ•˜๊ณ , rdb ํŒŒ์ผ์„ ๋กœ๋”ฉํ•˜๊ธฐ ์ „์— ์ฒดํฌ์„ฌ์„ ์ˆ˜ํ–‰ํ• ์ง€์— ๋Œ€ํ•œ ์˜ต์…˜, ์ฒดํฌ์„ฌ์ด ์˜ณ์ง€ ์•Š์œผ๋ฉด ๋ ˆ๋””์Šค๊ฐ€ ์‹œ์ž‘๋˜์ง€ ์•Š๋Š”๋‹ค.
      • dbfilename : rdbํŒŒ์ผ์˜ ์ด๋ฆ„์„ ๊ฒฐ์ •ํ•œ๋‹ค.
      • save ์ดˆ์™€ ๋ณ€๊ฒฝ ์ˆ˜๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์Šค๋„ต์ƒท ์ฃผ๊ธฐ๋ฅผ ์„ค์ •
      • dir: AOF์™€ RDBํŒŒ์ผ์˜ ๋””๋ ‰ํ† ๋ฆฌ ์œ„์น˜๋ฅผ ๋ช…์„ธํ•œ๋‹ค.
  • Append-only File (AOF)
    • ๋ ˆ๋””์Šค๋Š” ๋ฐ์ดํ„ฐ ์ง‘ํ•ฉ์„ ๋ณ€๊ฒฝํ•˜๋Š” ์ปค๋งจ๋“œ๋ฅผ ๋ฐ›์„ ๋•Œ๋งˆ๋‹ค, AOF ํŒŒ์ผ์— ํ•ด๋‹น ์ปค๋งจ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.
    • ์ด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ๋ ˆ๋””์Šค์— AOF ์„ค์ •์„ ์ ์šฉํ•œ ํ›„ ๋ ˆ๋””์Šค๋ฅผ ์žฌ์‹œ์ž‘ํ•˜๋ฉด, ๋ ˆ๋””์Šค๋Š” AOF์˜ ๋‚˜์—ด๋œ ๋ชจ๋“  ์ปค๋งจ๋“œ๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ์‹คํ–‰ํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๋ณต๊ตฌํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋ฐ์ดํ„ฐ์˜ ์ƒํƒœ๋ฅผ ์žฌ๊ตฌ์ถ•ํ•œ๋‹ค.
    • AOF๋Š” RDB ์Šค๋ƒ…์ƒท์˜ ๋Œ€์•ˆ์ด๋‹ค.
    • AOF ํŒŒ์ผ์€ '์‚ฌ๋žŒ์ด ์ฝ์„ ์ˆ˜ ์žˆ๋Š”' ๋กœ๊ทธ๋ฅผ ์ถ”๊ฐ€๋งŒ ํ•  ์ˆ˜ ์žˆ๋Š” ๋กœ๊ทธ ํŒŒ์ผ์ด๋‹ค.
    • ์ฆ‰ ๊ฒ€์ƒ‰์ด๋‚˜ ์†์ƒ ๋ฌธ์ œ๋ฅผ ์‰ฝ๊ฒŒ ์‹๋ณ„ํ•  ์ˆ˜ ์—†์Œ์„ ์˜๋ฏธํ•œ๋‹ค.
    • ํ…์ŠคํŠธ ์—๋””ํŠธ์—์„œ ์—ด์–ด๋ณผ ์ˆ˜๋„ ์ž‡๊ณ  ๋‚ด๋ถ€ ๊ตฌ์กฐ๋„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค.
    • AOF๊ฐ€ ๋ถˆ์™„์ „ํ•˜๊ฑฐ๋‚˜ ์†์ƒ๋˜๋Š” ๊ฒฝ์šฐ AOF ํŒŒ์ผ์„ ์‰ฝ๊ฒŒ ํ™•์ธํ•˜๊ณ  ๊ณ ์น  ์ˆ˜ ์žˆ๋Š” redis-check-aof ํˆด์ด ์กด์žฌํ•œ๋‹ค.
    • ์—ฌ๋Ÿฌ ์˜ต์…˜์„ ์‚ฌ์šฉํ•ด AOF์„ ์ž๋™์œผ๋กœ ์ž‘์€ ๋ฒ„์ „์œผ๋กœ ์ตœ์ ํ™”ํ•˜๊ฑฐ๋‚˜, BGREWRITEAOF ์ปค๋งจ๋“œ๋ฅผ ํ†ตํ•ด ์ˆ˜๋™์œผ๋กœ ์ž‘์œผ ๋ฒ„์ „์œผ๋กœ ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • AOFํŒŒ์ผ์„ ์ €์žฅํ•˜๋Š” ๋™์•ˆ ํฌ๋ž˜์‹œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค๋ฉด ์›๋ณธ AOFํŒŒ์ผ์€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋Š”๋‹ค.
    • AOF ๊ด€๋ จ ์„ค์ •์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ง€์‹œ์ž๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.
      • appendonly : (yes or no)AOF์˜ ์‚ฌ์šฉ ์—ฌ๋ถ€๋ฅผ ์„ค์ •ํ•œ๋‹ค.
      • appendfilename : AOF ํŒŒ์ผ ์ด๋ฆ„์„ ๋ช…์„ธํ•œ๋‹ค. ํŒŒ์ผ ๊ฒฝ๋กœ๋ฅผ ์“ธ ์ˆ˜ ์—†๋‹ค.
      • appendfsync : ์ฃผ์š” ํ”„๋กœ์„ธ์Šค์—์„œ fsync(์šด์˜์ฒด์ œ๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ๋””์Šคํฌ์— Flushํ•  ๋•Œ ์“ฐ์ด๋Š” ์‹œ์Šคํ…œ ํ˜ธ์ถœ - https://www.joinc.co.kr/w/man/2/fsync)๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์Šค๋ ˆ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
        • no : fsync๋ฅผ ์‹คํ–‰ํ•˜์ง€ ์•Š๋Š”๋‹ค.
        • always : ๋ชจ๋“  ์“ฐ๊ธฐ ์ž‘์—…๋งˆ๋‹ค fsync๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.
        • everysec : ๋งค์ดˆ ์‹คํ–‰ํ•œ๋‹ค. (appendfsync ์˜ต์…˜์˜ ๊ธฐ๋ณธ๊ฐ’)
      • no-appendfsync-on-rewirte : (yes or no) ๋Œ€๋Ÿ‰์˜ ์“ฐ๊ธฐ ๋ฐœ์ƒํ•˜์—ฌ ์ง€์—ฐ์ด ๋ฐœ์ƒํ•  ์‹œ ๋ ˆ๋””์Šค ์„œ๋ฒ„์—์„œ fsync๋ฅผ ์‹คํ–‰ํ•˜์ง€ ์•Š๋Š”๋‹ค.
      • auto-aof-rewrite-percentage : (0~100) AOF ํŒŒ์ผ ํฌ๊ธฐ๊ฐ€ ํ•ด๋‹น ์˜ต์…˜์—์„œ ๋ช…์„ธํ•œ ํผ์„ผํŠธ๊นŒ์ง€ ๋„๋‹ฌํ•˜๋ฉด ์•”๋ถ์ ์œผ๋กœ BGREWRITEAOF ์ปค๋งจ๋“œ๋ฅผ ์ˆ˜ํ–‰, ๊ธฐ๋ณธ ๊ฐ’์€ 100
      • auto-aof-rewirte-min-size : ํ•ด๋‹น ์˜ต์…˜์€ AOF ํŒŒ์ผ์˜ ์ตœ์†Œ ํฌ๊ธฐ๋‹ค. ๋ช…์„ธํ•œ auto-aof-rewrite-percentage ๊ฐ’์„ ์ดˆ๊ณผํ•˜๋ฉด, ๋ช…์„ธํ•œ ์ตœ์†Œ ํฌ๊ธฐ์— ๋„๋‹ฌํ•  ๋•Œ๊นŒ์ง€ AOF์ €์žฅ์ด ์•ˆ๋˜๋„๋ก ํ•œ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์€ 67,108,864 ๋ฐ”์ดํŠธ์ด๋‹ค.
      • aof-load-turncated : (yes or no) ๋ ˆ๋””์Šค์— ํฌ๋ž˜์‹œ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฒฝ์šฐ ๋ ˆ๋””์Šค ์‹œ์ž‘์‹œ AOF ํŒŒ์ผ์„ ๋กœ๋“œํ• ์ง€ ์—ฌ๋ถ€๋ฅผ ๋ช…์„ธ. ๋งŒ์•ฝ no๋ฉด ๋กœ๋“œํ•˜์ง€ ์•Š๊ณ  ์—๋Ÿฌ๋ฅผ ์ถœ๋ ฅํ•˜๊ณ  ์ข…๋ฃŒํ•  ๊ฒƒ์ด๋‹ค.
      • dir : AOF์™€ RDB ํŒŒ์ผ์˜ ๋””๋ ‰ํ† ๋ฆฌ ์œ„์น˜๋ฅผ ๋ช…์„ธํ•œ๋‹ค.
  • RDB๋Œ€ AOF
    • ํฐ ๋ฐ์ดํ„ฐ ์ง‘ํ•ฉ์„ ๋ณต๊ตฌํ•  ๋•Œ, ๋ณต๊ตฌ ์†๋„๋Š” RDB๊ฐ€ AOF๋ณด๋‹ค ๋น ๋ฅด๋‹ค. RDB๋Š” ์ „์ฒด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๋ชจ๋“  ๋ณ€๊ฒฝ์„ ์žฌ์‹คํ–‰ํ•  ํ•„์š”๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
    • ๋ ˆ๋””์Šค๋Š” ์‹œ์ž‘ ์‹œ RDB์™€ AOFํŒŒ์ผ ์ค‘ ํ•˜๋‚˜๋ผ๋„ ์กด์žฌํ•˜๋ฉด ๊ทธ ํŒŒ์ผ์„ ๋กœ๋“œํ•œ๋‹ค. ๋‘ ํŒŒ์ผ ๋ชจ๋‘ ์กด์žฌํ•˜๋ฉด AOF๊ฐ€ ๋‚ด๊ตฌ์„ฑ์ด ๋ณด์žฅ๋ผ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— AOF๊ฐ€ ์šฐ์„ ๊ถŒ์„ ๊ฐ€์ง„๋‹ค.
    • ์ฃผ์˜์‚ฌํ•ญ
      • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ €์žฅ์ด ํ•„์š”ํ•˜์ง€ ์•Š๋‹ค๋ฉด RDB์™€ AOF๋ฅผ ๋น„ํ™œ์„ฑํ•œ๋‹ค.
      • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์•ฝ๊ฐ„์˜ ๋ฐ์ดํ„ฐ ์†์‹ค์ด ํ—ˆ์šฉ๋œ๋‹ค๋ฉด RDB๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
      • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์™„์ „ํžˆ ๋‚ด๊ตฌ์„ฑ ์žˆ๋Š” ์ €์žฅ์ด ํ•„์š”ํ•˜๋‹ค๋ฉด, RDB์™€ AOF๋ฅผ ๋‘˜ ๋‹ค ์‚ฌ์šฉํ•œ๋‹ค.

2. ๋ณต์ œ

  • ๋ ˆ๋””์Šค ์ธ์Šคํ„ด์Šค(master)์— ์“ฐ๊ธฐ ์ž‘์—…์„ ์ง„ํ–‰ํ•˜๋Š” ๋™์•ˆ, ํ•˜๋‚˜ ์ด์ƒ์˜ ์ธ์Šคํ„ด์Šค(slave)๊ฐ€ ๋ ˆ๋””์Šค ๋งˆ์Šคํ„ฐ์˜ ์™„๋ฒฝํ•œ ๋ณต์‚ฌ๋ณธ์ด ๋˜๋Š” ๊ฒƒ ์„ ๋ณต์ œ ๋ผ๊ณ  ํ•œ๋‹ค.
  • ๋ ˆ๋””์Šค 2.8์—์„œ ๋งˆ์Šคํ„ฐ๊ฐ€ ๋งŽ์€ ์–‘์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์Šฌ๋ ˆ์ด๋ธŒ์—๊ฒŒ ์ฃผ๊ธฐ์ ์œผ๋กœ ์ „๋‹ฌํ•˜๋ฉด, ์Šฌ๋ ˆ์ด๋ธŒ๊ฐ€ ์ „๋‹ฌ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋น„๋™๊ธฐ ๋ณต์ œ ๊ธฐ๋Šฅ์„ ์†Œ๊ฐœํ–ˆ๋‹ค.
  • ๋ ˆ๋””์Šค ์„œ๋ฒ„์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์Šฌ๋ ˆ์ด๋ธŒ๋กœ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์€ 3๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.
    • redis.conf ํŒŒ์ผ์— slaveof IP PORT ์ง€์‹œ์ž๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ , ํ•ด๋‹น ์„ค์ • ํŒŒ์ผ์„ ์‚ฌ์šฉํ•ด ๋ ˆ๋””์Šค๋ฅผ ์‹œ์ž‘ํ•œ๋‹ค.
    • redis-server ์ปค๋งจ๋“œ ๋ผ์ธ ์˜ต์…˜์— --slaveof IP PORT๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
    • SLAVEOF IP PORT ์ปค๋งจ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
  • ๋ณต์ œ๋ณธ์€ ๋ ˆ๋””์Šค๋ฅผ ํ™•์žฅํ•˜๊ธฐ ์œ„ํ•ด ๊ด‘๋ฒ”์œ„ํ•˜๊ฒŒ ์“ฐ์ด๋ฉฐ, ๋ชจ๋“  ์ฝ๊ธฐ ์ž‘์—…์€ ๋ณต์ œ๋ณธ์—์„œ ์ฒ˜๋ฆฌ๋˜๊ณ  ๋งˆ์Šคํ„ฐ๋Š” ์“ฐ๊ธฐ ๋ช…๋ น๋งŒ ์ฒ˜๋ฆฌํ•œ๋‹ค. (--appendonly ์˜ต์…˜์„ master์— ์ค˜์•ผํ•œ๋‹ค. ์•„๋‹ˆ๋ฉด GET๋„ ๊ฐ€๋Šฅ)
  • ์ €์žฅ ๊ธฐ๋Šฅ์„ ๋ณต์ œ๋ณธ์œผ๋กœ ์ด๋™์‹œ์ผœ ๋งˆ์Šคํ„ฐ๊ฐ€ ๋””์Šคํฌ I/O ์ปค๋งจ๋“œ๋ฅผ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋ณต์ œ ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ ๋งˆ์Šคํ„ฐ ์„œ๋ฒ„๋Š” ์ €์žฅ ์„ค์ •์„ ํ•˜์ง€ ์•Š์•„์•ผ ํ•˜๋ฉฐ ์–ด๋–ค ์ด์œ ์—์„œ๋“  ์ž๋™์œผ๋กœ ์žฌ์‹œ์ž‘ ํ•˜๋ฉด ์•ˆ๋œ๋‹ค.
    • ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด, ๋งˆ์Šคํ„ฐ ๋ ˆ๋””์Šค์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ๋‘ ์ง€์šด ํ›„, ๋นˆ ๋ฐ์ดํ„ฐ ์ง‘ํ•ฉ์„ ์žฌ์‹œ์ž‘ํ•˜๋ฉฐ ๋ณต์ œ๋ณธ์— ๋นˆ ๋ฐ์ดํ„ฐ ์ง‘ํ•ฉ์„ ๋ณต์ œํ•œ๋‹ค.
  • ๋ณต์ œ๋ณธ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ฝ๊ธฐ๋งŒ ๊ฐ€๋Šฅ ํ–ˆ์ง€๋งŒ, slave-read-only ๋ฅผ no๋กœ ์„ค์ •ํ•˜๋ฉด ๋ณต์ œ๋ณธ์˜ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด ๋ฐฉ๋ฒ•์€ ์ถ”์ฒœํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • ๋งˆ์Šคํ„ฐ ์„œ๋ฒ„์— ์—ฐ๊ฒฐ๋œ ๋ณต์ œ๋ณธ์˜ ์ตœ์†Œ ๊ฐœ์ˆ˜๋ฅผ ์š”๊ตฌํ•ด ๋ฐ์ดํ„ฐ์˜ ์ผ๊ด€์„ฑ ๋ณด์žฅ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.
  • ์ด๋Ÿฐ ๋ฐฉ๋ฒ•์œผ๋กœ ๋ณต์ œ๋ณธ์˜ ์ตœ์†Œ ๊ฐœ์ˆ˜๊ฐ€ ๋งŒ์กฑ๋˜๋ฉด, ๋ชจ๋“  ์“ฐ๊ธฐ ์ž‘์—…์€ ๋ ˆ๋””์Šค ์„œ๋ฒ„์—์„œ๋งŒ ์‹คํ–‰๋˜๊ณ , ๋ณต์ œ์— ๋”ฐ๋ฅธ ์ตœ๋Œ€ ์ง€์—ฐ ํ˜„์ƒ(์ดˆ ๋‹จ์œ„)์ด ๋ฐœ์ƒ ํ•œ๋‹ค.
  • ๊ทธ๋Ÿฌ๋‚˜ ๋ณต์ œ๋ณธ ์ตœ์†Œ ๊ฐœ์ˆ˜๋ฅผ ์š”๊ตฌํ•˜๋Š” ๊ธฐ๋Šฅ์€ ์“ฐ๊ธฐ ์ž‘์—…์„ ๋ชจ๋“  ๋ณต์ œ๋ณธ์ด ๋ฐ›์„ ์ˆ˜ ์žˆ๊ฒŒ ๋ณด์žฅํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ์ „ํžˆ ์ทจ์•ฝํ•˜๋‹ค.
  • ๋ณต์ œ๋ณธ ์ตœ์†Œ ๊ฐœ์ˆ˜์™€ ์ตœ๋Œ€ ์ง€์—ฐ ์‹œ๊ฐ„์˜ ์„ค์ •์€ min-slaves-to-write ์™€ min-slave-max-lag ์ด๋ฉฐ ๊ธฐ๋ณธ๊ฐ’์€ ๊ฐ๊ฐ 0๊ณผ 10(์ดˆ)์ด๋‹ค.
  • ๋ณต์ œ๋ณธ์€ ์ตœ๊ทผ์— ๋ฐœ์ƒํ•œ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จํ•˜๋ฉฐ ๋งˆ์Šคํ„ฐ๋กœ ์Šน๊ฒฉํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋งˆ์Šคํ„ฐ์— ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ๋Š” ์ƒํ™ฉ์—์„œ ๋งค์šฐ ์œ ์šฉํ•˜๋‹ค.
  • ๋ ˆ๋””์Šค ์„ผํ‹ฐ๋„๋กœ ์ธํ•ด ๋งˆ์Šคํ„ฐ ์žฅ์•  ์ƒํ™ฉ์—์„œ ์ƒˆ๋กœ์šด ๋งˆ์Šคํ„ฐ ์„ ์ถœ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ์ด๋Š” ๋’ค์—์„œ ๋‹ค๋ฃจ๋„๋ก ํ•˜๊ฒ ๋‹ค.
  • SLAVEOF NO ONE ์ปค๋งจ๋“œ๋Š” ์Šฌ๋ ˆ์ด๋ธŒ๋ฅผ ๋งˆ์Šคํ„ฐ๋กœ ๋ณ€ํ™˜ํ•˜๊ณ  ํŽ˜์ผ์˜ค๋ฒ„๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค.


(docker๋ฅผ ์ด์šฉํ•ด master, slave1, slave2 redis ์„ค์ •)



(master์—์„œ testkey set ์ดํ›„ master, slave1, slave2 ์—์„œ GET test)



(master ์žฅ์•  ์ƒํ™ฉ์‹œ slave๋ฅผ master๋กœ ๋ณ€๊ฒฝ test)


3. ํŒŒํ‹ฐ์…”๋‹

  • ํŒŒํ‹ฐ์…”๋‹์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋‚˜๋ˆ„๊ณ , ์—ฌ๋Ÿฌ ์žฅ๋น„์— ๊ฑธ์ณ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„์‚ฐ์‹œํ‚ค๋Š” ํ–‰์œ„์ด๋‹ค.
  • ํŒŒํ‹ฐ์…”๋‹์—๋Š” 2๊ฐ€์ง€ ํƒ€์ž…, ์ˆ˜ํ‰ ํŒŒํ‹ฐ์…”๋‹๊ณผ ์ˆ˜์ง ํŒŒํ‹ฐ์…”๋‹์ด ์žˆ๋‹ค.
  • ํŒŒํ‹ฐ์…”๋‹์€ ๋” ์ข‹์€ ์„ฑ๋Šฅ, ์œ ์ง€ ๋ณด์ˆ˜์„ฑ, ๊ฐ€์šฉ์„ฑ์ด ์š”๊ตฌ๋  ๋•Œ ์žฅ๋น„ ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ์ˆ˜ํ–‰๋œ๋‹ค.
  • ๋ ˆ๋””์Šค๋ฅผ ์ฒ˜์Œ ์„ค๊ณ„ํ–ˆ์„ ๋•Œ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„์‚ฐํ•ด์„œ ์ €์žฅํ•  ์˜๋„๊ฐ€ ์ „ํ˜€ ์—†์—ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์—ฌ๋Ÿฌ ์ธ์Šคํ„ด์Šค์— ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„์‚ฐํ•  ์ˆ˜ ์—†์—ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์—ฌ๋Ÿฌ ์ธ์Šคํ„ด์Šค์— ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„์‚ฐํ•  ์ˆ˜ ์—†์—ˆ๋‹ค.
  • ์ด์ „ ์ ˆ์—์„œ ์„ค๋ช…ํ•œ replication๋งŒ์œผ๋กœ๋Š” ๋งˆ์Šคํ„ฐ ์ธ์Šคํ„ด์Šค์— ๋Œ€ํ•œ ์—ฌ๋Ÿฌ ๋ณ‘๋ชฉ์„ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ๋งŽ์€ ๊ฒฝ์šฐ์— ์ด ๋ฐฉ๋ฒ•๋งŒ์œผ๋กœ ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์•˜๋‹ค.
    • ๋ฌธ์ œ๊ฐ€ ๋˜๋Š” ์ผ€์ด์Šค ์˜ˆ์‹œ
      • ์ €์žฅ๋  ์ „์ฒด ๋ฐ์ดํ„ฐ๊ฐ€ ๋ ˆ๋””์Šค ์„œ๋ฒ„์˜ ์ „์ฒด ๋ฉ”๋ชจ๋ฆฌ๋ณด๋‹ค ํฌ๋‹ค.
      • ๋„คํŠธ์›Œํฌ ๋Œ€์—ญํญ์ด ๋ชจ๋“  ํŠธ๋ž˜ํ”ฝ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ์— ์ถฉ๋ถ„ํ•˜์ง€ ์•Š๋‹ค.
  • ๋”ฐ๋ผ์„œ ์ด๋Ÿฐ ๋ฌธ์ œ๋“ค์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ํŒŒํ‹ฐ์…”๋‹์ด ๊ณ ์•ˆ๋˜์—ˆ๋‹ค.
  • ํด๋ผ์ด์–ธํŠธ ๋ ˆ๋ฒจ์˜ ํŒŒํ‹ฐ์…”๋‹๊ณผ ํ”„๋ก์‹œ ์‹œ์Šคํ…œ์„ ํ†ตํ•œ ํŒŒํ‹ฐ์…”๋‹์ด ์กด์žฌํ•œ๋‹ค.
  • ๋ ˆ๋””์Šค์—์„œ์˜ ์ˆ˜ํ‰ ํŒŒํ‹ฐ์…”๋‹์€ ํ‚ค๋ฅผ ์—ฌ๋Ÿฌ ๋ ˆ๋””์Šค ์ธ์Šคํ„ดํŠธ๋กœ ๋ถ„์‚ฐํ•˜๋Š” ๊ฒƒ์„ ์œ„๋ฏธํ•œ๋‹ค.
  • ๋ ˆ๋””์Šค์—์„œ์˜ ์ˆ˜์ง ํŒŒํ‹ฐ์…”๋‹์€ ์—ฌ๋Ÿฌ ๋ ˆ๋””์Šค ์ธ์Šคํ„ด์Šค๋กœ ํ‚ค์˜ ๊ฐ’์„ ๋ถ„์‚ฐํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.
  • ๋ ˆ๋””์Šค์—์„œ ์ง์ ‘์ ์œผ๋กœ ํด๋ผ์ด์–ธํŠธ์  ์ˆ˜ํ‰ ํŒŒํ‹ฐ์…”๋‹์„ ์ง€์›ํ•˜์ง€๋Š” ์•Š๋Š”๋‹ค.
  • ํŒŒํ‹ฐ์…”๋‹ ๋ฐฉ์‹
  • ์ผ๋ฐ˜์ ์œผ๋กœ constant hashing์„ ์ด์šฉํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ชจ๋“  ์ธ์Šคํ„ด์Šค๊ฐ€ ์งˆ์˜ํ• ๋•Œ๋Š” ๊ทธ์— ๋งž๋Š” ์ธ์Šคํ„ด์Šค๋ฅผ ์•Œ๋ ค์ค„ ์ˆ˜ ์žˆ๋Š” ์†”๋ฃจ์…˜์„ ์ƒ๊ฐํ•˜๊ฑฐ๋‚˜ ๋ ˆ๋””์Šค ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๊ณ ๋ คํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ ˆ๋””์Šค ํŒŒํ‹ฐ์…”๋‹์˜ ๊ตฌํ˜„
    • ํŒŒํ‹ฐ์…”๋‹์€ ํด๋ผ์ด์–ธํŠธ , ํ”„๋ก์‹œ , ์งˆ์˜ ๋ผ์šฐํ„ฐ ์™€ ๊ฐ™์€ ์—ฌ๋Ÿฌ ๊ณ„์ธต์œผ๋กœ ๊ตฌ์„ฑ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
      • ํด๋ผ์ด์–ธํŠธ๋Š” constant hashing์˜ ๊ตฌํ˜„ ์ด๊ณ 
      • ํ”„๋ก์‹œ ๊ณ„์ธต์€ ๋ชจ๋“  ๋ ˆ๋””์Šค์˜ ์งˆ์˜๋ฅผ ํ”„๋ก์‹œํ•˜๊ณ , ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํŒŒํ‹ฐ์…”๋‹์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์ถ”๊ฐ€์ ์ธ ๊ณ„์ธต ์ด๋‹ค.
        • ํ”„๋ก์‹œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ํด๋ผ์ด์–ธํŠธ ๊ณ„์ธต์—์„œ๋Š” ํŒŒํ‹ฐ์…”๋‹์ด ์ผ์–ด๋‚˜๊ณ  ์žˆ๋Š”์ง€ ์•Œ ํ•„์š”๊ฐ€ ์—†๋‹ค.
        • ํ”„๋ก์‹œ ๊ณ„์ธต์— ๋Œ€ํ•œ ์˜ˆ๋Š” ํŠธ์›ธํ”„๋ก์‹œ(twemproxy) ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ์ดํ›„ ์†Œ๊ฐœํ•˜๋„๋ก ํ•œ๋‹ค.
      • ์งˆ์˜ ๋ผ์šฐํ„ฐ ๊ณ„์ธต์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋ณด์ด์ง€ ์•Š๋Š”๋‹ค. -์งˆ์˜ ๋ผ์šฐํ„ฐ ๊ณ„์ธต์€ ์™ธ๋ถ€ ํ”„๋กœ๊ทธ๋žจ์ด ์•„๋‹ˆ๊ณ , ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ๋‹ค.
        • ๋ ˆ๋””์Šค ์ธ์Šคํ„ด์Šค๋กœ ์š”์ฒญํ•˜๋Š” ๋ชจ๋“  ์ปค๋ฉ˜๋“œ๊ฐ€ ์งˆ์˜ ๋ผ์šฐํ„ฐ ๊ณ„์ธต์—์„œ ์„ฑ๊ณต์ ์ธ ๊ฒƒ์€ ๋ ˆ๋””์Šค ์ธ์Šคํ„ด์Šค๊ฐ€ ์ปค๋งจ๋“œ๋ฅผ ๋ ˆ๋””์Šค ํด๋Ÿฌ์Šคํ„ฐ์˜ ์ ์ ˆํ•œ ๋ ˆ๋””์Šค ์ธ์Šคํ„ด์Šค์— ํ™•์‹คํžˆ ์ „๋‹ฌํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
        • ๋ ˆ๋””์Šค ํด๋Ÿฌ์Šคํ„ฐ๋Š” ์งˆ์˜ ๋ผ์šฐํ„ฐ๊ฐ™์ด ๋™์ž‘ํ•œ๋‹ค.
    • ์–ด๋–ค ํ˜•ํƒœ์˜ ํŒŒํ‹ฐ์…”๋‹์„ ์‚ฌ์šฉํ•˜๋”๋ผ๋„, ๋ชจ๋“  ๋ ˆ๋””์Šค ์ปค๋งจ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ ๋Š” ํ•  ์ˆ˜ ์—†๋‹ค.
    • ํŒŒํ‹ฐ์…”๋‹์ด ์ ์šฉ๋œ ๋ ˆ๋””์Šค์—์„œ ์ผ๋ถ€ ์ปค๋งจ๋“œ๋Š” ๋™์ž‘ํ•˜์ง€ ์•Š๋Š”๋‹ค.
    • ํ•œ ๋Œ€์˜ ๋ ˆ๋””์Šค๊ฐ€ ์•„๋‹ˆ๋ผ ๋ ˆ๋””์Šค ์ธ์Šคํ„ด์Šค ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ ˆ๋””์Šค ์„œ๋ฒ„๋ฅผ ๊ฒ€์‚ฌํ•˜๋Š” ์ปค๋งจ๋“œ๊ฐ€ ๋™์ž‘ํ•  ์ˆ˜ ์—†๋‹ค.
    • ์—ฌ๋Ÿฌ ์žฅ๋น„์— ๊ฑธ์ณ ํ‚ค๊ฐ€ ๋ถ„์‚ฐ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ‚ค๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›๋Š” ์ปค๋งจ๋“œ๋„ ์—ญ์‹œ ๋™์ž‘ํ•  ์ˆ˜ ์—†๋‹ค.
  • ํŠธ์›ธํ”„๋ก์‹œ(twemproxy) ๋กœ ์ž๋™ ์ƒค๋”ฉํ•˜๊ธฐ
    • ์ƒ์šฉ ํ™˜๊ฒฝ์—์„œ ์“ธ ์ˆ˜ ์žˆ๋Š” nutcracker ๋ผ๊ณ ๋„ ์•Œ๋ ค์ ธ ์žˆ์žˆ๋‹ค.
    • ํŠธ์›ธํ”„๋ก์‹œ๋Š” ํŠธ์œ„ํ„ฐ์—์„œ ๋งŒ๋“ค์–ด์กŒ๊ณ , 2012๋…„์— ๋ฐฐํฌ๋˜์—ˆ์œผ๋ฉฐ, ์•„ํŒŒ์น˜ ๋ผ์ด์„ ์Šค 2.0๋ฒ„์ „์ด๋‹ค.
    • ํŠธ์›ธํ”„๋ก์‹œ๋Š” constant hashing๋ฟ ์•„๋‹ˆ๋ผ ๋‹ค์ค‘ ํ•ด์‹ฑ ๋ชจ๋“œ๋ฅผ ์ง€์›ํ•˜๋Š” ์ƒค๋”ฉ์„ ๊ตฌํ˜„ํ•œ ๋ ˆ๋””์Šค์™€ ๋งด์บ์‹œ๋“œ ํ”„๋กœํ† ์ฝœ์— ๋Œ€ํ•œ ํ”„๋ก์‹œ๋กœ ๊ฐ€๋ณ๊ณ  ๋น ๋ฅด๋‹ค.
    • ๋˜ํ•œ ์š”์ฒญ๊ณผ ์‘๋‹ต์œผ๋กœ ๊ตฌ์„ฑ๋œ ํŒŒ์ดํ”„๋ผ์ธ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ์—ฌ๋Ÿฌ ์„œ๋ฒ„์— ์ž๋™์œผ๋กœ ์ƒค๋”ฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์„œ๋ฒ„ ์—ฐ๊ฒฐ์„ ์ง€์†์ ์œผ๋กœ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ์ด๋ฏธ ํ•€ํ„ฐ๋ ˆ์ŠคํŠธ, ํ…€๋ธ”๋Ÿฌ, ํŠธ์œ„ํ„ฐ, ๋ฐ”์ธ, ์œ„ํ‚ค๋ฏธ๋””์–ด, ๋”•, ์Šค๋ƒ…์ฑ—๊ณผ ๊ฐ™์€ ํšŒ์‚ฌ๋“ค์ด ์ƒ์šฉ ํ™˜๊ฒฝ์—์„œ ํŠธ์›นํ”„๋กœ์‹œ๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค.
    • ๊ณต์‹ git : https://github.com/twitter/twemproxy
    • mac์šฉ brew : http://macappstore.org/nutcracker/
    • ํŠธ์›ธํ”„๋ก์‹œ๋ฅผ ํ•œ๋Œ€๋งŒ ์‚ฌ์šฉํ•˜๋ฉด ๋‹จ์ผ ์žฅ์•  ํฌ์ธํŠธ๊ฐ€ ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ๋Ÿฌ๋Œ€์˜ ํ”„๋ก์‹œ ์„œ๋ฒ„๋ฅผ ๋‘๊ณ  ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ๋ฅผ ๋‘๋Š” ํ˜•์‹์œผ๋กœ ์—ฐ๊ฒฐํ•ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.


(twemweb์„ ํ†ตํ•œ ํด๋Ÿฌ์Šคํ„ฐ๋ง)


๋ ˆ๋””์Šค ํด๋Ÿฌ์Šคํ„ฐ์™€ ๋ ˆ๋””์Šค ์„ผํ‹ฐ๋„ (์ง‘๋‹จ์ง€์„ฑ)

  • ๋ ˆ๋””์Šค๋ฅผ ์ฒ˜์Œ ์„ค๊ณ„ํ•  ๋•Œ๋Š” ๋ ˆ๋””์Šค๋ฅผ ๋งค์šฐ ๊ฐ€๋ณ๊ณ  ๋น ๋ฅด๊ฒŒ ํ•˜๋Š” ๊ฒƒ์ด ๋ชฉ์ ์ด์—ˆ๋‹ค.
  • ์ง€๊ธˆ๊นŒ์ง€ ๋ ˆ๋””์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” topology๋Š” ๋งˆ์Šคํ„ฐ/์Šฌ๋ ˆ์ด๋ธŒ์˜ topology์˜€๋‹ค.
  • ์ด topology๋Š” ๋งˆ์Šคํ„ฐ๊ฐ€ ๋ชจ๋“  ์“ฐ๊ธฐ ์ž‘์—…์„ ๋ฐ›๊ณ , ๊ทธ ๋ณ€๊ฒฝ์„ ํ•˜๋‚˜ ๋˜๋Š” ์—ฌ๋Ÿฌ ์Šฌ๋ ˆ์ด๋ธŒ์— ๋ณต์ œ ํ•˜๋Š” ๋ฐฉ์‹์ด์—ˆ๋‹ค.
  • ์–ด๋– ํ•œ ์ข…๋ฅ˜์˜ ์ž๋™ ํŽ˜์ผ์˜ค๋ฒ„ ๋˜๋Š” ๋ฐ์ดํ„ฐ ์ƒค๋”ฉ ์—†์ด๋„ ๋งˆ์Šคํ„ฐ/์Šฌ๋ ˆ์ด๋ธŒ topology๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋งˆ์Šคํ„ฐ/์Šฌ๋ ˆ์ด๋ธŒ topology๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฝ์šฐ์˜ ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ ์ž˜ ๋™์ž‘ํ•œ๋‹ค.
    • ๋งˆ์Šคํ„ฐ๋Š” ํ•„์š”ํ•œ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ธฐ์— ์ถฉ๋ถ„ํ•œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ฐ–๊ณ  ์žˆ๋‹ค.
    • ์ฝ๊ธฐ ์„ฑ๋Šฅ์„ ๋” ์ข‹๊ฒŒ ํ™•๋Œ€ํ•˜๊ฑฐ๋‚˜ ๋„คํŠธ์›Œํฌ ๋Œ€์—ญํญ์ด ๋ฌธ์ œ์ผ ๋•Œ ์Šฌ๋ ˆ์ด๋ธŒ๋ฅผ ๋” ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค. (์ „์ฒด ์ฝ๊ธฐ ์šฉ๋Ÿ‰์ด ํ•˜๋“œ์›จ์–ด ์„ฑ๋Šฅ๋ณด๋‹ค ํด ๋•Œ)
    • ๋งˆ์Šคํ„ฐ ์„œ๋ฒ„์— ์ ๊ฒ€์ด ํ•„์š”ํ•  ๋•Œ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋™์ž‘์„ ์ค‘์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ์Šฌ๋ ˆ์ด๋ธŒ์— ๋งˆ์Šคํ„ฐ์™€ ๋™์ผํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ์กด์žฌํ•œ๋‹ค.
  • ํ•˜์ง€๋งŒ ๋งˆ์Šคํ„ฐ/์Šฌ๋ ˆ์ด๋ธŒ topology๋Š” ๊ทธ ๋ฐ–์˜ ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ๋Š” ์ž˜ ๋™์ž‘ํ•˜์ง€ ์•Š๋Š”๋‹ค.
    • ๋ฐ์ดํ„ฐ ์ง‘ํ•ฉ์ด ๋งˆ์Šคํ„ฐ ๋ ˆ๋””์Šค ์ธ์Šคํ„ด์Šค์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ณด๋‹ค ํฌ๋‹ค.
    • ๋งˆ์Šคํ„ฐ ๋ ˆ๋””์Šค ์ธ์Šคํ„ด์Šค์—์„œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ, ๋งˆ์Šคํ„ฐ์™€ ์—ฐ๊ฒฐ๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ฉˆ์ถœ ์ˆ˜ ์—†๋‹ค.
    • ์—ฌ๋Ÿฌ ๋…ธ๋“œ์— ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„๋ฐฐํ•ด์•ผ ํ•œ๋‹ค.
    • ๋‹จ์ผ ์žฅ์• ์ (a single point of failure)์„ ํ—ˆ์šฉํ•˜์ง€ ๋ชปํ•œ๋‹ค.
  • 2011๋…„ ์‚ด๋ฐ”ํ† ๋ฅด ์‚ฐํ•„๋ฆฌํฌ๋Š” ๋งˆ์Šคํ„ฐ/์Šฌ๋ ˆ์ด๋ธŒ topology ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ–ˆ๊ณ , ๋ ˆ๋””์Šค ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๊ฐœ๋ฐœํ•˜๊ธฐ๋ณด๋‹ค๋Š” ์ž๋™ ํŽ˜์ผ์˜ค๋ฒ„๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ๋‹ค.

1. ๋ ˆ๋””์Šค ์„ผํ‹ฐ๋„

  • ๋งˆ์Šคํ„ฐ ์ธ์Šคํ„ด์Šค์—์„œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๋งˆ์Šคํ„ฐ ์Šฌ๋ ˆ์ด๋ธŒ ์ธ์Šคํ„ด์Šค ์ค‘ ํ•˜๋‚˜๊ฐ€ ๋งˆ์Šคํ„ฐ๋กœ ์Šน๊ฒฉ๋˜์–ด์•ผ ํ•˜๊ณ , ๋‚˜๋จธ์ง€ ์Šฌ๋ ˆ์ด๋ธŒ ์ธ์Šคํ„ด์Šค๋Š” ์ƒˆ๋กœ์šด ๋งˆ์Šคํ„ฐ์— ๋Œ€ํ•œ ์Šฌ๋ ˆ์ด๋ธŒ๋กœ ์žฌ๊ตฌ์„ฑ ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.
  • ๋ ˆ๋””์Šค ์„ผํ‹ฐ๋„์ด ์žˆ๊ธฐ ์ „์—๋Š” ํŽ˜์ผ ์˜ค๋ฒ„ ์ž‘์—…์„ ์ˆ˜๋™์œผ๋กœ ํ–ˆ๋Š”๋ฐ ๊ฒฐ์ฝ” ์•ˆ์ •์ ์ด์ง€ ์•Š์•˜๋‹ค.
  • ๋ ˆ๋””์Šค ์„ผํ‹ฐ๋„์€ ๊ธฐ์กด์˜ ๋ ˆ๋””์Šค ๋งˆ์Šคํ„ฐ๊ฐ€ ์ž‘๋™์ด ์•ˆ๋˜๋ฉด ์Šฌ๋ ˆ์ด๋ธŒ ์ค‘ ํ•˜๋‚˜๋ฅผ ๋งˆ์Šคํ„ฐ๋กœ ์ž๋™ ์Šน๊ฒฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„๋œ ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์ด๋‹ค.
  • ๋ ˆ๋””์Šค ๋งˆ์Šคํ„ฐ๊ฐ€ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ–๊ณ  ์žˆ๊ณ , ์Šฌ๋ ˆ์ด๋ธŒ ๋ ˆ๋””์Šค๋Š” ๋งˆ์Šคํ„ฐ์— ๋Œ€ํ•œ ๋ณต์‚ฌ๋ณธ์„ ๊ฐ–๊ณ  ์žˆ์–ด, ๋ ˆ๋””์Šค ์„ผํ‹ฐ๋„์€ ๋…ธ๋“œ์— ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„์‚ฐํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • ์ฆ‰ ๋ ˆ๋””์Šค ์„ผํ‹ฐ๋„์€ ๋ถ„์‚ฐ ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ๊ฐ€ ์•„๋‹ˆ๋‹ค.
  • ๋ ˆ๋””์Šค ์„ผํ‹ฐ๋„์„ ์‚ฌ์šฉํ•˜๋Š” ์•„์ฃผ ์ผ๋ฐ˜์ ์ธ ์•„ํ‚คํ…์ฒ˜๋Š” ํ•˜๋‚˜์˜ ๋ ˆ๋””์Šค ์„œ๋ฒ„๋งˆ๋‹ค ํ•˜๋‚˜์˜ ๋ ˆ๋””์Šค ์„ผํ‹ฐ๋„์„ ์„ค์น˜ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
  • ๋ ˆ๋””์Šค ์„ผํ‹ฐ๋„์€ ๋ ˆ๋””์Šค ์„œ๋ฒ„์™€ ๋ถ„๋ฆฌ๋œ ํ”„๋กœ์„ธ์Šค์ด๋ฉฐ, ๋ ˆ๋””์Šค ์„œ๋ฒ„์™€๋Š” ๋‹ค๋ฅธ ํฌํŠธ๋ฅผ ์—ฐ๋‹ค.
  • ๊ธฐ์กด ๋ ˆ๋””์Šค์™€ ๋ ˆ๋””์Šค ์„ผํ‹ฐ๋„์˜ ์ฃผ์š” ์ฐจ์ด์ ์€ ๋ ˆ๋””์Šค ์„ผํ‹ฐ๋„์€ ๋‹ค๋ฅธ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ–ˆ๋‹ค๋Š” ์ ์ด๋ฉฐ, ์„ผํ‹ฐ๋„์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์„ผํ‹ฐ๋„์„ ์ง€์›ํ•˜๋Š” ๋ ˆ๋””์Šค ํด๋ผ์ด์–ธํŠธ๋ฅผ ๋”ฐ๋กœ ์„ค์น˜ํ•ด์•ผ ํ•œ๋‹ค.
  • ํด๋ผ์ด์–ธํŠธ๋Š” ํ•ญ์ƒ ๋ ˆ๋””์Šค ์ธ์Šคํ„ด์Šค์™€ ์—ฐ๊ฒฐ๋ผ ์žˆ์ง€๋งŒ ์—ฐ๊ฒฐํ•ด์•ผ ํ•  ๋ ˆ๋””์Šค ์ธ์Šคํ„ด์Šค๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ ˆ๋””์Šค ์„ผํ‹ฐ๋„์— ์งˆ์˜ํ•ด์•ผ ํ•œ๋‹ค.
  • docker๋ฅผ ์ด์šฉํ•œ ๋ ˆ๋””์Šค ์„ผํ‹ฐ๋„ ์„ค์ • ๋ฐ ์‹คํ–‰ : https://hub.docker.com/r/erichsu/redis-sentinel/
  • ๊ฐ„๋‹จํ•œ ์„ค์ • ํŒŒ์ผ์„ /conf ํด๋” ์•„๋ž˜ ๋„ฃ์–ด๋‘์—ˆ๋‹ค.
    • sentinel monitor [master-name] [ip] [redis-port] [quorum]
      • ๋ชจ๋‹ˆํ„ฐํ•  ๋งˆ์Šคํ„ฐ redis ์„ ํƒ
      • quorum : ์ƒˆ๋กœ์šด ๋งˆ์Šคํ„ฐ๋ฅผ ์„ ์ถœํ•˜๊ธฐ ์ „ ํ˜„์žฌ์˜ ๋งˆ์Šคํ„ฐ๊ฐ€ ๋‹ค์šด ์ƒํƒœ์ž„์„ ๋™์˜ํ•ด์•ผ ํ•˜๋Š” ์„ผํ‹ฐ๋„์˜ ์ตœ์†Œ ๊ฐœ์ˆ˜
    • sentinel down-after-milliseconds [master-name] [milliseconds]
      • ๋ช…์„ธํ•œ ๋ฐ€๋ฆฌ์ดˆ ๋™์•ˆ ๋งˆ์Šคํ„ฐ์— ๋„๋‹ฌํ•˜์ง€ ๋ชปํ•˜๋ฉด (PING์— ์‘๋‹ต์„ ๋ฐ›์ง€ ๋ชปํ•˜๋ฉด), ๋‹ค๋ฅธ์„ผํ‹ฐ๋„์—๊ฒŒ ๋งˆ์Šคํ„ฐ๊ฐ€ ๋‹ค์šด๋ฌ์Œ์„ ์•Œ๋ฆผ
    • sentinel failover-timeout [master-name] [milliseconds]
      • ์งง์€ ์‹œ๊ฐ„ ๋‚ด์— ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ ๋งˆ์Šคํ„ฐ์˜ ํŽ˜์ผ์˜ค๋ฒ„๋ฅผ ํ”ผํ•˜๊ธฐ ์œ„ํ•œ ์„ค์ •
      • ํ•œ๋ฒˆ ๋งˆ์Šคํ„ฐ์—์„œ ํƒˆ๋ฝํ•œ ๋…ธ๋“œ๋А failover ์ƒํ™ฉ์ด ๋‹ค์‹œ ์™€๋„ fileover-timeout ์‹œ๊ฐ„ ๋‚ด๋ผ๋ฉด ๋งˆ์Šคํ„ฐ ํ›„๋ณด๊ตฐ์— ๋“ค์ง€ ๋ชปํ•˜๋„๋ก ํ•ด์ฃผ๋Š” timeout ์„ค์ •
    • sentinel parallel-syncs [master-name] [numslaves]
      • ์ƒˆ๋กœ์šด ๋งˆ์Šคํ„ฐ์™€ ์—ฐ๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋™์‹œ์— ์žฌ์„ค์ •๋  ์ˆ˜ ์žˆ๋Š” ์Šฌ๋ ˆ์ด๋ธŒ์ด ๊ฐฏ์ˆ˜.
      • ์ด ํ”„๋กœ์„ธ์Šค๋ฅผ ์ง„ํ–‰ํ•˜๋Š” ๋™์•ˆ ์Šฌ๋ ˆ์ด๋ธŒ๋Š” ํด๋ผ์ด์–ธํŠธ์—์„œ ์‚ฌ์šฉ ๋ถˆ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๊ฐ€ ๋œ๋‹ค.
      • ๋™์‹œ์— ์‚ฌ์šฉ ๋ถˆ๊ฐ€๋Šฅํ•œ ์Šฌ๋ ˆ์ด๋ธŒ์˜ ๊ฐœ์ˆ˜๋ฅผ ์ตœ์†Œํ™”ํ•˜๊ธฐ ์œ„ํ•ด parallel-sync๋ฅผ ๋‚ฎ์€ ๊ฐ’์œผ๋กœ ํ•œ๋‹ค.
  • sentinel์— ์“ฐ์ด๋Š” java-client ๋„ jedis์ด๋‹ค. (https://scalegrid.io/blog/high-availability-with-redis-sentinels-connecting-to-redis-masterslave-sets/)
  • redis sentinel์€ ํŒŒ๋‹ˆ์…”๋‹ ์ƒํƒœ์—์„œ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์žƒ์–ด๋ฒ„๋ฆฌ๊ฒŒ ๋œ๋‹ค. ์‹œ๋‚˜๋ฆฌ์˜ค๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.
    • 3๊ฐœ์˜ ๋ ˆ๋””์Šค ์ธ์Šคํ„ด์Šค๊ฐ€ ์žˆ๋‹ค. ํ•˜๋‚˜๋Š” ๋งˆ์Šคํ„ฐ๊ณ  ๋‘˜์€ ๋ณต์ œ๋ณธ์ด๋‹ค. ๊ฐ ๋ ˆ๋””์Šค ์ธ์Šคํ„ด์Šค์—๋Š” ๋ ˆ๋””์Šค ์„ผํ‹ฐ๋„์ด ์žˆ๋‹ค.
    • ํ˜„์žฌ ๋งˆ์Šคํ„ฐ์— ์—ฐ๊ฒฐ๋œ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์žˆ์œผ๋ฉฐ, ์“ฐ๊ธฐ ์ž‘์—…์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ๋„คํŠธ์›Œํฌ ํŒŒํ‹ฐ์…˜์ด ๋ฐœ์ƒํ•ด ํ˜„์žฌ ๋งˆ์Šคํ„ฐ๊ฐ€ ์Šฌ๋ ˆ์ด๋ธŒ๋กœ๋ถ€ํ„ฐ ๋ถ„๋ฆฌ๋˜๊ณ  ์Šฌ๋ ˆ์ด๋ธŒ๋ผ๋ฆฌ๋งŒ ์—ฌ์ „ํžˆ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด, ์Šฌ๋ ˆ์ด๋ธŒ ์ค‘ ํ•˜๋‚˜๊ฐ€ ๋งˆ์Šคํ„ฐ๋กœ ์Šน๊ฒฉ๋œ๋‹ค.
    • ์Šฌ๋ ˆ์ด๋ธŒ ์ค‘ ํ•˜๋‚˜๊ฐ€ ๋งˆ์Šคํ„ฐ๋กœ ์Šน๊ฒฉ๋˜๋Š” ์ค‘์—, ๋ ˆ๋””์Šค ํด๋ผ์ด์–ธํŠธ๋Š” ๊ฒฉ๋ฆฌ๋œ ๋งˆ์Šคํ„ฐ์— ์“ฐ๊ธฐ ์ž‘์—…์„ ๊ณ„์†ํ•œ๋‹ค.
    • ๋‹ค์‹œ ๋„คํŠธ์›Œํฌ๊ฐ€ ์ž˜ ๋™์ž‘ํ•ด์„œ ๋ชจ๋“  ๋ ˆ๋””์Šค ์„œ๋ฒ„ ๊ฐ„์˜ ํ†ต์‹ ์ด ์ž˜ ๋œ๋‹ค๋ฉด, ๋Œ€๋ถ€๋ถ„์˜ ์„ผํ‹ฐ๋„์€ ์ด์ „์˜ ๋งˆ์Šคํ„ฐ๊ฐ€ ์ƒˆ๋กœ์šด ๋งˆ์Šคํ„ฐ์˜ ์Šฌ๋ ˆ์ด๋ธŒ๊ฐ€ ๋˜๋Š” ๊ฒƒ์ด ๋™์˜ํ•  ๊ฒƒ์ด๋‹ค.
    • ์ด๋Ÿฐ ์ผ์ด ๋ฐœ์ƒํ•  ๋•Œ ํ”„๋กœ์„ธ์Šค๊ฐ„ ๋ฐ์ดํ„ฐ ๋™๊ธฐํ™”๊ฐ€ ์ด๋ฃจ์–ด์ง€์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋ ˆ๋””์Šค ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ „๋‹ฌํ•œ ๋ชจ๋“  ์“ฐ๊ธฐ ์ž‘์—…์„ ์žƒ์–ด๋ฒ„๋ฆฐ๋‹ค.
  • ์ฆ‰ ๋ ˆ๋””์Šค ์„ผํ‹ฐ๋„์€ ๋†’์€ ๊ฐ€์šฉ์„ฑ๊ณผ ์ž๋™ ํŽ˜์ผ์˜ค๋ฒ„ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜์ง€๋งŒ, ๋‹ค์ค‘ ๋ ˆ๋””์Šค ์ธ์Šคํ„ด์Šค ๊ฐ„์˜ ๋ฐ์ดํ„ฐ ๋ถ„์‚ฐ ๋ฌธ์ œ๋Š” ํ•ด๊ฒฐํ•˜์ง€ ๋ชปํ•œ๋‹ค. ๋ ˆ๋””์Šค ํด๋Ÿฌ์Šคํ„ฐ๋Š” ๋‹ค๋ฅธ ์ ‘๊ทผ ๋ฐฉ๋ฒ•์œผ๋กœ ํ•ด๋‹น ๋ฌธ์ œ๋ฅผ ๋‘˜ ๋‹ค ํ•ด๊ฒฐํ•œ๋‹ค.
  • ๋ ˆ๋””์Šค ์„ผํ‹ฐ๋„ ๊ทธ๋ฆผ ์ฐธ์กฐ (http://senlinzhan.github.io/2017/04/08/redis-sentinel/)


(ํ…Œ์ŠคํŠธ์šฉ ๋งˆ์Šคํ„ฐ ์Šฌ๋ ˆ์ด๋ธŒ ๋ ˆ๋””์Šค๋“ค)



(๋ ˆ๋””์Šค ์„ผํ‹ฐ๋„ฌ ๊ธฐ๋™!)


2. ๋ ˆ๋””์Šค ํด๋Ÿฌ์Šคํ„ฐ

  • ๋ ˆ๋””์Šค ํด๋Ÿฌ์Šคํ„ฐ๋Š” ์—ฌ๋Ÿฌ ๋ ˆ๋””์Šค ์ธ์Šคํ„ด์Šค์— ๋ฐ์ดํ„ฐ๋ฅผ ์ž๋™์œผ๋กœ ์ƒค๋”ฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„๋๊ณ , ๋„คํŠธ์›Œํฌ ํŒŒํ‹ฐ์…˜์ด ๋ฐœ์ƒํ•˜๋”๋ผ๋„ ์–ด๋А ์ •๋„์˜ ๊ฐ€์šฉ์„ฑ์„ ์ œ๊ณตํ•œ๋‹ค.
  • ํ˜ผ๋ˆ ์ƒํƒœ์˜ ์‹œ๋‚˜๋ฆฌ์—ฅ์„œ๋Š” ๊ฐ•ํ•œ ์ผ๊ด€์„ฑ์„ ์ œ๊ณตํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • ๋ ˆ๋””์Šค ์„ผํ‹ฐ๋„๊ณผ ๋‹ฌ๋ฆฌ ๋ ˆ๋””์Šค ํด๋Ÿฌ์Šคํ„ฐ๋Š” ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๋งŒ ํ•„์š”๋กœ ํ•œ๋‹ค.
  • ๊ทธ๋Ÿฌ๋‚˜ ๋ ˆ๋””์Šค๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ํฌํŠธ๋Š” 2๊ฐœ๋‹ค.
  • ์ฒซ๋ฒˆ์งธ ํฌํŠธ๋Š” ํด๋ผ์ด์–ธํŠธ๋ฅผ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๊ณ , ๋‘๋ฒˆ๏ฟฝ์งธ ํฌํŠธ๋Š” ๋…ธ๋“œ ๊ฐ„์˜ ํ†ต์‹ ์„ ์œ„ํ•œ ๋ฒ„์Šค๋กœ ์‚ฌ์šฉ๋œ๋‹ค.
  • ์ˆซ์ž๊ฐ€ ๋††์€ ํฌํŠธ๋Š” ๋ฌธ์ œ ํƒ์ง€, ํŽ˜์ผ ์˜ค๋ฒ„, ์žฌ์‚ฌ๋”ฉ ๋“ฑ๊ณผ ๊ฐ™์€ ๋ฉ”์‹œ์ง€๋ฅผ ๊ตํ™˜ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋œ๋‹ค.
  • ๋ ˆ๋””์Šค ํด๋Ÿฌ์Šคํ„ฐ์˜ ๋ฒ„์Šค๋Š” ๋ ˆ๋””์Šค ๋…ธ๋“œ ๊ฐ„์˜ ๋ฉ”์‹œ์ง€๋ฅผ ๊ตํ™˜ํ•˜๊ธฐ ์œ„ํ•ด ๋ฐ”์ด๋„ˆ๋ฆฌ ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•œ๋‹ค.
  • ์ˆซ์ž๊ฐ€ ๋‚ฎ์€ ํฌํŠธ๋Š” ์„ค์ •์—์„œ ๋ช…์„ธํ•˜๊ณ , ๋ ˆ๋””์Šค๋Š” ์ˆซ์ž๊ฐ€ ๋‚ฎ์€ ํฌํŠธ์— 10,000์„ ๋”ํ•ด ๋†’์€ ํฌํŠธ๋ฅผ ํ• ๋‹นํ•œ๋‹ค.
  • ๋ ˆ๋””์Šค ํด๋Ÿฌ์Šคํ„ฐ topology๋Š” ํ’€ ๋ฉ”์‹œ์ง€ ๋„คํŠธ์›Œํฌ์ด๋‹ค.
  • ๋ชจ๋“  ๋…ธ๋“œ๋Š” TCP ์—ฐ๊ฒฐ ๋ฐฉ์‹์œผ๋กœ ์„œ๋กœ ์—ฐ๊ฒฐ๋œ๋‹ค.
  • ๋ ˆ๋””์Šค ํด๋Ÿฌ์Šคํ„ฐ ์ƒํƒœ๊ฐ€ ์•ˆ์ •์ ์ด๊ฒŒ ๋˜๋ ค๋ฉด ์ตœ์†Œ 3๊ฐœ์˜ ๋งˆ์Šคํ„ฐ๊ฐ€ ํ•„์š”ํ•˜๋‹ค.
  • ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋Š” ๋งˆ์Šคํ„ฐ ๋‹จ์œ„๋กœ ์ƒค๋”ฉ๋˜๊ณ  ์Šฌ๋ ˆ์ด๋ธŒ ๋‹จ์œ„๋กœ ๋ณต์ œ๋œ๋‹ค.
  • ๋งˆ์Šคํ„ฐ๋งˆ๋‹ค ์ตœ์†Œ ํ•˜๋‚˜์˜ ๋ณต์ œ๋ณธ์„ ๋‘๋Š” ๊ฒƒ์„ ์ถ”์ฒœํ•œ๋‹ค. ๋ณต์ œ๋ณธ์ด ํ•˜๋‚˜๋„ ์—†์„ ๊ฒฝ์šฐ ๋งˆ์Šคํ„ฐ ๋…ธ๋“œ๊ฐ€ ์ž‘๋™์ด ์•ˆ๋˜๋ฉด ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ์žƒ๊ฒŒ ๋œ๋‹ค.
  • ๋ ˆ๋””์Šค ์„ผํ‹ฐ๋„๊ณผ ๋‹ฌ๋ฆฌ ํŽ˜์ผ ์˜ค๋ฒ„๊ฐ€ ๋ ˆ๋””์Šค ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ๋ฐœ์ƒํ•œ๋‹ค๋ฉด, ์Šฌ๋ ˆ์ด๋ธŒ๊ฐ€ ๋งˆ์Šคํ„ฐ๋กœ ์Šน๊ฒฉํ•  ๋•Œ๊นŒ์ง€, ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ ๋งˆ์Šคํ„ฐ๋กœ ํ• ๋‹น๋œ ์Šฌ๋กฏ์˜ ํ‚ค๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.
  • ์Šฌ๋ ˆ์ด๋ธŒ ์Šน๊ฒฉ์ด ์ฆ‰๊ฐ์ ์ด์ง€ ์•Š๊ทธ ๋•Œ๋ฌธ์— ํŽ˜์ผ์˜ค๋ฒ„ ๋ฐœ์ƒ์‹œ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉ ๋ชปํ•  ์ˆ˜๋„ ์žˆ๋‹ค.
  • ๋ ˆ๋””์Šค๊ฐ€ ํด๋Ÿฌ์Šคํ„ฐ ๋ชจ๋“œ์—์„œ ๋™์ž‘ ์ค‘์ด๋ฉด ๋ ˆ๋””์Šค์˜ ์ธํ„ฐํŽ˜์ด์Šค๋Š” ์•ฝ๊ฐ„ ๋ฐ”๋€Œ๊ธฐ ๋•Œ๋ฌธ์—, ๋” ๋˜‘๋˜‘ํ•œ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํ•„์š”ํ•˜๋‹ค
    • ์˜ˆ๋ฅผ๋“ค์–ด redis-cli๋ฅผ ํ†ตํ•ด ์—ฐ๊ฒฐํ•˜๋ ค๋ฉด -c ๋งค๊ฐœ๋ณ€์ˆ˜ ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค. ๋งŒ์•ฝ ๊ทธ๋ƒฅ ์ ‘์†ํ•˜๋ฉด ์‹ฑ๊ธ€ ์ธ์Šคํ„ด์Šค ๋ชจ๋“œ๋กœ ์ ‘์†๋จ
  • ํ•ด์‹œ ์Šฌ๋กฏ
    • ๋ ˆ๋””์Šค ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ƒค๋”ฉํ•˜๊ธฐ ์œ„ํ•ด ํŒŒํ‹ฐ์…”๋‹ ๋ฐฉ๋ฒ•์€ ํ•ด์‹œ ํŒŒํ‹ฐ์…”๋‹ ๋ฉ”์†Œ๋“œ์™€ ๋น„์Šทํ•˜์ง€๋งŒ, ๋ ˆ๋””์Šค ํด๋Ÿฌ์Šคํ„ฐ๋ง์˜ ํŒŒํ‹ฐ์…”๋‹ ๋ฐฉ๋ฒ•์€ ํ•ญ์ƒ ๊ณ ์ • ๊ฐ’์œผ๋กœ ์ ์šฉ๋œ๋‹ค.
    • ๋ ˆ๋””์Šค ํด๋Ÿฌ์Šคํ„ฐ์˜ ๊ณ ์ • ๊ฐ’์€ 16,384๋‹ค.
    • ๋ ˆ๋””์Šค์—์„œ๋Š” ์ด ํŒŒํ‹ฐ์…”๋‹ ๋ฉ”์†Œ๋“œ๋ฅผ ํ•ด์‹œ ์Šฌ๋กฏ์ด๋ผ ๋ถ€๋ฅธ๋‹ค.
    • ๋ ˆ๋””์Šค ํด๋Ÿฌ์Šคํ„ฐ์˜ ๊ฐ ๋งˆ์Šคํ„ฐ๋Š” 16,384 ์Šฌ๋กฏ์ค‘ ์ผ๋ถ€๋ฅผ ์†Œ์œ  ํ•œ๋‹ค.
    • ํ‚ค๋ฅผ ์ •์ˆ˜๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ ์œ„ํ•ด CRC-16 ํ•ด์‹œ ํ•จ์ˆ˜ ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , ํ•ด๋‹น ์ •์ˆ˜๊ฐ’์ด 16,385๋กœ ๋ชจ๋“ˆ ์—ฐ์‚ฐํ•œ ๊ฐ’์ด ํ•ด์‹œ ์Šฌ๋กฏ์ด๋‹ค.
    • ๋งˆ์Šคํ„ฐ์— ๋Œ€ํ•œ ์Šฌ๋กฏ์˜ ์ž๋™ ์žฌ๋ถ„ํฌ๋Š” ์—†๋‹ค. ๊ฐ ๋งˆ์Šคํ„ฐ์— x๊ฐœ์˜ ์Šฌ๋กฏ์„ ์ˆ˜๋™์œผ๋กœ ํ• ๋‹นํ•ด์•ผ ํ•œ๋‹ค.
  • ํ•ด์‹œ ํƒœ๊ทธ
    • ๋‹ค์ค‘ ํ‚ค ์ž‘์—…์„ ์ง„ํ–‰ํ•˜๋ ค๋ฉด ๋™์ผ ๋…ธ๋“œ์— ์ €์žฅ๋  ๋ชจ๋“  ํ‚ค๊ฐ€ ํ•„์š”ํ•˜๋ฉฐ, ํ•ด์‹œ ํƒœ๊ทธ๋Š” ๋ ˆ๋””์Šค ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ๋‹ค์ค‘ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์œ ์ผํ•œ ๋ฐฉ๋ฒ•์ด๋‹ค.
    • ํ•ด์‹œ ํƒœ๊ทธ๋Š” ํŠธ์›ธํ”„๋ก์‹œ๋ฅผ ์ด์šฉํ•œ ๊ธฐ๋Šฅ๊ณผ ๋งค์šฐ ๋น„์Šทํ•˜๋‹ค.
    • ํ•ด์‹œ ํ•จ์ˆ˜๋ฅผ ์ ์šฉํ•ด ๋™์ผํ•œ ํ•ด์‹œ ์Šฌ๋กฏ์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ‚ค ์ด๋ฆ„์„ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋„๋ก ์‚ฌ์šฉ๋œ๋‹ค.
    • ID๋กœ ์‹๋ณ„๋˜๋Š” ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๋ ค๋ฉด ๋‹ค์Œ์ฒ˜๋Ÿผ ํ‚ค ์ด๋ฆ„์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค.
      • SADD {user123}:friends:usa "John" "Bob"
      • SADD {user123}:friend:brazil "Max" "Hugo"
      • SUNION {user123}:all_friends {user123}:friends:usa user123}:friend:brazil
      • ์ด ๋ฐฉ์‹์€ user123์ด๋ผ๋Š” ํ•ด์‹œํƒœ๊ทธ(์ค‘๊ด„ํ˜ธ๋กœ ๊ตฌ๋ถ„๋จ)๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ๋ชจ๋“  ํ‚ค๊ฐ€ ๋™์ผํ•œ ์Šฌ๋กฏ์— ์ €์žฅ๋œ๋‹ค.
    • ์•„๋ž˜๋Š” ์‹ค์ œ ๋ ˆ๋””์Šค ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์Šฌ๋ ˆ์ด๋ธŒ๋ฅผ ๋งŒ๋“ค๊ณ  command๋ฅผ ํ…Œ์ŠคํŠธ ํ•ด๋ณธ ๊ฒฐ๊ณผ์ด๋‹ค.
  • COMMAND
    • master node ์ถ”๊ฐ€
      • redis-server --port [port] --cluster-enabled yes --cluster-config-file node-5000.conf --cluster-node-timeout 2000 --cluster-slave-validity-factor 10 --cluster-migration-barrier 1 --cluster-require-full-coverage yes --dbfilename dump-5000.rdb --daemonize yes
    • slot ์ง€์ •
      • CLUSTER ADDSLOT {[from]..[to]}
    • ์—ํฌํฌ ์„ค์ • (ํ•ด์‹œ ์Šฌ๋กฏ์— ๋Œ€ํ•œ ์ถฉ๋Œ์ด ์žˆ์„ ๊ฒฝ์šฐ์— ์šฐ์„  ์ˆœ์œ„)
      • CLUSTER SET-CONFIG-EPOCH [epoch no]
    • cluster join
      • CLUSTER MEET [host] [port]
    • cluster node ํ™•์ธ
      • CLUSTER NODES
    • slave ๋ณต์ œ๋ณธ ์ถ”๊ฐ€
      • CLUSTER REPLICATE [node-id]
      • ๋ ˆ๋””์Šค ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ์ฝ๊ธฐ๋ฅผ ํ™•์žฅํ•˜๊ธฐ ์œ„ํ•ด ์Šฌ๋ ˆ์ด๋ธŒ์— ์—ฐ๊ฒฐํ•ด์„œ READONLY ์ปค๋งจ๋“œ๋กœ ์Šฌ๋ ˆ์ด๋ธŒ๋ฅผ ์ฝ๊ธฐ ์ „์šฉ์œผ๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค.
      • ์Šฌ๋ ˆ์ด๋ธŒ๊ฐ€ ์ฝ๊ธฐ ์ „์šฉ ๋ชจ๋“œ์ผ ๋•Œ, ์Šฌ๋ ˆ์ด๋ธŒ๋Š” ์ž์‹ ์ด ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์งˆ์˜๋ฅผ ๋‹ค๋ฅธ ๋…ธ๋“œ๋กœ ์ „๋‹ฌํ•˜์ง€ ์•Š๋Š”๋‹ค.
      • ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†๋Š” ์งˆ์˜๋งŒ ๋‹ค๋ฅธ ๊ณณ์œผ๋กœ ์ „๋‹ฌํ•œ๋‹ค.
      • ์ฝ๊ธฐ ์ „์šฉ ๋ชจ๋“œ์˜ ์œ ์ผํ•œ ๋‹จ์ ์€ ๋ฐ์ดํ„ฐ์˜ ๋ณ€๊ฒฝ ๋˜๋Š” ์ถ”๊ฐ€ ์‹œ ์ƒˆ๋กœ์šด ๊ฐ’ ๋Œ€์‹  ์˜ค๋ž˜๋œ ๊ฐ’์„ ์ฝ์„ ์ˆ˜๋„ ์žˆ๋‹ค๋Š” ์ ์ด๋‹ค.
      • READWRITE ์ปค๋งจ๋“œ๋กœ ์ฝ๊ธฐ ์ „์šฉ ๋ชจ๋“œ๋ฅผ ์ข…๋ฃŒํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ์Šฌ๋กฏ ์žฌ์ƒค๋”ฉ ๋ฐ ์˜ฎ๊ธฐ๊ธฐ
      • ํ•ด์‹œ ์Šฌ๋กฏ์˜ ์ƒํƒœ๋ฅผ importing์œผ๋กœ ๋ณ€๊ฒฝ : CLUSTER SETSLOT [hash-slot] IMPORTING [source-id]
        • ํ•ด์‹œ ์Šฌ๋กฏ์„ ๋ฐ›๋Š” ๊ณณ์—์„œ ์‹คํ–‰
      • ํ•ด์‹œ ์Šฌ๋กฏ์˜ ์ƒํƒœ๋กœ migrating์œผ๋กœ ๋ณ€๊ฒฝ : CLUSTER SETSLOT [hash-slot] MIGRATING [destinationd-id]
        • ํ•ด์‹œ ์Šฌ๋กฏ์„ ๋ณด๋‚ด๋Š” ๊ณณ์—์„œ ์‹คํ–‰
      • ํ•ด์‹œ ์Šฌ๋กฏ์„ ๋…ธ๋“œ์— ๋ณด๋ƒ„ : CLUSTER SETSLOT [hash-slot] NODE [owner-id]
        • source node์™€ destination node์—์„œ ๋‘˜ ๋‹ค ์‹คํ–‰
      • ํ•ด์‹œ ์Šฌ๋กฏ์˜ ์ƒํƒœ(importing, migrating)๋ฅผ ์ •๋ฆฌ : CLUSTER SETSLOT [hash-slot] STABLE
    • ๊ทธ ์™ธ ์ปค๋งจ๋“œ
      • CLUSTER COUNTKEYSINSLOT [slot] ์ปค๋งจ๋“œ๋Š” ์ฃผ์–ด์ง„ ์Šฌ๋กฏ์— ํ‚ค ๊ฐœ์ˆ˜๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค.
      • CLUSTER GETKEYSINSLOT [slot] [amount] ์ปค๋งจ๋“œ๋Š” ์Šฌ๋กฏ์— ํฌํ•จ๋œ ํ‚ค ์ด๋ฆ„์„ ๊ฐ€์ง„ ๋ฐฐ์—ด์„ ๋ช…์„ธํ•œ ํฌ๊ธฐ๋งŒํผ ๋ฆฌํ„ดํ•œ๋‹ค.
      • MIGRATE [host] [port] [key] [db] [timeout] ์ปค๋งจ๋“œ๋Š” ํ‚ค๋ฅผ ์—ฌ๋Ÿฌ ๋ ˆ๋””์Šค ์ธ์Šคํ„ด์Šค๋กœ ์˜ฎ๊ธด๋‹ค.
    • ๋…ธ๋“œ ์‚ญ์ œ
      • CLUSTER FORGET [node-id]


(ํด๋Ÿฌ์Šคํ„ฐ์šฉ ๋ ˆ๋””์Šค ์ดˆ๊ธฐํ™”)



(ํด๋Ÿฌ์Šคํ„ฐ ์ƒ์„ฑ)



(๋…ธ๋“œ ์ถ”๊ฐ€ํ•˜๊ณ  ํด๋Ÿฌ์Šคํ„ฐ ๋…ธ๋“œ์˜ ๋ ˆํ”Œ๋ฆฌ์นด๋กœ ๋ณ€๊ฒฝ)



(๋ ˆ๋””์Šค ํด๋Ÿฌ์Šคํ„ฐ ๋ชจ๋“œ์—์„œ mset, mget ๋ถˆ๊ฐ€)


  • Reference : Redis ํ•ต์‹ฌ์ •๋ฆฌ - ๋งฅ์Šค์›ฐ ๋ฐ์ด๋ธŒ์Šจ ๋‹ค ์‹ค๋ฐ”, ํœด๊ณ  ๋กœํŽ˜์Šค ํƒ€๋ฐ”๋ ˆ์Šค ์ง€์Œ | ๊น€์šฉํ™˜ ์˜ฎ๊น€
  • Authors : song2 (tkagksmsen)

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •