Hello Kitty Eyes Shut
๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ’ป๊ณต๋ถ€ ๊ธฐ๋ก/๐Ÿ“Œ Backend

[Backend] Redis ๊ธฐ๋ณธ ์ž๋ฃŒํ˜• - String, List, Set, Sorted Set (ZSet), Hash

๋ฐ˜์‘ํ˜•

 

 

 

Redis์˜ ์ž๋ฃŒํ˜•

Redis ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์˜ ํŠน์ง•

์•ž์„  ๊ฒŒ์‹œ๋ฌผ์—์„œ ์„ค๋ช…ํ–ˆ๋“ฏ์ด, Redis๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ํ‚ค (Key) - ๊ฐ’ (Value) ํ˜•ํƒœ๋กœ ์ €์žฅํ•˜๋Š” NoSQL ์ธ๋ฉ”๋ชจ๋ฆฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์ด๋‹ค.

ํŠนํžˆ, ์‹คํ–‰ ์†๋„๊ฐ€ ๋น ๋ฅด๊ณ , ๋‹ค์–‘ํ•œ ์ž๋ฃŒํ˜•์œผ๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ค‘์š”ํ•œ ํŠน์ง•์ด ์žˆ์—ˆ๋Š”๋ฐ,

์ด ํŠน์ง•์„ ์ž˜ ํ™œ์šฉํ•˜๋ ค๋ฉด ์ž๋ฃŒํ˜•์„ ๊ผญ ์ดํ•ดํ•ด์•ผ ํ•œ๋‹ค.

 

ํ•ต์‹ฌ๋งŒ ๋ณด๊ณ  ์‹ถ์œผ์‹  ๋ถ„๋“ค์„ ์œ„ํ•ด ๊ฐ„๋‹จํžˆ ์ •๋ฆฌ๋ฅผ ํ•˜๊ณ  ์‹œ์ž‘ํ•˜์ž๋ฉด,

Redis์˜ ์ž๋ฃŒํ˜•๊ณผ ๊ทธ ํŠน์ง• ๋ฐ ์‚ฌ์šฉ ์‚ฌ๋ก€๋Š” ์•„๋ž˜์˜ ํ‘œ์™€ ๊ฐ™๋‹ค.

์ž๋ฃŒํ˜• ํŠน์ง• ์‚ฌ์šฉ ์‚ฌ๋ก€
String ๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ ํƒ€์ž…
ํ…์ŠคํŠธ ๋ฐ ์ˆซ์ž ์ €์žฅ
์บ์‹œ, ์นด์šดํ„ฐ, ์„ธ์…˜ ์ •๋ณด ๊ด€๋ฆฌ
List ์ˆœ์„œ๊ฐ€ ์žˆ๋Š” ๋ฐ์ดํ„ฐ ๋ชฉ๋ก
(์ค‘๋ณต ํ—ˆ์šฉ)
ํƒ€์ž„๋ผ์ธ
Set ์ค‘๋ณต๊ณผ ์ˆœ์„œ๊ฐ€ ์—†๋Š” ์ง‘ํ•ฉ ํƒœ๊ทธ ๊ด€๋ฆฌ
Sorted Set
(ZSet)
์ •๋ ฌ๋œ ์ง‘ํ•ฉ ๋žญํ‚น ์‹œ์Šคํ…œ
Hash ํ•„๋“œ - ๊ฐ’ ์Œ์˜ ๋ฐ์ดํ„ฐ ๊ฐ์ฒด ํ‘œํ˜„
Bitmap ๋น„ํŠธ ๋‹จ์œ„ ๋ฐ์ดํ„ฐ ์ €์žฅ ์ถœ์„ ์ฒดํฌ, ์ƒํƒœ ๊ด€๋ฆฌ
HyperLogLog ๊ทผ์‚ฌ์น˜ ๊ธฐ๋ฐ˜
๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ ๊ฐœ์ˆ˜ ๊ณ„์‚ฐ
๋ฐฉ๋ฌธ์ž ์ˆ˜
Geo ์œ„๋„, ๊ฒฝ๋„ ๊ธฐ๋ฐ˜
์œ„์น˜ ์ •๋ณด ์ €์žฅ
์œ„์น˜ ๊ธฐ๋ฐ˜ ์„œ๋น„์Šค,
์ง€๋„ ์„œ๋น„์Šค
Stream ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆผ ์ €์žฅ ๋ฐ ์ฒ˜๋ฆฌ ์‹ค์‹œ๊ฐ„ ๋กœ๊ทธ

 

