์ „์ฒด ์น˜ํŠธ์‹œํŠธ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค

redis cli

Redis 6.2+

redis-cli ๋น ๋ฅธ ์ฐธ์กฐ: ์—ฐ๊ฒฐ & info, key/string ๋ช…๋ น, hashes, lists, sets, sorted sets, streams, pub/sub, ์„œ๋ฒ„ ๊ด€๋ฆฌ, ์˜์†์„ฑ & ๋ณต์ œ, ์ง„๋‹จ โ€” ์ž์ฃผ ์“ฐ๋Š” ์˜ต์…˜๊ณผ ์‹ค์ „ ์˜ˆ์‹œ๊นŒ์ง€ ์ •๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ช…๋ น์–ด 42๊ฐœ

์—ฐ๊ฒฐ & Info

redis-cli -h <host> -p <port> -a <pwd>

Redis ์„œ๋ฒ„์— ์—ฐ๊ฒฐํ•ด ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ REPL ์„ ์—ฝ๋‹ˆ๋‹ค.

-h host; -p 6379; -a password; --user user; --pass password; --tls; --insecure; -n dbnum

redis-cli -h redis.internal -p 6379 --user monitoring --pass ***
redis-cli AUTH <password>

ํ˜„์žฌ ์—ฐ๊ฒฐ์—์„œ ์ธ์ฆํ•ฉ๋‹ˆ๋‹ค(REPL ์„ ์—ฐ ํ›„).

--user <user> && AUTH password; ACL ์Šคํƒ€์ผ

redis-cli AUTH my_secret_password
redis-cli PING

PING ์„ ๋ณด๋‚ด๋ฉด PONG ์‘๋‹ต โ€” ๊ธฐ๋ณธ์ ์ธ ์—ฐ๊ฒฐ / ํ—ฌ์Šค ์ฒดํฌ.

๋ชจ๋“  ์—ฐ๊ฒฐ ์˜ต์…˜(-h / -p / --pass ๋“ฑ); -r ๋ฐ˜๋ณต; -i ๊ฐ„๊ฒฉ

redis-cli -h redis -p 6379 -i 5 PING
redis-cli INFO [section]

์„œ๋ฒ„ ํ†ต๊ณ„๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค(server / clients / memory / replication / keyspace / stats / โ€ฆ).

INFO [server|clients|memory|stats|replication|keyspace|cluster|commandstats]; --stat ๊ฐ„๋‹จํ•œ ์‹ค์‹œ๊ฐ„ ์นด์šดํ„ฐ

redis-cli -h redis INFO memory | head && redis-cli --stat -i 5 -h redis
redis-cli CLIENT LIST

ํ˜„์žฌ ํด๋ผ์ด์–ธํŠธ ์—ฐ๊ฒฐ ๋ชฉ๋ก(id, addr, fd, name, โ€ฆ).

CLIENT LIST; CLIENT GETNAME; CLIENT SETNAME

redis-cli CLIENT LIST | awk '{print $1, $2}' | head
redis-cli CLIENT KILL <id|addr>

ํด๋ผ์ด์–ธํŠธ๋ฅผ ๋Š์Šต๋‹ˆ๋‹ค(id, addr host:port, TYPE / ADDR / USER / LADDR ํ•„ํ„ฐ).

KILL ADDR ip:port; KILL TYPE normal|master|replica|pubsub; KILL USER username

redis-cli CLIENT KILL ADDR 10.0.1.42:54321 && redis-cli CLIENT LIST | wc -l

Key & String

GET / SET / SETEX / SETNX

๋ฌธ์ž์—ด ๊ฐ’์„ ์ฝ๊ธฐ/์“ฐ๊ธฐ; SETEX ๋Š” TTL ์„ ์ถ”๊ฐ€, SETNX ๋Š” ํ‚ค๊ฐ€ ์—†์„ ๋•Œ๋งŒ ๊ธฐ๋ก.

SET key val EX N (TTL ์ดˆ) | PX N (ms) | NX/XX; GETEX (Redis 6.2)

redis-cli SET session:42 '{"user":42}' EX 3600 NX && redis-cli GET session:42
MSET / MGET / MSETNX

