๐งญ 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
SCAN 0 MATCH user:1001:* COUNT 10
์ด๋ฐ ๋ฐฉ์์ผ๋ก Redis์ ๋ชจ๋ ์๋ฃํ์ โKey ๊ด๋ฆฌ ๋ช ๋ น์ด + ์๋ฃํ ์ ์ฉ ๋ช ๋ น์ดโ์ ์กฐํฉ์ผ๋ก ์ด์๋ฉ๋๋ค.
์ํ์ ๋ค๋ฉด ๋ค์์ฒ๋ผ ์์ฝ ์ ๋ฆฌํด๋๋ฆด ์ ์์ต๋๋ค ๐
๐ Stringํ ํต์ฌ ์์ฝ (SET/GET/INCRBY ๋ฑ)
๐ Key ๊ด๋ฆฌ ๋ช ๋ น์ด ์ด์ ๋ฆฌ (KEYS/EXISTS/SCAN ๋ฑ)
โ๏ธ ์ค๋ฌด์ฉ ์ค๊ณ ํจํด + ์บ์ ๊ด๋ฆฌ ๋ฒ ์คํธ ํ๋ํฐ์ค