Search

Redis

Redis (Remote Dictionary Server)

Redis๋Š” Key-Value ๊ตฌ์กฐ์˜ ๋น„์ •ํ˜• ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ์˜คํ”ˆ์†Œ์Šค ๊ธฐ๋ฐ˜์˜ NoSQL DBMS์ด๋‹ค.
Redis๋ฅผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ๊ณ , Cache Server๋กœ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ๋‹ค.
โ†’ NoSQL ๋ฐฉ์‹ DBMS๋กœ ๋ถ„๋ฅ˜๋˜๊ธฐ๋„ ํ•˜๊ณ , In Memory ์†”๋ฃจ์…˜์œผ๋กœ ๋ถ„๋ฅ˜๋˜๊ธฐ๋„ ํ•œ๋‹ค.
๊ฐ€์žฅ ํฐ ํŠน์ง•์€ In-Memory ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ์ €์žฅ์†Œ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋น ๋ฅด๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.
์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜์—ฌ ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ๋ช…๋ น์–ด๋งŒ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฒฝ์Ÿ์ƒํƒœ๊ฐ€ ๊ฑฐ์˜ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค.

Redis๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 

โ€ข
Redis์˜ ๊ฐ€์žฅ ํฐ ํŠน์ง•์ธ In-Memory๊ตฌ์กฐ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋งค์šฐ ๋น ๋ฅธ ์†๋„๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.
โ€ข
๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๊ฐ€ํ•ด์ง€๋Š” ๋ถ€ํ•˜๋ฅผ ๊ฐ์†Œํ•˜๊ณ  ์„œ๋น„์Šค์˜ ์†๋„๋ฅผ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.
โ€ข
๋งค๋ฒˆ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ‘๊ทผํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜๋Š” ๊ฒฝ์šฐ Cache Server๋กœ ์‚ฌ์šฉ์„ ๊ณ ๋ คํ•ด ๋ณผ ์ˆ˜ ์žˆ๊ณ  Redis์—์„œ ์ €์žฅ๋œ ๊ฐ’์„ ๊ทธ๋Œ€๋กœ ๋ฐ˜ํ™˜ํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
โ€ข
Redis์˜ ๋ฐ์ดํ„ฐ๋Š” ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ์ง€์›ํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์š”๊ตฌ ์‚ฌํ•ญ์— ๋งž๋Š” ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
โ€ข
Redis๋Š” ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ชจ๋“  ์ž๋ฃŒ๊ตฌ์กฐ๊ฐ€ Atomicํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ์ดํ„ฐ์˜ ์ •ํ•ฉ์„ฑ์„ ๋ณด์žฅํ•˜๊ธฐ๋„ ์ข‹๋‹ค.

Redis์˜ ์—ฌ๋Ÿฌ ์ž๋ฃŒ๊ตฌ์กฐ

Redis์—์„œ ์ž์ฃผ ์“ฐ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ๋งŒ ์ •๋ฆฌํ•ด ๋ณด์•˜๋‹ค.
โ€ข
Hash
field-value ์Œ์„ ์‚ฌ์šฉํ•œ ์ž๋ฃŒ๊ตฌ์กฐ
key์— ๋Œ€ํ•œ filed์˜ ๊ฐœ์ˆ˜๋Š” ์ œํ•œ์ด ์—†๋‹ค.
RDB์™€ ์œ ์‚ฌ key(USER1)์€ RDB ํ•˜๋‚˜์˜ row์™€ ๊ฐ™๋‹ค.
โ€ข
Set
์ •๋ ฌ๋˜์ง€ ์•Š์€ ๋ฌธ์ž์—ด์˜ ๋ชจ์Œ, ์ค‘๋ณต๋  ์ˆ˜ ์—†๋‹ค.
๊ต์ง‘ํ•ฉ, ์ฐจ์ง‘ํ•ฉ, ํ•ฉ์ง‘ํ•ฉ ๋“ฑ ์—ฐ์‚ฐ์„ ๋ ˆ๋””์Šค์—์„œ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.
โ€ข
Sorted Set
set๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ key ํ•˜๋‚˜์— ์ค‘๋ณต๋˜์ง€ ์•Š์€ ์—ฌ๋Ÿฌ ๋ฉค๋ฒ„๋ฅผ ์ €์žฅํ•˜์ง€๋งŒ ๊ฐ๊ฐ์˜ ๋ฉค๋ฒ„๋Š” SCORE์— ์—ฐ๊ฒฐ๋œ๋‹ค.
๋ชจ๋“  ๋ฐ์ดํ„ฐ๋Š” SCORE๋กœ ์ •๋ ฌ๋˜๋ฉฐ ์ฃผ๋กœ sort๊ฐ€ ํ•„์š”ํ•œ ๊ณณ์— ์‚ฌ์šฉ๋œ๋‹ค.

Redis ์‚ฌ์šฉ์‹œ ์ฃผ์˜ํ•  ์ 