๋‹ค์ค‘ ํ‚ค ๋ฌธ์ž์—ด ์—ฐ์‚ฐ; MSETNX ๋Š” ํ‚ค๊ฐ€ ํ•˜๋‚˜๋ผ๋„ ์žˆ์œผ๋ฉด ๊ฑฐ๋ถ€ํ•ฉ๋‹ˆ๋‹ค.

redis-cli MSET cache:hit:1 ok cache:hit:2 ok && redis-cli MGET cache:hit:1 cache:hit:2 cache:miss:1
INCR / INCRBY / INCRBYFLOAT

์›์ž์  ์นด์šดํ„ฐ ์—ฐ์‚ฐ โ€” rate limiter & counter ์— ์ ํ•ฉ.

redis-cli INCR ratelimit:user:42 redis-cli INCRBY hitcounter:2026-07-23 5 redis-cli INCRBYFLOAT metric:load 0.05
APPEND / STRLEN / DEL / EXISTS

ํ”ํžˆ ์“ฐ๋Š” ๋ฌธ์ž์—ด ํ‚ค ๊ด€๋ฆฌ: ํ…์ŠคํŠธ ์ถ”๊ฐ€, ๊ธธ์ด, ๋‹จ์ผ/๋‹ค์ค‘ ์‚ญ์ œ.

DEL key [key ...]; EXISTS k1 k2 (์กด์žฌ ๊ฐœ์ˆ˜); TYPE key

redis-cli APPEND log:42 'request\n' && redis-cli STRLEN log:42

Key & TTL

EXPIRE / PEXPIRE / TTL / PTTL / PERSIST / EXPIREAT

TTL ์„ค์ •/์กฐํšŒ(์ดˆ/๋ฐ€๋ฆฌ์ดˆ/์ ˆ๋Œ€ Unix ์‹œ๊ฐ„); PERSIST ๋Š” TTL ์„ ํ•ด์ œํ•ฉ๋‹ˆ๋‹ค.

EXPIRE key seconds; PEXPIRE key ms; EXPIREAT key unix_seconds; NX/XX/GT/LT

redis-cli EXPIRE session:42 300 && redis-cli TTL session:42
KEYS pattern / SCAN

KEYS ๋Š” O(N) ์ด๋ผ ํฐ DB ์—์„œ ์œ„ํ—˜ โ€” ์ปค์„œ ๊ธฐ๋ฐ˜ SCAN ์„ ๊ถŒ์žฅ.

SCAN cursor MATCH pattern COUNT N TYPE type; --no-warnings

redis-cli --scan --pattern 'cache:hit:*' | head -20
OBJECT ENCODING|HELP|FREQ|IDLETIME|REFCOUNT <key>

๋‚ด๋ถ€ ์ธ์ฝ”๋”ฉ, ๋ฉ”๋ชจ๋ฆฌ, ๋งˆ์ง€๋ง‰ ์ ‘๊ทผ ์‹œ๊ฐ ์กฐํšŒ(๋””๋ฒ„๊ทธ & RDS ๋‹จ๊ณ„ ํŠœ๋‹).

redis-cli OBJECT ENCODING big:set && redis-cli OBJECT IDLETIME big:set

Hash

HSET / HGET / HMSET / HMGET / HGETALL

์ž‘์€ ๊ฐ์ฒด๋ฅผ ํ•ด์‹œ๋กœ ์ €์žฅ โ€” ํ”„๋กœํ•„, ์„ค์ •, ์„ธ์…˜์— ์ž˜ ์–ด์šธ๋ฆฝ๋‹ˆ๋‹ค.

HSET key f1 v1 f2 v2; HMGET key f1 f2; HSETNX f v ์—†์œผ๋ฉด๋งŒ set

redis-cli HMSET user:42 name Alice email [email protected] && redis-cli HGETALL user:42
HKEYS / HVALS / HLEN / HEXISTS / HDEL

ํ•ด์‹œ๋ฅผ ํƒ์ƒ‰/๊ฐ€์ง€์น˜๊ธฐ: ํ‚ค/๊ฐ’ ๋ชฉ๋ก, ๊ธธ์ด, ์กด์žฌ ์—ฌ๋ถ€, ์‚ญ์ œ.

redis-cli HKEYS user:42 && redis-cli HLEN user:42 && redis-cli HEXISTS user:42 admin
HINCRBY / HINCRBYFLOAT

