Key

๊ฐ•์ฝ”๋”ฉยท2025๋…„ 10์›” 24์ผ

๋ ˆ๋””์Šค

๋ชฉ๋ก ๋ณด๊ธฐ
6/21

๐Ÿงญ Redis์˜ โ€œKey ์ค‘์‹ฌโ€ ๊ตฌ์กฐ ์ดํ•ด

Redis๋Š” โ€œKey-Value Storeโ€ (ํ‚ค-๊ฐ’ ์ €์žฅ์†Œ) ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.
โ†’ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋Š” ๊ณ ์œ ํ•œ key ์ด๋ฆ„์„ ๊ฐ€์ง€๋ฉฐ, ํ•ด๋‹น key์— value(๊ฐ’)์ด ๋งคํ•‘๋ฉ๋‹ˆ๋‹ค.

์˜ˆ์‹œ:

SET user:1001 "Alice"
SET user:1002 "Bob"

์œ„ ์˜ˆ์‹œ๋Š” user:1001, user:1002๋ผ๋Š” ํ‚ค๊ฐ€ ์žˆ๊ณ , ๊ฐ๊ฐ ๋ฌธ์ž์—ด ๊ฐ’ "Alice", "Bob"์ด ์ €์žฅ๋œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๐Ÿ—๏ธ Key ๊ด€๋ จ ์ฃผ์š” ๋ช…๋ น์–ด ์ •๋ฆฌ
๋ช…๋ น์–ด ์„ค๋ช… ์‹œ๊ฐ„๋ณต์žก๋„ ์˜ˆ์‹œ
KEYS pattern ํŒจํ„ด์— ์ผ์น˜ํ•˜๋Š” ๋ชจ๋“  ํ‚ค ์กฐํšŒ O(N) KEYS user:
EXISTS key [key ...] ์ง€์ •ํ•œ ํ‚ค๊ฐ€ ์กด์žฌํ•˜๋ฉด 1, ์—†์œผ๋ฉด 0 ๋ฐ˜ํ™˜ O(N) EXISTS user:1001
TYPE key ํ‚ค์— ์ €์žฅ๋œ ์ž๋ฃŒํ˜•(String, Hash ๋“ฑ)์„ ๋ฐ˜ํ™˜ O(1) TYPE user:1001
DEL key [key ...] ์ง€์ •ํ•œ ํ‚ค(์™€ ๊ฐ’)๋ฅผ ์‚ญ์ œ O(N) DEL user:1001
EXPIRE key seconds ์ง€์ •ํ•œ ์ดˆ ๋‹จ์œ„ TTL(์œ ํšจ์‹œ๊ฐ„) ์„ค์ • O(1) EXPIRE session:1 60
TTL key ๋‚จ์€ TTL(์ดˆ ๋‹จ์œ„) ํ™•์ธ O(1) TTL session:1
PERSIST key TTL ์ œ๊ฑฐ(์˜๊ตฌ์ ์œผ๋กœ ์œ ์ง€) O(1) PERSIST session:1
SCAN cursor [MATCH pattern][COUNT n] ํ‚ค ๋ชฉ๋ก์„ ์ ์ง„์ ์œผ๋กœ ์กฐํšŒ (KEYS๋ณด๋‹ค ์•ˆ์ „) O(1) per call SCAN 0 MATCH user:
COUNT 10
โš ๏ธ ์‹ค๋ฌด์—์„œ ์ž์ฃผ ํ•˜๋Š” ์‹ค์ˆ˜์™€ ํŒ
์ฃผ์ œ ์ž˜๋ชป๋œ ์˜ˆ ์˜ฌ๋ฐ”๋ฅธ ์‚ฌ์šฉ
KEYS ์‚ฌ์šฉ ์ฃผ์˜ KEYS * โ†’ ์‹ค์„œ๋น„์Šค์—์„œ CPU ํญ์ฃผ SCAN ์‚ฌ์šฉ์œผ๋กœ ์ ์ง„์  ์กฐํšŒ
TTL ๊ด€๋ฆฌ TTL์„ ์„ค์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ์˜๊ตฌ์ €์žฅ โ†’ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜ EXPIRE๋กœ ๋งŒ๋ฃŒ์‹œ๊ฐ„ ์„ค์ •
์ค‘๋ณต ํ‚ค ๊ด€๋ฆฌ ๊ฐ™์€ key๋ฅผ ์ค‘๋ณต ์‚ฌ์šฉํ•˜๋ฉด ๋ฎ์–ด์”€ ๋„ค์ด๋ฐ ๊ทœ์น™ ์„ค์ • (user:123, session:123)
์‚ญ์ œ ์‹œ ์ฃผ์˜ ๋Œ€๋Ÿ‰ DEL ์‹คํ–‰ ์‹œ ์ผ์‹œ ์ •์ง€ UNLINK ๋ช…๋ น(๋น„๋™๊ธฐ ์‚ญ์ œ) ์‚ฌ์šฉ
๐Ÿ” Key ๊ด€๋ จ ๋ช…๋ น์˜ ์‹ค์ œ ์˜ˆ์‹œ
127.0.0.1:6379> SET user:1 "Alice"
OK

127.0.0.1:6379> EXISTS user:1
(integer) 1

127.0.0.1:6379> TYPE user:1
string

127.0.0.1:6379> EXPIRE user:1 60
(integer) 1

