๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
SQL/Redis

Redis String ํƒ€์ž… ํŠน์ง• ๋ฐ ์ž์ฃผ ์“ฐ๋Š” ๋ช…๋ น์–ด ์•Œ์•„๋ณด๊ธฐ

by ํ‘์‹œ๋ฐ” 2024. 2. 12.

๐Ÿ‘‹  ์†Œ๊ฐœ

ํ•ด๋‹น ํฌ์ŠคํŒ…์—์„œ๋Š” Redis์˜ ๊ธฐ๋ณธ ๋ช…๋ น์–ด ์ค‘ String ํƒ€์ž…์— ๋Œ€ํ•ด ์„ค๋ช…ํ•˜๊ณ , ์ž์ฃผ ์“ฐ๋Š” ๋ช…๋ น์–ด์˜ ์ข…๋ฅ˜์™€ ๊ฐ„๋‹จํ•œ ํ™œ์šฉ ์˜ˆ์ œ๋ฅผ ์‚ดํŽด๋ณธ๋‹ค. ํ™œ์šฉํ•œ ๋ ˆ๋””์Šค ๋ฒ„์ „์€ ์ตœ์‹  7.2.4 ๋ฒ„์ „์ด๋‹ค. ํ•˜์œ„ ๋ฒ„์ „์€ ํŠน์ • ๋ช…๋ น์–ด๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ๋‹ค.

๋ฌธ์ž์—ด (String)

Redis์˜ ๋ฌธ์ž์—ด(String)์€ ๋ ˆ๋””์Šค์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ด๊ณ  ๋‹จ์ˆœํ•œ ๋ฐ์ดํ„ฐ ํƒ€์ž… ์ค‘ ํ•˜๋‚˜๋กœ, ํ‚ค์™€ ๋ฌธ์ž์—ด ๊ฐ’์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์œผ๋ฉฐ, ์ตœ๋Œ€ 512MB ๋ฌธ์ž์—ด ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๋ฌธ์ž์—ด์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํŠน์ง•์„ ๊ฐ–๋Š”๋‹ค.

- ๊ฐ„๋‹จํ•œ ๊ฐ’ ์ €์žฅ

Redis์˜ ๋ฌธ์ž์—ด ํƒ€์ž…์€ ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ Key-Value ์ €์žฅ์†Œ๋กœ ์‚ฌ์šฉ๋œ๋‹ค. ๊ฐ ํ‚ค์—๋Š” ํ•˜๋‚˜์˜ ๋ฌธ์ž์—ด ๊ฐ’์ด ๋งคํ•‘๋œ๋‹ค. ์ด๋Ÿฌํ•œ ๊ฐ„๋‹จํ•œ ๊ตฌ์กฐ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋น ๋ฅด๊ฒŒ ์ฝ๊ณ  ์“ธ ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.

- ์„ฑ๋Šฅ ๋ฐ ํ™•์žฅ์„ฑ

๋ฌธ์ž์—ด์€ ๋‚ด๋ถ€์ ์œผ๋กœ ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅ(binary-safe) ํ•˜๋ฏ€๋กœ, ์ด์ง„ ๋ฐ์ดํ„ฐ ๋ฐ ํ…์ŠคํŠธ ๋ฐ์ดํ„ฐ ๋ชจ๋‘ ํšจ๊ณผ์ ์œผ๋กœ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค. ๋˜ํ•œ, ๋ฌธ์ž์—ด์€ Redis์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ธฐ๋ฐ˜ ์Šคํ† ๋ฆฌ์ง€ ํŠน์„ฑ์ƒ ๋น ๋ฅธ ์ฝ๊ธฐ ๋ฐ ์“ฐ๊ธฐ ์„ฑ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.

- ๋‹ค์–‘ํ•œ ํ™œ์šฉ์„ฑ

๋ฌธ์ž์—ด์€ ๋‹จ์ˆœํžˆ ๋ฌธ์ž์—ด ๊ฐ’์„ ์ €์žฅํ•˜๋Š” ์šฉ๋„๋ฅผ ๋„˜์–ด์„œ ๋‹ค์–‘ํ•œ ์šฉ๋„๋กœ ํ™œ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์นด์šดํ„ฐ๋กœ ํ™œ์šฉํ•˜๊ฑฐ๋‚˜ JSON ํ˜•ํƒœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜์—ฌ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ๊ฐ„์˜ ํ†ต์‹ ์— ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๋˜ํ•œ, JPEG ์ด๋ฏธ์ง€์™€ ๊ฐ™์€ ๋ฐ”์ดํŠธ ๊ฐ’, HTTP ์‘๋‹ต๊ฐ’ ๋“ฑ๋„ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.

๋ช…๋ น์–ด (Command)

SET

์„ค๋ช…: ํŠน์ • ํ‚ค์— ๋ฌธ์ž์—ด ๊ฐ’์„ ์„ค์ •ํ•œ๋‹ค.

์‚ฌ์šฉ ์˜ˆ์ œ:

> SET shiba holic

 

๋งŒ์•ฝ shiba๋ผ๋Š” ํ‚ค์— ๋‹ค๋ฅธ ๊ฐ’์ด ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์œผ๋ฉด, ๊ธฐ์กด ๊ฐ’์€ ์ƒˆ๋กœ ์ž…๋ ฅ๋œ ๊ฐ’์œผ๋กœ ๋Œ€์ฒด๋œ๋‹ค.

 