ํ•ด์‹œ ํ•„๋“œ์— ๋Œ€ํ•œ ์›์ž์  ์นด์šดํ„ฐ โ€” ์ค‘์ฒฉ ์นด์šดํŠธ ๋ฉ”ํŠธ๋ฆญ์— ์ตœ์ .

redis-cli HINCRBY orders:2026-07-23 paid_count 1 && redis-cli HINCRBYFLOAT orders:2026-07-23 gmv 19.95

List

LPUSH / RPUSH / LPOP / RPOP

๋ฆฌ์ŠคํŠธ๋ฅผ ํ(LPUSH/LPOP = FIFO) ๋˜๋Š” ์Šคํƒ(LPUSH/RPOP = ๋ฐฑ์˜คํ”„ ํ)๋กœ ์‚ฌ์šฉ.

redis-cli RPUSH jobs:queue job1 job2 job3 && redis-cli LPOP jobs:queue
LRANGE / LLEN / LINDEX / LSET / LREM

๋ฆฌ์ŠคํŠธ์˜ ๋ฒ”์œ„๋ฅผ ์ฝ๊ธฐ/๊ด€๋ฆฌ; LSET ์€ ์ธ๋ฑ์Šค ํ•„์š”; LREM count>0 ์•ž, <0 ๋’ค์—์„œ.

LRANGE key 0 -1 ์ „์ฒด; LINDEX 0 ๋จธ๋ฆฌ; LREM 0 value ์ „์ฒด; LTRIM start stop ๋ฒ”์œ„ ์œ ์ง€

redis-cli LRANGE jobs:queue 0 -1 && redis-cli LTRIM logs:2026-07-23 -1000 -1
BLPOP / BRPOP / BRPOPLPUSH

๋ธ”๋กœํ‚น ๋ณ€ํ˜• โ€” ๋น„์–ด ์žˆ์œผ๋ฉด N ์ดˆ ๋Œ€๊ธฐ ํ›„ pop; ์•ˆ์ „ํ•œ ํ ์›Œ์ปค.

BLPOP key timeout (์ดˆ, 0 = ๋ฌดํ•œ); Redis 6.2+ ์˜ COUNT ์˜ต์…˜

redis-cli BLPOP jobs:queue 0
RPOPLPUSH src dst / LMOVE src dst LEFT|RIGHT (6.2+)

ํ•œ์ชฝ์—์„œ pop ํ•˜๊ณ  ๋‹ค๋ฅธ ์ชฝ์œผ๋กœ push โ€” ์•ˆ์ „ํ•œ ํ ์ฒ˜๋ฆฌ.

redis-cli LMOVE jobs:queue jobs:processing RIGHT LEFT

Set

SADD / SMEMBERS / SCARD / SISMEMBER

์…‹ ์—ฐ์‚ฐ: ๋ฉค๋ฒ„์‹ญ, ํฌ๊ธฐ, ์ผ๊ด„ ํ™•์ธ(0/1 ๋ฐ˜ํ™˜).

SADD k m1 m2 ...; SCARD k; SISMEMBER k m

redis-cli SADD tags:42 redis postgres mongo && redis-cli SCARD tags:42
SREM / SPOP / SRANDMEMBER

์‚ญ์ œ, ๋žœ๋ค pop(์‚ญ์ œ) ๋˜๋Š” ๋žœ๋ค ์„ ํƒ(๋ณด์กด) โ€” ์ƒ˜ํ”Œ๋ง/์ถ”์ฒจ์— ์œ ์šฉ.

redis-cli SRANDMEMBER lottery:tickets 3 && redis-cli SPOP lottery:tickets 1
SINTER / SUNION / SDIFF / SDIFFSTORE

์…‹ ๋Œ€์ˆ˜ โ€” ๊ต์ง‘ํ•ฉ, ํ•ฉ์ง‘ํ•ฉ, ์ฐจ์ง‘ํ•ฉ; *_STORE ๋Š” ํ‚ค์— ์ €์žฅ.

redis-cli SINTER tags:a tags:b tags:c && redis-cli SDIFFSTORE missing:set tags:all tags:42

Sorted Set (Zset)

ZADD / ZSCORE / ZRANGE / ZCARD