์ž๋ฃŒํ˜• ์„ ํƒ ๊ธฐ์ค€

Redis๋Š” ์ด์ฒ˜๋Ÿผ ๋‹ค์–‘ํ•œ ์ž๋ฃŒํ˜•์„ ์ œ๊ณตํ•˜์ง€๋งŒ, ๊ฐ ์ž๋ฃŒํ˜•์ด ๋ชจ๋“  ์ƒํ™ฉ์—์„œ ๋งŒ๋Šฅ์€ ์•„๋‹ ๊ฒƒ์ด๋‹ค.

๋”ฐ๋ผ์„œ ์ƒํ™ฉ์— ๋”ฐ๋ผ ์ ํ•ฉํ•œ ์ž๋ฃŒํ˜•์„ ์„ ํƒํ•ด์•ผ ์„ฑ๋Šฅ๊ณผ ํšจ์œจ์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

ํฌ๊ฒŒ 4๊ฐ€์ง€๋กœ ์ž๋ฃŒํ˜• ์„ ํƒ ์‹œ ๊ณ ๋ คํ•  ์š”์†Œ๋ฅผ ๋ถ„๋ฅ˜ํ•ด ๋ณธ ๊ฒฐ๊ณผ๋Š” ์•„๋ž˜์˜ ํ‘œ์™€ ๊ฐ™๋‹ค.

๊ธฐ์ค€ ์š”๊ตฌ ์‚ฌํ•ญ ์ž๋ฃŒํ˜•
๋ฐ์ดํ„ฐ์˜ ํŠน์„ฑ ๋‹จ์ˆœํ•œ ๊ฐ’ ์ €์žฅ String
์ˆœ์„œ๊ฐ€ ์ค‘์š”ํ•œ ๋ชฉ๋ก List
์ค‘๋ณต ์—†๋Š” ๋ฐ์ดํ„ฐ Set
์ •๋ ฌ์ด ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ Sorted Set
๋ฐ์ดํ„ฐ ํฌ๊ธฐ ๋ฐ ์ฒ˜๋ฆฌ ๋นˆ๋„ ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ์˜ ์ง‘๊ณ„ HyperLogLog
๋น„ํŠธ ๋‹จ์œ„ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ Bitmap
์ฝ๊ธฐ / ์“ฐ๊ธฐ ํŒจํ„ด ์ฝ๊ธฐ ์ค‘์‹ฌ String, Set
์“ฐ๊ธฐ ์ค‘์‹ฌ Stream, List
๋ฐ์ดํ„ฐ ์กฐ์ž‘ ๋ฐฉ์‹ ๋ณต์žกํ•œ ๋ฐ์ดํ„ฐ Hash
์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ํ๋ฆ„ Stream

 

 

 

 

Redis์˜ ๊ธฐ๋ณธ ์ž๋ฃŒํ˜•

Stringํ˜•

String์€ Redis์—์„œ ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ด๊ณ  ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ์ž๋ฃŒํ˜•์ด๋‹ค.

๋น„๋ก Stringํ˜•์ด๋ผ๋Š” ์ด๋ฆ„์„ ๊ฐ€์ง€๊ณ  ์žˆ์ง€๋งŒ, ์ด์ง„ ์•ˆ์ „ (Binary Safe) ๋ฌธ์ž์—ด์ด๊ธฐ ๋•Œ๋ฌธ์—

๋‹จ์ˆœํ•œ ๋ฌธ์ž์—ด๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ด๋ฏธ์ง€๋‚˜ ์‹คํ–‰ํŒŒ์ผ๊ณผ ๊ฐ™์€ ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ฐ์ดํ„ฐ๋„ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ฒŒ๋‹ค๊ฐ€ Redis์—์„œ๋Š” ์ˆซ์ž๊ฐ’ (์ •์ˆ˜๋‚˜ ๋ถ€๋™์†Œ์ˆ˜์ )๋„ Stringํ˜•์— ์ €์žฅํ•œ๋‹ค.