127.0.0.1:6379> TTL user:1
(integer) 57

127.0.0.1:6379> DEL user:1
(integer) 1

๐Ÿงฉ Key ๋ ˆ๋ฒจ์—์„œ์˜ ์„ค๊ณ„ ํŒจํ„ด
ํŒจํ„ด ์„ค๋ช… ์˜ˆ์‹œ
Namespace(๋„ค์ž„์ŠคํŽ˜์ด์Šค) ์ฝœ๋ก (:)์„ ์‚ฌ์šฉํ•ด ๋ฐ์ดํ„ฐ ๊ทธ๋ฃน ๊ตฌ๋ถ„ user:1:name, user:1:age
Wildcard ๊ด€๋ฆฌ ํŠน์ • ๊ทธ๋ฃน๋งŒ ๊ฒ€์ƒ‰ KEYS user: or SCAN MATCH user:
TTL ๊ธฐ๋ฐ˜ ์บ์‹œ ๊ด€๋ฆฌ ์บ์‹œ ์ž๋™ ๋งŒ๋ฃŒ ์„ค์ • SET cache:item "value" EX 300
Key Versioning ๋ฐ์ดํ„ฐ ์Šคํ‚ค๋งˆ ๋ฒ„์ „ ๊ด€๋ฆฌ user:v2:1001
โšก +@ ์‹ค๋ฌด ํ™œ์šฉ ํŒ

์šด์˜ ํ™˜๊ฒฝ์—์„œ๋Š” ์ ˆ๋Œ€ KEYS * ์‚ฌ์šฉ ๊ธˆ์ง€
โ†’ ๋ชจ๋“  ํ‚ค๋ฅผ ํ•œ ๋ฒˆ์— ๋ถˆ๋Ÿฌ์˜ค๋ฏ€๋กœ CPU ํญ์ฆ ๋ฐ ๋ธ”๋กœํ‚น ๋ฐœ์ƒ.
โœ… ๋Œ€์‹  SCAN์„ ์‚ฌ์šฉ (๋น„์ฐจ๋‹จ, ์ ์ง„์  ๊ฒ€์ƒ‰ ๊ฐ€๋Šฅ)

TTL์„ ํ†ตํ•ด ์บ์‹œ ์ž๋™ ๋งŒ๋ฃŒ ๊ด€๋ฆฌ
โ†’ ์„ธ์…˜, ์ž„์‹œ ๋ฐ์ดํ„ฐ, ์บ์‹œ ํ•ญ๋ชฉ ๋“ฑ์€ EXPIRE ์˜ต์…˜์„ ๋ฐ˜๋“œ์‹œ ์„ค์ •.

Key Naming ๊ทœ์น™์„ ํ†ต์ผํ•˜๋ผ

์ผ๋ฐ˜์ ์œผ๋กœ ๋„๋ฉ”์ธ:๊ฐ์ฒด:ID[:์†์„ฑ] ํ˜•ํƒœ ์‚ฌ์šฉ

์˜ˆ: user:123:session, product:456:price

๋น„๋™๊ธฐ ์‚ญ์ œ(UNLINK)

Redis 4.0+์—์„œ๋Š” DEL ๋Œ€์‹  UNLINK๋ฅผ ์‚ฌ์šฉํ•ด
์‚ญ์ œ ์‹œ ๋ธ”๋กœํ‚น์„ ํ”ผํ•  ์ˆ˜ ์žˆ์Œ.

๐Ÿ’Ž Stringํ˜• + Keyํ˜• ๊ฒฐํ•ฉ ์˜ˆ์‹œ
SET user:1001:name "Alice"
SET user:1001:age 29
EXPIRE user:1001:age 86400 # ํ•˜๋ฃจ TTL

GET user:1001:name

-> "Alice"

SCAN 0 MATCH user:1001:* COUNT 10

-> user:1001:name, user:1001:age

์ด๋Ÿฐ ๋ฐฉ์‹์œผ๋กœ Redis์˜ ๋ชจ๋“  ์ž๋ฃŒํ˜•์€ โ€œKey ๊ด€๋ฆฌ ๋ช…๋ น์–ด + ์ž๋ฃŒํ˜• ์ „์šฉ ๋ช…๋ น์–ดโ€์˜ ์กฐํ•ฉ์œผ๋กœ ์šด์˜๋ฉ๋‹ˆ๋‹ค.

์›ํ•˜์‹ ๋‹ค๋ฉด ๋‹ค์Œ์ฒ˜๋Ÿผ ์š”์•ฝ ์ •๋ฆฌํ•ด๋“œ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค ๐Ÿ‘‡

๐Ÿ“˜ Stringํ˜• ํ•ต์‹ฌ ์š”์•ฝ (SET/GET/INCRBY ๋“ฑ)

๐Ÿ”‘ Key ๊ด€๋ฆฌ ๋ช…๋ น์–ด ์ด์ •๋ฆฌ (KEYS/EXISTS/SCAN ๋“ฑ)

โš™๏ธ ์‹ค๋ฌด์šฉ ์„ค๊ณ„ ํŒจํ„ด + ์บ์‹œ ๊ด€๋ฆฌ ๋ฒ ์ŠคํŠธ ํ”„๋ž™ํ‹ฐ์Šค

profile
์ฃผ๋‹ˆ์–ด ํ’€์Šคํƒ๊ฐœ๋ฐœ์ž

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