๋ฉค๋ฒ„๋ฅผ score ์™€ ํ•จ๊ป˜ ์ €์žฅ; ZRANGE ๋Š” score(WITHSCORES) ๋˜๋Š” lex ์ˆœ์„œ.

ZADD k score m [score m ...]; ZRANGEBYSCORE -inf +inf; ZREVRANGE

redis-cli ZADD lb:game alice 1500 bob 1300 carol 1750 && redis-cli ZRANGE lb:game 0 -1 REV WITHSCORES
ZRANGEBYSCORE / ZRANK / ZINCRBY / ZREM

zset ์˜ ๋ฒ”์œ„/์ˆœ์œ„/์นด์šดํ„ฐ โ€” top-N, ํ•˜ํ•œ ์Šฌ๋ผ์ด๋“œ, ๋ฆฌ๋”๋ณด๋“œ.

ZRANGEBYSCORE min max LIMIT offset count; ZREVRANK; ZREM k m [m...]

redis-cli ZADD ratelimit:api 1750731000.123 10.0.1.42 1750731050.456 10.0.1.7 && redis-cli ZREMRANGEBYSCORE ratelimit:api 0 $(date +%s.%N --date='-5 minutes')

Pub/Sub & Streams

SUBSCRIBE / PSUBSCRIBE / PUBLISH / UNSUBSCRIBE

์™€์ด์–ด ์œ„ ์‹ค์‹œ๊ฐ„ pub/sub โ€” ๊ฐ€๋ฒผ์šด ๋ธŒ๋กœ๋“œ์บ์ŠคํŠธ, ์˜์†์„ฑ ์—†์Œ.

PSUBSCRIBE news:*; PUBLISH channel msg; PUB/SUB NUMSUB ์กฐํšŒ

redis-cli PSUBSCRIBE 'app.*' & PID=$!; redis-cli PUBLISH app.notice 'red-button pressed'; sleep 0.1; kill $PID
XADD / XLEN / XRANGE / XREAD

Stream = ์ปจ์Šˆ๋จธ ๊ทธ๋ฃน์ด ์žˆ๋Š” append-only ๋กœ๊ทธ(Redis 5+).

XADD k * f v; XADD k MAXLEN ~ 1000 * f v (capped); XREAD / XREADGROUP; ์ปจ์Šˆ๋จธ ์ด๋ฆ„; XAUTOCLAIM

redis-cli XADD events * user 42 action click && redis-cli XLEN events && redis-cli XRANGE events - +
XREAD BLOCK 0 STREAMS k $

์ƒˆ ์—”ํŠธ๋ฆฌ๋ฅผ ์˜์›ํžˆ ๋Œ€๊ธฐ โ€” ์›Œ์ปค ํ์šฉ ์ปจ์Šˆ๋จธ ๊ทธ๋ฃน๊ณผ ์ง์„ ์ด๋ฃน๋‹ˆ๋‹ค.

redis-cli XGROUP CREATE events grp1 0 MKSTREAM && redis-cli XREADGROUP GROUP grp1 c1 BLOCK 0 COUNT 10 STREAMS events '>'

์„œ๋ฒ„ ๊ด€๋ฆฌ

FLUSHDB / FLUSHALL [ASYNC]

ํ˜„์žฌ(FLUSHDB) ๋˜๋Š” ๋ชจ๋“ (FLUSHALL) ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋น„์›๋‹ˆ๋‹ค. โš ๏ธ ํŒŒ๊ดด์ .

FLUSHALL ASYNC; FLUSHDB ASYNC; --no-auth-warning

redis-cli -h dev FLUSHDB
DBSIZE / CONFIG GET|SET <key>

ํ‚ค ๊ฐœ์ˆ˜ ์กฐํšŒ์™€ ๋Ÿฐํƒ€์ž„ ์„ค์ •(memory limit, appendonly ๋“ฑ) ๊ด€๋ฆฌ.

CONFIG GET dir/save/maxmemory; CONFIG SET maxmemory 1gb; CONFIG REWRITE ์˜์†ํ™”

redis-cli CONFIG SET maxmemory-policy allkeys-lru && redis-cli CONFIG REWRITE
SLOWLOG GET|len|reset