โ€ข
Redis๋Š” ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ ๊ธฐ๋ฐ˜์ด๊ธฐ ๋•Œ๋ฌธ์— ํ•œ ์š”์ฒญ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋™์•ˆ ๋‹ค๋ฅธ ์š”์ฒญ์„ ๋ฐ›์ง€ ๋ชปํ•œ๋‹ค.
โ—ฆ
ํ•œ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋งŽ์€ ์‹œ๊ฐ„์„ ์†Œ๋ชจํ•˜๋Š” ์š”์ฒญ์„ ํ•  ๊ฒฝ์šฐ ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.
โ€ข
ํ•˜๋‚˜์˜ key์— ๋„ˆ๋ฌด ๋งŽ์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ ์žฌํ•˜์ง€ ์•Š๋„๋ก ํ•œ๋‹ค.
โ€ข
TTL timeout ์ ์ ˆํ•œ ๊ฐ’์„ ์„ค์ •ํ•ด์•ผ ํ•œ๋‹ค.

Redis์˜ ZSet

Redis๋Š” key-value ํƒ€์ž…์˜ ์ž๋ฃŒ ์ €์žฅ ํ˜•ํƒœ๋ฅผ ์ œ๊ณตํ•œ๋‹ค. ๊ฑฐ๊ธฐ์— ์ถ”๊ฐ€๋กœ ZSET์ด๋ผ๋Š” ํŠน์ดํ•œ ํ˜•ํƒœ์˜ ์ €์žฅ ํ˜•ํƒœ๋ฅผ ์ œ๊ณตํ•œ๋‹ค.
ZSET์€ ์ผ๋ฐ˜์ ์ธ Set ์ž๋ฃŒ๊ตฌ์กฐ์™€ ์œ ์‚ฌํ•˜์ง€๋งŒ ๊ฐ ์š”์†Œ์— ์ ์ˆ˜(Score)๋ฅผ ํ• ๋‹น ํ•  ์ˆ˜ ์žˆ๊ณ , ์ด ์ ์ˆ˜์— ๋”ฐ๋ผ ์ž๋™์œผ๋กœ ์ •๋ ฌ๋˜๋Š” ํŠน์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

ZSET์˜ ํŠน์ง•

โ€ข
์š”์†Œ์™€ ์ ์ˆ˜๋กœ ์ด๋ฃจ์–ด์ง„ ๊ตฌ์กฐ
โ—ฆ
ZSET์˜ ์š”์†Œ(Member)๋Š” ๊ณ ์œ ํ•œ ์ ์ˆ˜(Score)์™€ ํ•จ๊ป˜ ์ €์žฅ๋œ๋‹ค. Score๋Š” double ํƒ€์ž…์˜ ์‹ค์ˆ˜์ด๊ณ  ์š”์†Œ์˜ ์ •๋ ฌ ๊ธฐ์ค€์ด ๋œ๋‹ค.
โ€ข
์ค‘๋ณต ์—†์Œ
โ—ฆ
ZSET ๋‚ด์˜ ์š”์†Œ(Member)๋Š” ์œ ์ผํ•ด์•ผ ํ•˜๋ฉฐ, ์ค‘๋ณต๋œ ์š”์†Œ(Member)๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด Score๋งŒ ๊ฐฑ์‹ ๋œ๋‹ค.
โ€ข
์ž๋™ ์ •๋ ฌ
โ—ฆ
ZSET์€ ์š”์†Œ๋“ค์ด ์ ์ˆ˜์— ๋”ฐ๋ผ ์ •๋ ฌ๋œ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ์ ์ˆ˜๊ฐ€ ๋‚ฎ์€ ์ˆœ์œผ๋กœ ์ •๋ ฌ๋˜์ง€๋งŒ ๋†’์€ ์ˆœ์„œ๋Œ€๋กœ ์กฐํšŒํ•  ์ˆ˜๋„ ์žˆ๋‹ค.
๋ณดํ†ต RDBMS์—์„œ๋Š” ์ •๋ ฌ์ด ํ•„์š”ํ•œ ์ปฌ๋Ÿผ์„ index๋ฅผ ์ด์šฉํ•˜์—ฌ ์ •๋ ฌํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ํ•˜๋‚˜์˜ ํ…Œ์ด๋ธ”์— ๋ฏธ๋ฆฌ ์ธ๋ฑ์‹ฑ์„ ํ•ด์ค„ ์ˆ˜ ์žˆ๋Š” Clustered Index๋Š” ํ•˜๋‚˜๋งŒ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. ๋‹ค๋ฅธ ์ปฌ๋Ÿผ์— ๋Œ€ํ•ด์„œ ์ธ๋ฑ์‹ฑ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ์—๋Š” Non-Clustered Index๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋Š”๋ฐ ์ด๋Š” ์กฐํšŒํ•˜๋Š” ์ˆœ๊ฐ„ ๋ถ€ํ•˜๊ฐ€ ์ปค์ง€๊ณ  ์†๋„๊ฐ€ ๋А๋ ค์ง€๋Š” ํ˜„์ƒ์ด ์ผ์–ด๋‚œ๋‹ค.
ํ•˜์ง€๋งŒ, ZSET์€ Sorted Set์„ ์ด์šฉํ•˜์—ฌ ๊ตฌํ˜„ํ–ˆ๊ธฐ๋•Œ๋ฌธ์— ๋žญํ‚น ๋“ฑ ์ธ๋ฑ์‹ฑ์ด ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์„ ์ฒ˜๋ฆฌํ•˜๋Š”๋ฐ ์•Œ๋งž๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค.