๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“˜ DataBase/Redis

[๋น…๋ฐ์ดํ„ฐ ์ €์žฅ ๋ฐ ๋ถ„์„์„ ์œ„ํ•œ NoSQL & Redis] Chapter 2 - Redis ์„ค์น˜ ๋ฐ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ

by GroovyArea 2023. 8. 20.

Redis์˜ ์ฃผ์š” ํŠน์ง•

  1. Redis๋Š” NoSQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ ๋ถ„๋ฅ˜๋˜๋ฉฐ Key-Value ํ˜•ํƒœ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

  2. Key-Value DB์ธ ๋™์‹œ์— In-Memory ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ์™€ ์ €์žฅ ๊ธฐ์ˆ ์„ ์ œ๊ณตํ•˜๋ฏ€๋กœ ๋น ๋ฅธ Read/Write ์„ฑ๋Šฅ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

  3. ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ ์œ ํ˜•์„ ์ง€์›ํ•˜๋ฉฐ String, Set, Sorted Set, Hash, List, HyperLogLogs ๋“ฑ์„ ์ €์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  4. ๋ฉ”๋ชจ๋ฆฌ ์ƒ์˜ ๋ฐ์ดํ„ฐ๋ฅผ Dump ํŒŒ์ผ๊ณผ AOF(Append Of File) ๋ฐฉ์‹์œผ๋กœ ๋””์Šคํฌ์— ์ €์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  5. Master/Slave Replication์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ์˜ ๋ถ„์‚ฐ ๋ณต์ œ๋ฅผ ์ง€์›ํ•˜๋ฉฐ Query Off Loading์„ ํ†ตํ•ด Master๋Š” Read/Write ์ž‘์—…, Slave๋Š” Read ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  6. ํŒŒํ‹ฐ์…”๋‹์„ ํ†ตํ•ด ์ˆ˜ํ‰ ํ™•์žฅ์ด ๊ฐ€๋Šฅํ•˜๋ฉฐ ๋™์ ์ธ ์Šค์ผ€์ผ ์•„์›ƒ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

  7. ๋ฐ์ดํ„ฐ์˜ ๋งŒ๋ฃŒ๋ฅผ ์„ค์ •ํ•˜์—ฌ ์ผ์ • ์‹œ๊ฐ„ ํ›„ ์ž๋™์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•˜๋Š” Expiration ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

Redis์˜ ์ฃผ์š” ์—…๋ฌด ์˜์—ญ

  1. ๋น ๋ฅธ ์“ฐ๊ธฐ/์ฝ๊ธฐ ์ž‘์—…์ด ์š”๊ตฌ๋˜๋Š” ์˜์—ญ์—์„œ In-Memory DB์˜ ์žฅ์ ์„ ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ์ฃผ๋กœ ์ง€์†์ ์ธ ๊ด€๋ฆฌ๊ฐ€ ํ•„์š”ํ•œ ์˜์—ญ์— ์ œํ•œ์ ์œผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ๊ธฐ์—… ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ธฐ๋ณด๋‹ค๋Š” ๋œ ์œ„ํ—˜ํ•œ ์—…๋ฌด ์˜์—ญ์—์„œ Secondary DB๋กœ ํ™œ์šฉ๋ฉ๋‹ˆ๋‹ค.

  2. ์ฃผ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋น„์ฆˆ๋‹ˆ์Šค ์˜์—ญ์—์„œ ํ™œ์šฉ๋ฉ๋‹ˆ๋‹ค:

    • ๋ฐ์ดํ„ฐ ์บ์‹ฑ์„ ํ†ตํ•œ ๋น ๋ฅธ ์ž‘์—…์ด ํ•„์š”ํ•œ ์˜์—ญ
    • IoT ๋””๋ฐ”์ด์Šค๋ฅผ ํ™œ์šฉํ•œ ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘ ๋ฐ ์ฒ˜๋ฆฌ
    • ์‹ค์‹œ๊ฐ„ ๋ถ„์„ ๋ฐ ํ†ต๊ณ„ ๋ถ„์„
    • ๋ฉ”์‹œ์ง€ ํ, ๋จธ์‹  ๋Ÿฌ๋‹, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์žก ๋งค๋‹ˆ์ง€๋จผํŠธ, ๊ฒ€์ƒ‰ ์—”์ง„
  3. ๊ธฐ์กด์˜ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋‚˜ ๋‹ค๋ฅธ NoSQL์— ๋น„ํ•ด ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋ฉฐ, ๋ฉ”์‹œ์ง€ ํ, ๋จธ์‹  ๋Ÿฌ๋‹, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์žก ๋งค๋‹ˆ์ง€๋จผํŠธ, ๊ฒ€์ƒ‰ ์—”์ง„๊ณผ ๊ฐ™์€ ์˜์—ญ์—์„œ ํŠนํžˆ ํšจ๊ณผ์ ์œผ๋กœ ํ™œ์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

2.5 ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ

2.5.1 ์šฉ์–ด ์„ค๋ช…

Key-Value DB์˜ ๋…ผ๋ฆฌ์  ๊ตฌ์กฐ