slowlog-log-slower-than(๋งˆ์ดํฌ๋กœ์ดˆ)์„ ๋„˜๊ธด ๋ช…๋ น์„ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค.

SLOWLOG GET 10; SLOWLOG LEN; SLOWLOG RESET

redis-cli SLOWLOG GET 10 | jq '.[].command'
MONITOR

๋ชจ๋“  ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์‹คํ–‰ํ•œ ๋ชจ๋“  ๋ช…๋ น์˜ ์ŠคํŠธ๋ฆผ โ€” ๋””๋ฒ„๊ทธ ์ „์šฉ, ๋น„์šฉ์ด ๋งค์šฐ ํฝ๋‹ˆ๋‹ค.

์ถ”๊ฐ€ ํ”Œ๋ž˜๊ทธ ์—†์Œ; --bigkeys (redis-cli --bigkeys ์™€ ํ•จ๊ป˜ ์ตœ๊ณ ); --memkeys; --latency; --intrinsic-latency

timeout 2 redis-cli MONITOR | grep -E 'EXPIRE|GET.*:42'
DEBUG ... / MEMORY USAGE <key>

๋‚ด๋ถ€ ์กฐํšŒ: OBJECT ์ธ์ฝ”๋”ฉ, ํ‚ค๋‹น ๋ฉ”๋ชจ๋ฆฌ(๋””๋ฒ„๊ทธ ์ „์šฉ ํ”Œ๋ž˜๊ทธ).

MEMORY USAGE key [SAMPLES N]; DEBUG OBJECT-DURATION ๋˜๋Š” DEBUG RELOAD-ALL-COMMANDS (๋“œ๋ฌพ)

redis-cli MEMORY USAGE user:42 SAMPLES 5 && redis-cli MEMORY DOCTOR
ACL WHOAMI / ACL CAT / ACL GETUSER

ACL ๋””๋ฒ„๊น…(Redis 6+).

redis-cli ACL WHOAMI && redis-cli ACL GETUSER deployer | head -20

์˜์†์„ฑ

BGSAVE / SAVE / LASTSAVE

RDB ์Šค๋ƒ…์ƒท ํŠธ๋ฆฌ๊ฑฐ(BGSAVE = fork+async); LASTSAVE ๋Š” ๋งˆ์ง€๋ง‰ ์Šค๋ƒ…์ƒท ์‹œ๊ฐ.

redis-cli BGSAVE && redis-cli LASTSAVE
BGREWRITEAOF

๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ AOF ํŒŒ์ผ์„ ์žฌ์ž‘์„ฑ(์ปดํŒฉ์…˜).

์žฌ์ž‘์„ฑ๋„ ์ž ๊น ๋ธ”๋ก; auto-aof-rewrite-percentage ๊ฐ€ ์ž„๊ณ„์น˜๋ฉด ์ž๋™ ์‹คํ–‰

redis-cli BGREWRITEAOF && redis-cli INFO persistence | head
REPLICAOF host port (was SLAVEOF)

์ด ์ธ์Šคํ„ด์Šค๋ฅผ ๋‹ค๋ฅธ ์ธ์Šคํ„ด์Šค์˜ replica ๋กœ ๋งŒ๋“ญ๋‹ˆ๋‹ค(๋˜๋Š” REPLICAOF NO ONE ์œผ๋กœ ์Šน๊ฒฉ).

redis-cli REPLICAOF redis-master 6379 && redis-cli REPLICAOF NO ONE

ํŒŒ์ดํ”„๋ผ์ธ & ์Šค์บ”

redis-cli ... < commands.txt

ํŒŒ์ดํ”„๋ผ์ด๋‹: stdin ์œผ๋กœ๋ถ€ํ„ฐ ๋ช…๋ น์„ ํ•œ ๋ผ์šด๋“œํŠธ๋ฆฝ์— ๋ฌถ์–ด ๋ณด๋‚ด ๋ฐฐ์น˜์—์„œ ํ›จ์”ฌ ๋น ๋ฆ…๋‹ˆ๋‹ค.

--pipe ๋ชจ๋“œ๋Š” RESP ์‚ฌ์šฉ; < file.txt

printf 'SET k1 v1\nSET k2 v2\nGET k1\nGET k2\nINCR counter\n' | redis-cli --pipe | head
redis-cli --scan --pattern '...'