์ด๋Ÿฌํ•œ ํŠน์ง• ๋•๋ถ„์— Redis์˜ Stringํ˜•์€ ๋‹จ์ˆœํ•œ ๊ฐ’ ์ €์žฅ์„ ๋„˜์–ด ๋‹ค์–‘ํ•œ ์šฉ๋„๋กœ ํ™œ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค.

 

 

์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๊ฐ€์žฅ ํ”ํ•˜๊ฒŒ Stringํ˜•์„ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ๋ก€๋Š”

์„ธ์…˜ ์บ์‹œ๋‚˜ ์žฅ๋ฐ”๊ตฌ๋‹ˆ ์ •๋ณด์™€ ๊ฐ™์€ ์ผ์‹œ์ ์ธ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด, ์‚ฌ์šฉ์ž์˜ ์„ธ์…˜ ์ •๋ณด๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.

session:abc123 : {"user_id":"AAAAAA"}
session:def456 : {"user_id":"BBBBBB"}
session:ghi789 : {"user_id":"CCCCCC"}

 

์œ„์˜ ์˜ˆ์‹œ๋ฅผ ๋ณด๋ฉด, session:abc123๊ณผ ๊ฐ™์€ Key์— JSON ํ˜•์‹์˜ ์‚ฌ์šฉ์ž ์ •๋ณด๊ฐ€ String ํ˜•์œผ๋กœ ์ €์žฅ๋˜์–ด ์žˆ๋‹ค.

์ด๋Ÿฐ ๋ฐฉ์‹์œผ๋กœ ์„ธ์…˜ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๋ฉด, Key๋งŒ ์•Œ๊ณ  ์žˆ์œผ๋ฉด Redis์—์„œ ํ•ด๋‹น ์ •๋ณด๋ฅผ ๋น ๋ฅด๊ฒŒ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋‹ค.

 

GET session:abc123

# ๊ฒฐ๊ณผ: {"user_id":"AAAAAA"}

 

์ด์ฒ˜๋Ÿผ Redis์˜ Stringํ˜•์€ ์„ธ์…˜ ๋ฐ์ดํ„ฐ๋‚˜ ์ž„์‹œ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐ ๋งค์šฐ ํšจ์œจ์ ์ด๋‹ค.

 

Listํ˜•

Listํ˜•์€ Redis์—์„œ ์ˆœ์„œ๊ฐ€ ์žˆ๋Š” ๋ฌธ์ž์—ด (String)์˜ ์ปฌ๋ ‰์…˜์„ ์ €์žฅํ•˜๋Š” ์ž๋ฃŒํ˜•์ด๋‹ค.

๊ฐ„๋‹จํžˆ ๋งํ•ด, ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ (Linked List)์™€ ๋น„์Šทํ•œ ๊ตฌ์กฐ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ๊ด€๋ฆฌํ•œ๋‹ค.

์ด๋Ÿฌํ•œ List๋Š” ์ค‘๋ณต์„ ํ—ˆ์šฉํ•˜๋ฉฐ, ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ฝ์ž…๋˜๋Š” ์ˆœ์„œ๋ฅผ ์œ ์ง€ํ•  ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ

์–‘์ชฝ ๋์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—

์Šคํƒ (Stack) ๋˜๋Š” ํ (Queue)์˜ ํ˜•ํƒœ๋กœ๋„ ํ™œ์šฉ๋œ๋‹ค.

 

 

์ด๋Ÿฌํ•œ List ์ž๋ฃŒํ˜•์€ ์ˆœ์„œ๊ฐ€ ์ค‘์š”ํ•œ ๋ฐ์ดํ„ฐ๋‚˜ ๋น ๋ฅธ ์‚ฝ์ž… /์‚ญ์ œ๊ฐ€ ํ•„์š”ํ•œ ์ƒํ™ฉ์—์„œ ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉ๋œ๋‹ค.

 

๋Œ€ํ‘œ์ ์ธ ์˜ˆ์‹œ๋กœ๋Š” ์ตœ๊ทผ ๋ณธ ์ƒํ’ˆ ๋ชฉ๋ก ์กฐํšŒ๊ฐ€ ์žˆ๋‹ค.

 