์šฉ์–ด ์„ค๋ช…
Table ํ•˜๋‚˜์˜ DB์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๋…ผ๋ฆฌ์  ๊ตฌ์กฐ
Data Sets ํ…Œ์ด๋ธ”์„ ๊ตฌ์„ฑํ•˜๋Š” ๋…ผ๋ฆฌ์  ๋‹จ์œ„
Key ํ•˜๋‚˜์˜ Key๋Š” ํ•˜๋‚˜ ์ด์ƒ์˜ ์กฐํ•ฉ๋œ ๊ฐ’์œผ๋กœ ํ‘œํ˜„ ๊ฐ€๋Šฅ
Values Key์— ๋Œ€ํ•œ ๊ตฌ์ฒด์ ์ธ ๋ฐ์ดํ„ฐ ๊ฐ’

2.5.2 ๋ฐ์ดํ„ฐ ์ž…๋ ฅ/์ˆ˜์ •/์‚ญ์ œ/์กฐํšŒ

์ข…๋ฅ˜ ์„ค๋ช…
set ๋ฐ์ดํ„ฐ ์ €์žฅ (key, value)
get ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ ๊ฒ€์ƒ‰
rename ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ ๊ฐ’ ๋ณ€๊ฒฝ
randomkey ์ €์žฅ๋œ key ์ค‘ ๋žœ๋ค key ๊ฒ€์ƒ‰
keys ์ €์žฅ๋œ ๋ชจ๋“  key ๊ฒ€์ƒ‰
exists ๊ฒ€์ƒ‰ ๋Œ€์ƒ key ์กด์žฌ ์—ฌ๋ถ€ ํ™•์ธ
mset/mget ์—ฌ๋Ÿฌ ๊ฐœ์˜ key์™€ value๋ฅผ ์ €์žฅํ•˜๊ณ  ๊ฒ€์ƒ‰

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

์ข…๋ฅ˜ ์„ค๋ช…
Strings ๋ฌธ์ž ๋ฐ Binary ๋ฐ์ดํ„ฐ ์ €์žฅ
List ๋ฐฐ์—ด ํ˜•ํƒœ์˜ ๋ฐ์ดํ„ฐ ์ €์žฅ
Hash ํ•„๋“œ์™€ ๊ฐ’์œผ๋กœ ๊ตฌ์„ฑ๋œ ํ…Œ์ด๋ธ” ์ €์žฅ
Set ์ •๋ ฌ๋˜์ง€ ์•Š์€ ๋ฌธ์ž์—ด ์ €์žฅ
Sorted Set ์ •๋ ฌ๋œ ๋ฌธ์ž์—ด ์ €์žฅ
Bit 0๊ณผ 1๋กœ ํ‘œํ˜„ํ•˜๋Š” ๋ฐ์ดํ„ฐ ํƒ€์ž…
HyperLogLogs ๊ณ ์œ ํ•œ Element์˜ ๊ฐœ์ˆ˜ ๊ณ„์‚ฐ
Geo ์œ„์น˜ ์ •๋ณด(๊ฒฝ๋„, ์œ„๋„) ๋ฐ์ดํ„ฐ ์ €์žฅ

2.6 Redis ํ™•์žฅ Module

1) Redis Server: ๋น…๋ฐ์ดํ„ฐ ์ €์žฅ ๋ฐ ๊ด€๋ฆฌ ๊ธฐ์ˆ  ์ œ๊ณต

2) Redis Extent Module: ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ ๊ฐœ๋ฐœํ•˜์—ฌ Redis Server์— ์ถ”๊ฐ€

๋ชจ๋“ˆ๋ช… ์„ค๋ช…
REJSON JSON ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ ๋ชจ๋“ˆ
REDISQL Redis์™€ SQLite ์—ฐ๋™ํ•˜์—ฌ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ ์ €์žฅ ๋ชจ๋“ˆ
RedisSearch ๋‚ด๋ถ€ ๊ฒ€์ƒ‰ ์—”์ง„์„ ํ™œ์šฉํ•˜๋Š” ๋ชจ๋“ˆ
Redis-ML ๋จธ์‹  ๋Ÿฌ๋‹ ๋ชจ๋ธ ์„œ๋ฒ„๋ฅผ Redis์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“ˆ
Redis-sPiped ๋ฐ์ดํ„ฐ ์•”ํ˜ธํ™” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ๋ชจ๋“ˆ

2.7 Lua Function & Script

Lua ์Šคํฌ๋ฆฝํŠธ์˜ ์ฃผ์š” ํŠน์ง•

  • ๊ฐ€๋ฒผ์šด Script Programming Language
  • ์ ˆ์ฐจํ˜• ๋ฐ ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ฐ€๋Šฅ
  • Redis Server ๋‚ด์žฅ๋œ Lua Interpreter ์‚ฌ์šฉ
  • eval, evalsha ๋“ฑ์˜ ํ•จ์ˆ˜๋กœ ์‹คํ–‰ ๊ฐ€๋Šฅ
  • ๋ฐ์ดํ„ฐ ๊ฒ€์ƒ‰, ์ˆ˜์ •, ์‚ญ์ œ ๋“ฑ์— ํ™œ์šฉ ๊ฐ€๋Šฅ
๋ฐ˜์‘ํ˜•