๐[DB] Redis๋?
Redis๋?
Redis๋, Key:Value
๊ตฌ์กฐ์ ๋น์ ํ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ๊ด๋ฆฌํ๊ธฐ ์ํ ์คํ์์ค ๊ธฐ๋ฐ์ ๋น๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ฆฌ ์์คํ
์ด๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค, ์บ์, ๋ฉ์์ง ๋ธ๋ก์ปค๋ก ์์ฃผ ์ฌ์ฉ๋๋ฉฐ ์ธ๋ฉ๋ชจ๋ฆฌ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง ์ ์ฅ์์ด๋ค.
Redis๋ Memcached
์ ๋น์ทํ ์บ์ ์์คํ
์ผ๋ก ๋์ผํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ฉด์ ์์์ฑ
๊ณผ ๋ค์ํ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ๊ฐ์ ๋ถ๊ฐ ๊ธฐ๋ฅ์ ์ง์ํ๋ค.
Redis๋ฅผ ์ฌ์ฉํ๋ ์ด์
์ด๋ฏธ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์๋๋ฐ๋ Redis๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๋ ๋ฌด์์ผ๊น?
๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๋ฐ์ดํฐ๋ฅผ ๋ฌผ๋ฆฌ ๋์คํฌ์ ์ง์ ์ฐ๊ธฐ ๋๋ฌธ์ ์๋ฒ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ฌ ๋ค์ด๋๋๋ผ๋ ๋ฐ์ดํฐ๋ค ์์ค๋์ง ์๋๋ค๋ ์ฅ์ ์ด ์๋ค.
ํ์ง๋ง, ๋งค๋ฒ ๋์คํฌ์ ์ ๊ทผํด์ผํ๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ์๊ฐ ๋ง์์ง ์๋ก ๋ถํ๊ฐ ๋์ด ๋๋ ค์ง ์ ์๋ค.
์ด๋ ๊ฒ ์ฌ์ฉ์๊ฐ ๋์ด ๋ฐ์ดํฐ ๋ฒ ์ด์ค๊ฐ ๊ณผ๋ถํ๊ฐ ๋๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์บ์ ์๋ฒ๋ฅผ ๋์
ํ๋ค.
๊ทธ๋ฆฌ๊ณ ์ด๋ฌํ ์บ์ ์๋ฒ๋ก ์ด์ฉํ ์ ์๋ ๊ฒ์ด ๋ฐ๋ก Redis์ด๋ค.
์บ์ ์๋ฒ(Cache Server)
์บ์ ์๋ฒ๋ Look Aside Cache pattern๊ณผ Write Back pattern ์ด ์๋ค.
Look Aside Cache
- ํด๋ผ์ด์ธํธ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์์ฒญ
- ์น์๋ฒ๋ ๋ฐ์ดํฐ๊ฐ ์กด์ฌํ๋์ง ์บ์ ์๋ฒ์ ๋จผ์ ํ์ธ์ ํ๊ณ
- ์บ์ ์๋ฒ์ ๋ฐ์ดํฐ๊ฐ ์์ผ๋ฉด DB์ ๋ฐ์ดํฐ ์กฐํ๋ฅผ ํ์ง ์๊ณ ์บ์ ์๋ฒ์ ์๋ ๊ฒฐ๊ณผ๊ฐ์ ํด๋ผ์ด์ธํธ์๊ฒ ๋ฐ๋ก ๋ฐํ(Cache Hit) -> ์๋๊ฐ ๋น ๋ฆ
- ์บ์ ์๋ฒ์ ๋ฐ์ดํฐ๊ฐ ์์ผ๋ฉด DB์ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ์ฌ ์บ์ ์๋ฒ์ ์ ์ฅํ๊ณ ๊ฒฐ๊ณผ๊ฐ์ ํด๋ผ์ด์ธํธ์๊ฒ ๋ฐํ(Cache Miss)
Write Back
- ์น์๋ฒ๋ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ์บ์ ์๋ฒ์ ์ ์ฅ
- ์บ์ ์๋ฒ์ ํน์ ์๊ฐ๋์ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋จ
- ์บ์ ์๋ฒ์ ์๋ ๋ฐ์ดํฐ๋ฅผ DB์ ์ ์ฅ
- DB์ ์ ์ฅ๋ ์บ์ ์๋ฒ์ ๋ฐ์ดํฐ๋ฅผ ์ญ์
Redis์ ํน์ง
Key:Value ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ์ฟผ๋ฆฌ๊ฐ ํ์ ์๋ค.
NoSQL!
๋ฐ์ดํฐ๋ฅผ ๋์คํฌ์ ์ฐ๋ ๊ฒ์ด ์๋ ๋ฉ๋ชจ๋ฆฌ์์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ๋๋ฌธ์ ์๋๋ ๋น ๋ฅด๊ณ !
String, Lists, Sets, Sorted Sets, Hases ์๋ฃ ๊ตฌ์กฐ๋ฅผ ์ง์ํ๋ค.
- String: ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ Key, Value ๊ตฌ์กฐ์ ํํ
- Sets: String์ ์งํฉ์ผ๋ก, ์ฌ๋ฌ ๊ฐ์ ๊ฐ์ ํ๋์ Value์ ๋ด์ ์ ์๋ค. ํฌ์คํธ์ ํ๊น
๊ฐ์ ๊ณณ์ ์ฌ์ฉํ ์ ์์.
- Sorted Sets: ์ค๋ณต๋ ๋ฐ์ดํฐ๋ฅผ ๋ด์ง ์๋ Set ๊ตฌ์กฐ์ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ ์ ์ฉํ์ฌ, ๋ญํน๋ณด๋ ๊ฐ์ ์ ๋ ฌ์ด ํ์ํ ์๋ฒ ๊ตฌํ์ ์ฌ์ฉํ ์ ์๋ค.
- Lists: Array ํ์์ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ด๋ค. ์ฒ์๊ณผ ๋์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์
/์ญ์ ๋ ๋น ๋ฅด์ง๋ง, ์ค๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์
/์ญ์ ํ๋ ๊ฒ์ ์ด๋ ต๋ค.
๊ทธ๋ฆฌ๊ณ Single Threaded
์ด๋ค!
- ํ ๋ฒ์ ํ๋์ ๋ช
๋ น๋ง ์ฒ๋ฆฌํ ์ ์๋ค๋ ์๋ฏธ์ด๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ค๊ฐ์ ์ฒ๋ฆฌ ์๊ฐ์ด ๊ธด ๋ช
๋ น์ด๊ฐ ๋ค์ด์ค๋ฉด ์์ ์๋ ๋ช
๋ น์ด ์ฒ๋ฆฌ๋ฅผ ๊ธฐ๋ค๋ ค์ผํ๋ค.
์ฆ, ๊ณ ์ฑ๋ฅ ํค-๊ฐ ์ ์ฅ์๋ก์จ ๋ฌธ์์ด, ๋ฆฌ์คํธ, ํด์, ์ , ์ ๋ ฌ ์ ํ์์ ๋ฐ์ดํฐ๋ฅผ ์ง์ํ๋ NoSQL์ด๋ค!
Redis์ ์์์ฑ
Redis๋ ์์์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํด ๋ฐ์ดํฐ๋ฅผ ๋์คํฌ์ ์ ์ฅํ ์ ์๋ค.
์๋ฒ๊ฐ ๋ค์ด๋๋๋ผ๋ ๋์คํฌ์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด์ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋ฉํ๋ค.
์ด ๋ ๋ฐ์ดํฐ๋ฅผ ๋์คํฌ์ ์ ์ฅํ๋ ๋ฐฉ์์ ํฌ๊ฒ ๋ ๊ฐ์ง ๋ฐฉ์์ด ์๋ค.
RDB(ShapShottion) ๋ฐฉ์
์๊ฐ์ ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ์ ์๋ ๋ด์ฉ์ ๋์คํฌ์ ์ ์ฒด๋ฅผ ์ฎ๊ฒจ๋ด๋ ๋ฐฉ์
์ฆ, ํน์ ํ ๊ฐ๊ฒฉ๋ง๋ค ๋ฉ๋ชจ๋ฆฌ์ ์๋ redis ๋ฐ์ดํฐ ์ ์ฒด๋ฅผ ๋์คํฌ์ ์ฐ๋ ๊ฒ์ด๋ค. (๋ฐฑ์
์ฉ์ด)
Redis๋ ์ธ๋ฉ๋ชจ๋ฆฌ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ธฐ์ ์ผ๋ก ํ์ผ์ ์ ์ฅํ๋๋ฐ, Redis ํ๋ก์ธ์ค๊ฐ ์ฅ์ ๋ก ์ธํด ์ข ๋ฃ๋๋๋ผ๋ ํด๋น ํ์ผ์ ์ฝ์ด๋ค์ด๋ฉด ์ด์ ์ ์ํ๋ฅผ ๋์ผํ๊ฒ ๋ณต๊ตฌํ ์ ์๋ค.
์ฐ๋ฆฌ๊ฐ ์ง์ ์ธํ
ํ์ง ์๋๋ผ๋ Redis๋ ์๋์ผ๋ก .rdb
๋ผ๋ ํ์ฅ์ ํ์ผ์ ์ธ๋ฉ๋ชจ๋ฆฌ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋๋ก ์ธํ
๋์ด์๋ค.
RDB ๋ฐฉ์์ ์ผ๋ช
์ค๋
์ท์ ๋ฌ๋ค ๋ผ๊ณ ํ๋๋ฐ, ์ด ๋ง์ ์๋ฏธ๋ ํน์ ์์ ์ ๋ฉ๋ชจ๋ฆฌ์ ์๋ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ด๋๋ฆฌ ํ์ผ๋ก ์ ์ฅํ๋ค๋ ๋ป์ด๋ค. (๋ฐ์ด๋๋ฆฌ ํ์ผ์ ์ง์ ์ฝ๋ ๊ฒ์ ๋ถ๊ฐ๋ฅโฆ)
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ํน์ ์์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ณต๊ตฌํ๋ ๊ฒ์ด ๊ฐ๋ฅํ๋ฉฐ, redis ๋ฐ์ดํฐ์ versioning ๋ํ ๊ฐ๋ฅํ๋ค.
.rdb ํ์ผ์ AOF ํ์ผ๋ณด๋ค ์ฌ์ด์ฆ๊ฐ ์์ ๋ก๋ฉ ์๋๊ฐ ์๋์ ์ผ๋ก ๋น ๋ฅด๋ค๋ ํน์ง์ด ์๋ค.
.rdb ํ์ผ์ RDBMS ๋ผ๋ ์๋ฏธ๊ฐ ์๋ ์ค๋
์ท ํ์ผ์ ์๋ฏธํ๋ค.
AOF(Append On File)
Redis์ ๋ชจ๋ write/update ์ฐ์ฐ ์์ฒด๋ฅผ ๋ชจ๋ logํ์ผ์ ๊ธฐ๋กํ๋ ํํ์ด๋ค.
์ฆ, ๋ช
๋ น์ด ์คํ๋ ๋ ๋ง๋ค ๋ฐ์ดํฐ๋ฅผ ํ์ผ์ ๊ธฐ๋กํ์ฌ ๋ฐ์ดํฐ์ ์์ค์ด ๊ฑฐ์ ์๋ค.
default๋ก appendonly.aof
ํ์ผ์ ๊ธฐ๋ก๋๋ฉฐ, ์กฐํ๋ฅผ ์ ์ธํ insert/update/delete ๋ช
๋ น์ด๊ฐ ์คํ๋ ๋ ๋ง๋ค ๊ธฐ๋ก๋๋ค.
์๋ฒ๊ฐ ์ฌ์์๋๋ฉด, log์ ๊ธฐ๋ก๋ write/update ์ฐ์ฐ์ ์ฌ์คํํ๋ ํํ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ณต๊ตฌํ๋ ๋ฐฉ์์ด๋ค.
๋ค์๊ณผ ๊ฐ์ ์์๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ค.
- ํด๋ผ์ด์ธํธ๊ฐ Redis์ ์ ๋ฐ์ดํธ ๊ด๋ จ ๋ช ๋ น์ ์์ฒญํ๋ค.
- Redis๋ ํด๋น ๋ช ๋ น์ AOF์ ์ ์ฅํ๋ค.
- ํ์ผ์ฐ๊ธฐ๊ฐ ์๋ฃ๋๋ฉด ์ค์ ๋ก ํด๋น ๋ช
๋ น์ ์ํํด์ Redis ๋ฉ๋ชจ๋ฆฌ์ ๋ด์ฉ์ ๋ณ๊ฒฝํ๋ค.
์ด์ฒ๋ผ, ์ฐ์ฐ์ด ๋ฐ์ํ ๋ ๋ง๋ค ๋งค๋ฒ ๊ธฐ๋กํ๊ธฐ ๋๋ฌธ์ ํน์ ์์ ์ด ์๋๋ผ ํ์ฌ์์ ๊น์ง์ log๋ฅผ ๊ธฐ๋กํ ์ ์์ผ๋ฉฐ, ๊ธฐ๋ณธ์ ์ผ๋ก non-blocking
์ผ๋ก ๋์ํ๋ค.
AOF๋ logํ์ผ์ ๋ํด์๋ง appendํ๊ธฐ ๋๋ฌธ์ log write ์๋๊ฐ ๋น ๋ฅด๋ฉฐ, ์๋ฒ๊ฐ ๋ค์ด๋๋๋ผ๋ ๋ฐ์ดํฐ๊ฐ ์ฌ๋ผ์ง์ง ์๋๋ค.
RDB๋ ๋ฐ์ด๋๋ฆฌ ํ์ผ์ด๋ผ์ ์์ ์ด ๋ถ๊ฐ๋ฅ ํ์ง๋ง, AOF logํ์ผ์ด textํ์ผ์ด๋ฏ๋ก ํธ์ง์ด ๊ฐ๋ฅํ๋ค.
Redis ์ฌ์ฉ ์ฃผ์์
- ์๋ฒ์ ์ฅ์ ๊ฐ ๋ฐ์ํ์ ๊ฒฝ์ฐ, ๊ทธ์ ๋ํ ์ด์ ํ๋์ด ํ์์ ์ด๋ค. ์ธ๋ฉ๋ชจ๋ฆฌ ๋ฐ์ดํฐ ์ ์ฅ์์ ํน์ฑ์, ์๋ฒ์ ์ฅ์ ๊ฐ ๋ฐ์ํ์ ๊ฒฝ์ฐ ๋ฐ์ดํฐ ์ ์ค์ด ๋ฐ์ํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
- ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๊ฐ ์ค์ํ๋ค.
- ์ฑ๊ธ ์ค๋ ๋์ ํน์ฑ ์, ํ ๋ฒ์ ํ๋์ ๋ช ๋ น๋ง ์ฒ๋ฆฌํ ์ ์์ด ์ฒ๋ฆฌ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฌ๋ ์์ฒญ, ๋ช ๋ น์ ํผํ๋ ๊ฒ์ด ์ข๋ค!
Redis ์ค์นํ๊ณ ์คํํ๊ธฐ
Redis ์ค์น(install)
Redis๋ ๊ณต์ ํํ์ด์ง์์ ์ฝ๊ฒ ์ค์นํ ์ ์๋ค.
๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก๋ Redis CLI(Command Line Interface)๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด๋ค.
๋จผ์ , ๊ณต์ ํํ์ด์ง์์ Redis ์์ค์ฝ๋๋ฅผ ๋ค์ด๋ก๋ํ๊ณ , ํฐ๋ฏธ๋์์ ๋ค์ด๋ก๋ํ Redis ์์ค์ฝ๋๋ฅผ ์์ถ ํด์ ํ๋ค.
์์ถํด์
$ tar xvzf redis-6.2.1.tar.gz
์์ถํด์ ํ ํด๋ ์ด๋
$ cd redis-6.2.1
Redis ๋น๋
$ make
Redis ์คํ
$ src/redis-server
Redis CLI ์คํ
$ src/redis-cli
HomeBrew๋ก ์ค์นํ๊ธฐ
homebrew ์ ๋ฐ์ดํธ
$ brew update
Redis ์ค์น
$ brew install redis
Redis ์คํ
$ redis-server
Redis CLI ์คํ
$ redis-cli
Redis๋ ๋ฐ์ดํฐ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํ๋ค๊ณ ํ๋ค! ๊ทธ๋์ ๋ฉ๋ชจ๋ฆฌ ์ฉ๋์ด ์ค์ํ ๊ฒ์ ๋น์ฐํ๋ค!
Redis ์๋ฒ๋ฅผ ์คํํ๊ณ ๋๋ฉด, Redis ํด๋ผ์ด์ธํธ๋ฅผ ์ฌ์ฉํด Redis ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ์กฐํํ ์ ์๋ค!
Redis ๊ธฐ๋ณธ ๋ช ๋ น์ด
|๋ช
๋ น์ด| ์ค๋ช
|
|โ|โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ|
|SET| Key-Value ํํ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ค. |
|GET| Key์ ํด๋นํ๋ Value๋ฅผ ๊ฐ์ ธ์จ๋ค. |
|DEL| Key์ ํด๋นํ๋ ๋ฐ์ดํฐ๋ฅผ ์ญ์ ํ๋ค. |
|INCR| Key์ ํด๋นํ๋ Value๋ฅผ 1์ฆ๊ฐ์ํจ๋ค. |
|DECR| Key์ ํด๋นํ๋ Value๋ฅผ 1๊ฐ์์ํจ๋ค. |
|HSET| Hash ํํ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ ํ๋ค. key, field, value์ 3๊ฐ์ง ์ธ์
๋ฅผ ๋ฐ์ ์ ์ฅ. ์) HSET user id 1234: user
๋ผ๋ hash์ id
๋ผ๋ field์ 1234
๋ผ๋ value๋ฅผ ์ ์ฅ |
|HGET| key, field์ 2๊ฐ์ง ์ธ์
๋ฅผ ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๋ค. ์) HGET user id: user
๋ผ๋ hash์์ id
๋ผ๋ field์ ํด๋นํ๋ value๋ฅผ ์กฐํ |
|HMSET| hash ํํ์ ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฌ ๊ฐ ์ ์ฅํฉ๋๋ค. key, field1, value1, field2, value2โฆ์ ๊ฐ์ ํํ๋ก ์ธ์๋ฅผ ๋ฐ์ ์ฌ๋ฌ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ค. ์) HMSET user id 1234 name John age 25: user
๋ผ๋ hash์ id, name, age
๋ผ๋ field์ ๊ฐ๊ฐ์ ํด๋นํ๋ value
๋ฅผ ์ ์ฅํฉ๋๋ค. |
|HGETEALL| key 1๊ฐ ์ธ์๋ง ๋ฐ์ ํด๋นํ๋ hash์ ๋ชจ๋ field์ value๋ฅผ ์กฐํํ๋ค. ์) HGETALL user: user
๋ผ๋ hash์ ์ ์ฅ๋ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ์กฐํํฉ๋๋ค. |
์ฐธ๊ณ ์๋ฃ
Redis๋? ๋ ๋์ค์ ๊ธฐ๋ณธ์ ์ธ ๊ฐ๋
(์ธ๋ฉ๋ชจ๋ฆฌ ๋ฐ์ดํฐ ๊ตฌ์กฐ ์ ์ฅ์)
Redis๋ ๋ฌด์์ผ๊น? ๊ฐ๋จํ๊ฒ ์์๋ณด๊ธฐ!
[REDIS] ๐ ์บ์ ๋ฐ์ดํฐ ์๊ตฌ ์ ์ฅํ๋ ๋ฐฉ๋ฒ (RDB / AOF)
๋๊ธ๋จ๊ธฐ๊ธฐ