์•„๋ž˜์™€ ๊ฐ™์ด ์‚ฌ์šฉ์ž ID 1001์˜ ์ตœ๊ทผ ๋ณธ ์ƒํ’ˆ ๋ชฉ๋ก์„

LPUSH๋ฅผ ํ†ตํ•ด ๋ฆฌ์ŠคํŠธ์˜ ๋งจ ์•ž (์™ผ์ชฝ)์— ์ถ”๊ฐ€ํ•˜๊ณ ,

LPUSH recent:1001 "์ƒํ’ˆA"
LPUSH recent:1001 "์ƒํ’ˆB"
LPUSH recent:1001 "์ƒํ’ˆC"

 

LRANGE ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ์ตœ๊ทผ ๋ณธ ์ƒํ’ˆ 3๊ฐœ๋ฅผ ์กฐํšŒํ•˜๋ฉด,

LRANGE recent:1001 0 2

 

๋ฆฌ์ŠคํŠธ์˜ 0๋ฒˆ (๊ฐ€์žฅ ์•ž) ๋ถ€ํ„ฐ 2๋ฒˆ๊นŒ์ง€, ์ตœ๊ทผ 3๊ฐœ์˜ ์ƒํ’ˆ์„ ๋น ๋ฅด๊ฒŒ ์กฐํšŒํ•˜์—ฌ ๊ฒฐ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.

["์ƒํ’ˆC", "์ƒํ’ˆB", "์ƒํ’ˆA"]

 

๋˜ํ•œ, ์˜ค๋ž˜๋œ ํ•ญ๋ชฉ์„ ์‚ญ์ œํ•˜๋ ค๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ๋ฐฉ๋ฒ• ๋“ฑ์œผ๋กœ ์ œํ•œ์„ ๋‘˜ ์ˆ˜๋„ ์žˆ๋‹ค.

LTRIM recent:1001 0 4  # ์ตœ๊ทผ 5๊ฐœ๋งŒ ์œ ์ง€

 

์ด์ฒ˜๋Ÿผ Listํ˜•์€ ์–‘์ชฝ ๋์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋น ๋ฅด๊ฒŒ ์‚ฝ์ž… ๋ฐ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ๊ณ ,

์‚ฝ์ž… ์ˆœ์„œ๋ฅผ ์œ ์ง€ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์Šคํƒ์ด๋‚˜ ํ์™€ ๊ฐ™์€ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค.

ํ•˜์ง€๋งŒ ๋ฆฌ์ŠคํŠธ์˜ ์ค‘๊ฐ„ ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•˜๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•˜๋Š” ๋ฐ์—๋Š” ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์—

์‚ฌ์šฉ ๋ชฉ์ ์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ์ž๋ฃŒํ˜•๊ณผ ๋น„๊ตํ•˜์—ฌ ์ ์ ˆํžˆ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค.

 

Setํ˜•

Set์€ ๋ฌธ์ž์—ด์˜ ์ง‘ํ•ฉ์œผ๋กœ, ์ง‘ํ•ฉ์˜ ํ‚ค๋Š” ์—ฌ๋Ÿฌ ๊ฐ’์„ ์ˆœ์„œ์™€ ์ค‘๋ณต ์—†์ด ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.

์ฆ‰, ๊ฐ™์€ ๊ฐ’์„ ์—ฌ๋Ÿฌ ๋ฒˆ ์ €์žฅํ•ด๋„ ํ•˜๋‚˜์˜ ๊ฐ’์œผ๋กœ ์ €์žฅ๋œ๋‹ค.

 

 

์ด๋Ÿฌํ•œ Setํ˜•์€ ์ผ๋ณ„ ๊ณ ์œ ํ•œ ๋ฐฉ๋ฌธ์ž๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ๋“ฑ

์ง‘ํ•ฉ ๊ฐ„์˜ ์—ฐ์‚ฐ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ์— ์œ ์šฉํ•˜๊ฒŒ ํ™œ์šฉ๋˜๋ฉฐ,

O(1)์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋กœ ๋น ๋ฅด๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€, ์‚ญ์ œ, ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด ์›น ์‚ฌ์ดํŠธ์—์„œ ์ค‘๋ณต ์—†๋Š” ๋ฐฉ๋ฌธ์ž ์ˆ˜๋ฅผ ๊ตฌํ•˜๊ณ ์ž ํ•  ๋•Œ์—๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