์„œ๋ฒ„ ์ธก ์ปค์„œ ์Šค์บ” โ€” KEYS ์ฒ˜๋Ÿผ O(N) ์œผ๋กœ ํญ์ฆํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

--scan --pattern p; --bigkeys / --memkeys / --hotkeys (์ƒ˜ํ”Œ๋ง)

redis-cli --scan --pattern 'session:*' | wc -l

์ง„๋‹จ

redis-cli --bigkeys / --memkeys

๊ฐ€์žฅ ํฐ ํ‚ค / ํ‚ค๋‹น ๋ฉ”๋ชจ๋ฆฌ ์ฐพ๊ธฐ โ€” ์ƒ˜ํ”Œ ๊ธฐ๋ฐ˜์ด๋ผ ์„œ๋ฒ„๋ฅผ ๋ฉˆ์ถ”์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

redis-cli -h prod --bigkeys --i 0.01 | tee /tmp/bigkeys.log
redis-cli --latency / --latency-history

๋ช‡ ์ƒ˜ํ”Œ์— ๋Œ€ํ•œ ์‹ค์‹œ๊ฐ„ ์ง€์—ฐ ํžˆ์Šคํ† ๊ทธ๋žจ(min / max / avg).

--latency; --latency-history -i 5; --intrinsic-latency N (OS ํด๋Ÿญ ์ง„๋‹จ)

redis-cli -h prod --latency-history -i 5 > /tmp/lat.log & sleep 30; kill %1
redis-cli CLUSTER INFO / CLUSTER NODES

ํด๋Ÿฌ์Šคํ„ฐ ์ƒํƒœ: ์Šฌ๋กฏ, ๋…ธ๋“œ ์—ญํ• (master/replica), ์ƒํƒœ.

redis-cli --cluster check 10.0.0.1:6379

๊ด€๋ จ ๋ช…๋ น์–ด ์น˜ํŠธ์‹œํŠธ

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค

postgresql

PostgreSQL ๋น ๋ฅธ ์ฐธ์กฐ: psql ํด๋ผ์ด์–ธํŠธ ๋ช…๋ น, DDL/DML ๋ฌธ, joins/aggregates, ์ธ๋ฑ์Šค, ํŠธ๋žœ์žญ์…˜, ๋ฐฑ์—…/๋ณต์› โ€” ์ž์ฃผ ์“ฐ๋Š” ์˜ต์…˜๊ณผ ์‹ค์ „ ์˜ˆ์‹œ๊นŒ์ง€ ์ •๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ช…๋ น์–ด 36๊ฐœ

PostgreSQL 14+

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค

mysql

MySQL / MariaDB ๋น ๋ฅธ ์ฐธ์กฐ: ํด๋ผ์ด์–ธํŠธ ๋ช…๋ น, DDL/DML ๋ฌธ, joins/aggregates, ์ธ๋ฑ์Šค, ํŠธ๋žœ์žญ์…˜, ๋ฐฑ์—…/๋ณต์› โ€” ์ž์ฃผ ์“ฐ๋Š” ์˜ต์…˜๊ณผ ์‹ค์ „ ์˜ˆ์‹œ๊นŒ์ง€ ์ •๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ช…๋ น์–ด 38๊ฐœ

MySQL 8.0+

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค

mongodb

mongosh ๋น ๋ฅธ ์ฐธ์กฐ: ์—ฐ๊ฒฐ, CRUD, ์ฟผ๋ฆฌ ์—ฐ์‚ฐ์ž, aggregation ํŒŒ์ดํ”„๋ผ์ธ, ์ธ๋ฑ์Šค, replica set, ์‚ฌ์šฉ์ž, dump/restore โ€” ๊ฐ€์žฅ ํ”ํ•œ ์…ธ ํŒจํ„ด๊ณผ ์‹ค์ „ ์˜ˆ์‹œ๊นŒ์ง€ ์ •๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ช…๋ น์–ด 30๊ฐœ

MongoDB 6.0+ / mongosh 1.6+

Redis ์†Œ๊ฐœ