NX ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด ์ง€์ •ํ•œ ๊ธฐ๊ฐ€ ์—†์„ ๋•Œ๋งŒ ์ƒˆ๋กœ์šด ํ‚ค๋ฅผ ์ €์žฅํ•œ๋‹ค.

XX ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด ํ‚ค๊ฐ€ ์ด๋ฏธ ์žˆ์„ ๋•Œ๋งŒ ์ƒˆ๋กœ์šด ๊ฐ’์œผ๋กœ ๋ฎ์–ด์“ฐ๊ณ  ์ƒˆ๋กœ์šด ํ‚ค๋ฅผ ์ƒ์„ฑํ•˜์ง€๋Š” ์•Š๋Š”๋‹ค.

 

> SET shiba holic2 NX
> SET shiba holic2 XX

GET

์„ค๋ช…: ์ง€์ •๋œ ํ‚ค์— ์ €์žฅ๋œ ๋ฌธ์ž์—ด ๊ฐ’์„ ์กฐํšŒํ•œ๋‹ค.

์‚ฌ์šฉ ์˜ˆ์ œ:

> GET shiba

INCR

์„ค๋ช…: ์ง€์ •๋œ ํ‚ค์˜ ๊ฐ’์„ ์›์ž์ ์œผ๋กœ 1์”ฉ ์ฆ๊ฐ€์‹œํ‚จ๋‹ค. (์ •์ˆ˜ํ˜• ๊ฐ’๋งŒ ๊ฐ€๋Šฅ)

์‚ฌ์šฉ ์˜ˆ์ œ:

> SET shiba 100
> INCR shiba
(integer) 101

INCRBY

์„ค๋ช…: ์ง€์ •๋œ ํ‚ค์˜ ๊ฐ’์„ ์ง€์ •๋œ ์ˆซ์ž๋งŒํผ ์›์ž์ ์œผ๋กœ ์ฆ๊ฐ€์‹œํ‚จ๋‹ค. (์ •์ˆ˜ํ˜• ๊ฐ’๋งŒ ๊ฐ€๋Šฅ)

์‚ฌ์šฉ ์˜ˆ์ œ:

> SET shiba 100
> INCRBY shiba 50
(integer) 150

DECR

์„ค๋ช…: ์ง€์ •๋œ ํ‚ค์˜ ๊ฐ’์„ ์›์ž์ ์œผ๋กœ 1์”ฉ ๊ฐ์†Œ์‹œํ‚จ๋‹ค. (์ •์ˆ˜ํ˜• ๊ฐ’๋งŒ ๊ฐ€๋Šฅ)

์‚ฌ์šฉ ์˜ˆ์ œ:

> SET shiba 100
> DECR shiba
(integer) 99

DECRBY

์„ค๋ช…: ์ง€์ •๋œ ํ‚ค์˜ ๊ฐ’์„ ์ง€์ •๋œ ์ˆซ์ž๋งŒํผ ์›์ž์ ์œผ๋กœ ๊ฐ์†Œ์‹œํ‚จ๋‹ค. (์ •์ˆ˜ํ˜• ๊ฐ’๋งŒ ๊ฐ€๋Šฅ)

์‚ฌ์šฉ ์˜ˆ์ œ:

> SET shiba 100
> DECRBY shiba 50
(integer) 50

MSET

์„ค๋ช…: ํ•œ ๋ฒˆ์— ์—ฌ๋Ÿฌ ํ‚ค๋ฅผ ์„ค์ •ํ•œ๋‹ค.

์‚ฌ์šฉ ์˜ˆ์ œ:

> MSET shiba 10 holic 20

MGET

์„ค๋ช…: ํ•œ ๋ฒˆ์— ์—ฌ๋Ÿฌ ํ‚ค๋ฅผ ์กฐํšŒํ•œ๋‹ค.

์‚ฌ์šฉ ์˜ˆ์ œ:

> MGET shiba holic
1) "10"
2) "20"

 

์„ฑ๋Šฅ์ด ์ค‘์š”ํ•œ ๋Œ€๊ทœ๋ชจ ์‹œ์Šคํ…œ์—์„œ MSET, MGET์„ ์ปค๋ฉ˜๋“œ๋ฅผ ์ ์ ˆํ•˜๊ฒŒ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ๋„คํŠธ์›Œํฌ ํ†ต์‹  ์‹œ๊ฐ„์„ ์ค„์—ฌ์„œ ์„œ๋น„์Šค ์‘๋‹ต ์†๋„๋ฅผ ํ–ฅ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

์ฃผ์˜์‚ฌํ•ญ

๋Œ€๋ถ€๋ถ„์˜ ๋ฌธ์ž์—ด ์—ฐ์‚ฐ์€ O(1)์ด๋ฏ€๋กœ ๋งค์šฐ ํšจ์œจ์ ์ด๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ O(n)์ด ๋  ์ˆ˜ ์žˆ๋Š” SUBSTR, GETRANGE, ๋ช…๋ น์—๋Š” ์ฃผ์˜ํ•ด์•ผ ํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฌด์ž‘์œ„ ์•ก์„ธ์Šค ๋ฌธ์ž์—ด ๋ช…๋ น์€ ํฐ ๋ฌธ์ž์—ด์„ ์ฒ˜๋ฆฌํ•  ๋•Œ ์„ฑ๋Šฅ ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ”ญ REFERENCE

https://redis.io/commands/

https://redis.io/docs/data-types/strings/

 

๋Œ“๊ธ€