SADD ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด Set์— ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ ,

(์ด ๋•Œ Key๋Š” visitors๋กœ ์˜ค๋Š˜์˜ ๋ฐฉ๋ฌธ์ž๋ฅผ ์ €์žฅํ•˜๋Š” Set์ด๊ณ , Value๋Š” ๋ฐฉ๋ฌธ์ž์˜ IP ์ฃผ์†Œ์ด๋‹ค.)

SADD visitors "192.168.0.1"
SADD visitors "192.168.0.2"
SADD visitors "192.168.0.3"

 

SCARD ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด Set์— ์ €์žฅ๋œ ์š”์†Œ์˜ ๊ฐœ์ˆ˜๋ฅผ ํ™•์ธํ•˜๋ฉด, ๋น ๋ฅด๊ฒŒ ๋ฐฉ๋ฌธ์ž ์ˆ˜๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.

SCARD visitors

# ๊ฒฐ๊ณผ : 2

 

์ด์ฒ˜๋Ÿผ Set ํ˜•์€ ์ค‘๋ณต ๋ฐ์ดํ„ฐ๋ฅผ ์ž๋™์œผ๋กœ ์ œ๊ฑฐํ•ด์ฃผ๊ธฐ์— ๋ฐ์ดํ„ฐ ์ค‘๋ณต์„ ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š๊ณ  ์ €์žฅํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ,

ํšจ์œจ์ ์ธ ์ง‘ํ•ฉ ์—ฐ์‚ฐ ๋ฐ ๋น ๋ฅธ ์—ฐ์‚ฐ์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค.

 

Sorted Setํ˜• (ZSet)

Sorted Set (ZSet)์€ Set์˜ ํŠน์„ฑ๊ณผ ์ •๋ ฌ ๊ธฐ๋Šฅ์„ ๊ฒฐํ•ฉํ•œ ์ž๋ฃŒํ˜•์ด๋‹ค.

์ค‘๋ณต์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋ฉด์„œ, ๊ฐ ์š”์†Œ์— ์ ์ˆ˜๋ฅผ ๋ถ€์—ฌํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ž๋™์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•œ๋‹ค

 

 

์ด๋Ÿฌํ•œ ํŠน์„ฑ ๋•๋ถ„์— Sorted Set ์ž๋ฃŒํ˜•์€ ๋žญํ‚น ์‹œ์Šคํ…œ, ์šฐ์„ ์ˆœ์œ„ ํ ๋“ฑ์— ๋งŽ์ด ํ™œ์šฉ๋œ๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด ๊ฒŒ์ž„์˜ ์œ ์ € ๋žญํ‚น์„ ๊ด€๋ฆฌํ•˜๊ณ ์ž ํ•˜๋Š” ๊ฒฝ์šฐ ์•„๋ž˜์™€ ๊ฐ™์ด ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

ZADD ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด Sorted Set์— ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ ,

ZADD game:leaderboard 500 "Player1"
ZADD game:leaderboard 600 "Player2"
ZADD game:leaderboard 450 "Player3"
ZADD game:leaderboard 250 "Player4"
ZADD game:leaderboard 150 "Player5"

 

ZREVRANGE ๋ช…๋ น์–ผ๋ฅผ ํ†ตํ•ด ์ƒ์œ„ 3๋ช…์˜ ๋žญํ‚น์„ ์กฐํšŒํ•˜๋ฉด,

ZREVRANGE game:leaderboard 0 2 WITHSCORES

 

์•„๋ž˜์™€ ๊ฐ™์€ ๊ฒฐ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.

["Player2", 600, "Player1", 500, "Player3", 450]

 

์ด์ฒ˜๋Ÿผ Sorted Set์€ ์ค‘๋ณต ์—†๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ ์ˆ˜ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž๋™ ์ •๋ ฌํ•˜์—ฌ

๋น ๋ฅธ ์กฐํšŒ์™€ ํšจ์œจ์ ์ธ ์ˆœ์œ„ ๊ด€๋ฆฌ๋ฅผ ์ œ๊ณตํ•˜๋Š” ์ž๋ฃŒํ˜•์œผ๋กœ,