Redis๋Š” Salvatore Sanfilippo(antirez)๊ฐ€ 2009๋…„์— ๋งŒ๋“  ์˜คํ”ˆ ์†Œ์Šค ์ธ๋ฉ”๋ชจ๋ฆฌ ํ‚ค-๊ฐ’ ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ๋กœ, ํ˜„์žฌ Linux Foundation์ด ๊ด€๋ฆฌํ•˜๋ฉฐ ์•ˆ์ • ๋ฒ„์ „์€ Redis 7+์ž…๋‹ˆ๋‹ค. ์ƒˆ ๋ฆด๋ฆฌ์Šค๋Š” Redis Source Available License(BSD ์Šคํƒ€์ผ)๋กœ ์ „ํ™˜๋˜์—ˆ๊ณ , ์˜ค๋ž˜๋œ ๋ฆด๋ฆฌ์Šค๋Š” MIT๋ฅผ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. Redis๋Š” ์ž‘์—… ๋ฐ์ดํ„ฐ์…‹์„ RAM์— ๋‘๊ณ  ์„ค์ • ๊ฐ€๋Šฅํ•œ AOF(Append-Only File) ๋˜๋Š” RDB(์Šค๋ƒ…์ƒท)๋กœ ์˜์†ํ™”ํ•ฉ๋‹ˆ๋‹ค โ€” ์ด๊ฒƒ์ด ์ฝ๊ธฐ ์ง€์—ฐ์„ ๋งˆ์ดํฌ๋กœ์ดˆ ๋‹จ์œ„๋กœ ๋งŒ๋“œ๋Š” ์ด์œ ์ด๋ฉฐ ํ•˜๋“œ์›จ์–ด ์‚ฌ์ด์ง•์˜ ๊ทผ๊ฑฐ์ด๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค. ๋‹จ์ˆœ ๋ฌธ์ž์—ด ์™ธ์—๋„ ํ•ด์‹œ, ๋ฆฌ์ŠคํŠธ, ์„ธํŠธ, ์ •๋ ฌ ์„ธํŠธ(`ZRANGEBYSCORE` ๋“ฑ), ์ŠคํŠธ๋ฆผ(์ด๋ฒคํŠธ ์†Œ์‹ฑ์šฉ), HyperLogLog(์นด๋””๋„๋ฆฌํ‹ฐ ์ถ”์ •), ๋น„ํŠธ๋งต, ์ง€๋ฆฌ ๊ณต๊ฐ„ ์ธ๋ฑ์Šค๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“ˆ์€ ๊ฐ™์€ ์—”์ง„ ์œ„์— JSON, ๊ฒ€์ƒ‰, ๋ฒกํ„ฐ ์œ ์‚ฌ๋„, ์‹œ๊ณ„์—ด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์„ธ์…˜ ์บ์‹œ, ๋ฆฌ๋”๋ณด๋“œ, ๋ ˆ์ดํŠธ ๋ฆฌ๋ฏธํ„ฐ, ๋ถ„์‚ฐ ์ž ๊ธˆ(`SET NX PX`), Pub/Sub, ์ŠคํŠธ๋ฆผ ๊ธฐ๋ฐ˜ ํ, ๊ฒฝ๋Ÿ‰ ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค โ€” ๋ชจ๋‘ Redis์˜ ์˜์—ญ์ž…๋‹ˆ๋‹ค. ๋™์ผํ•œ ํ˜•ํƒœ๋กœ ์˜์†์ ์ธ ํŠธ๋žœ์žญ์…˜ ์ €์žฅ์ด ํ•„์š”ํ•˜๋ฉด PostgreSQL์ด๋‚˜ ๋‹ค๋ฅธ RDBMS๋ฅผ ์„ ํƒํ•˜์„ธ์š”. Redis๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ localhost ๋˜๋Š” ์‚ฌ์„ค ๋„คํŠธ์›Œํฌ์—๋งŒ ๋ฐ”์ธ๋“œํ•ฉ๋‹ˆ๋‹ค โ€” `requirepass` + `bind 127.0.0.1`(๋˜๋Š” ๋ฐฉํ™”๋ฒฝ)์ด ์ตœ์†Œ ๋ฒ ์ด์Šค๋ผ์ธ์ž…๋‹ˆ๋‹ค.

์น˜ํŠธ์‹œํŠธ ๋ฒ„์ „ 1.0.0