ํŠน์ • ์š”์†Œ์˜ ์ˆœ์œ„๋ฅผ O(log N)์œผ๋กœ ๋น ๋ฅด๊ฒŒ ์กฐํšŒ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค.

 

Hashํ˜•

Hashํ˜•์€ ํ•˜๋‚˜์˜ ํ‚ค (Key) ์•ˆ์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ•„๋“œ(Field)์™€ ๊ฐ’ (Value)๋ฅผ ์ €์žฅํ•˜๋Š” ์ž๋ฃŒํ˜•์œผ๋กœ,

ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์—์„œ์˜ ์—ฐ๊ด€ ๋ฐฐ์—ด์ด๋‚˜ ๋”•์…”๋„ˆ๋ฆฌ์™€ ๊ฐ™์€ ์ž๋ฃŒ๊ตฌ์กฐ๋กœ ์ดํ•ดํ•˜๋ฉด ๋œ๋‹ค.

 

 

์ด๋Ÿฌํ•œ Hashํ˜•์€ ์ฃผ๋กœ ์‚ฌ์šฉ์ž ์ •๋ณด๋‚˜ ์ƒํ’ˆ ์ •๋ณด์™€ ๊ฐ™์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด ํšŒ์› ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๊ณ ์ž ํ•  ๋•Œ์—๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๋จผ์ €, HSET ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์œ ์ € ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๋ฉด,

HSET user:1002 name "Bob" age "28" email "bob@example.com"

 

HGET ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž ์ด๋ฆ„์„ ์กฐํšŒํ•  ์ˆ˜๋„ ์žˆ๊ณ ,

HGET user:1002 name
"Bob"

 

HGETALL ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ํŠน์ • ์‚ฌ์šฉ์ž์˜ ๋ชจ๋“  ์ •๋ณด๋ฅผ ์กฐํšŒํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

HGETALL user:1002
1) "name"
2) "Bob"
3) "age"
4) "28"
5) "email"
6) "bob@example.com"

 

์ด์ฒ˜๋Ÿผ Hash ์ž๋ฃŒํ˜•์€ ๊ตฌ์กฐํ™”๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๊ธฐ ์ ํ•ฉํ•˜๋ฉฐ,

ํ•„๋“œ ๋‹จ์œ„๋กœ ๋น ๋ฅด๊ฒŒ ์กฐํšŒํ•˜๊ณ  ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๊ธฐ์— ๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ์„ฑ์ด ๋›ฐ์–ด๋‚˜์„œ

์›น ์„œ๋น„์Šค์™€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋„๋ฆฌ ํ™œ์šฉ๋œ๋‹ค.

 

 

 

 

๊ฒฐ๋ก 

์ด๋ฒˆ ๊ธ€์—์„œ ์†Œ๊ฐœํ•œ String, List, Set, Sorted Set (ZSet), Hash ์ž๋ฃŒํ˜•์€

๊ฐ๊ฐ์˜ ํŠน์„ฑ๊ณผ ์žฅ์ ์„ ์‚ด๋ ค์„œ ํšจ์œจ์ ์ธ ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ์™€ ๋น ๋ฅธ ์„œ๋น„์Šค ๊ตฌํ˜„์„ ๊ฐ€๋Šฅํ•˜๋„๋ก ํ•ด์ค€๋‹ค.

 

์ž๋ฃŒํ˜•์˜ ์„ ํƒ๊ณผ ํ™œ์šฉ ๋ฐฉ๋ฒ•์€ ์„œ๋น„์Šค์˜ ์š”๊ตฌ์‚ฌํ•ญ์— ๋”ฐ๋ผ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์—

๊ฐ ์ž๋ฃŒํ˜•์˜ ํŠน์ง•๊ณผ ์žฅ์ ์„ ์ž˜ ์ดํ•ดํ•˜๊ณ  ์ ์ ˆํžˆ ์กฐํ•ฉํ•ด์„œ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด,

์„ฑ๋Šฅ ํ–ฅ์ƒ๊ณผ ํšจ์œจ์ ์ธ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•  ๊ฒƒ์ด๋‹ค.

๋ฐ˜์‘ํ˜•