- ๐ Redis๋?
- ๐ Redis์ ํน์ง
- ๐ Redis vs Memcached
- ๐ Cache-Aside ํจํด๊ณผ Write-Back ํจํด
Redis๋ Memcached์ ๋น์ทํย ์บ์ ์์คํ
์ผ๋ก์ ๋์ผํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ฉด์ ์์์ฑ, ๋ค์ํ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ๊ฐ์ ๋ถ๊ฐ์ ์ธ ๊ธฐ๋ฅ์ ์ง์ํ๊ณ ์๋ค.
๋ ๋์ค๋ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํ๊ณ ์กฐํ
ํ๋ค.
์ฆ,ย ์ธ๋ฉ๋ชจ๋ฆฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค
ย ์ด๋ค.
์ด ๋ง๋ง ๋ค์ผ๋ฉด Redis์ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํ๋ ๋น ๋ฅธ DB์ผ ๋ฟ์ด๋ผ๊ณ ์๊ฐํ ์ง๋ ๋ชจ๋ฅธ๋ค. ํ์ง๋ง, ๋น ๋ฅธ ์ฑ๋ฅ์ ๋ ๋์ค์ ํน์ง ์ค ์ผ๋ถ๋ถ์ด๋ฉฐ, ๋ค๋ฅธ ์ธ๋ฉ๋ชจ๋ฆฌ ๋๋น๋ค๊ณผ์ ๊ฐ์ฅ ํฐ ์ฐจ์ด์ ์ย ๋ ๋์ค์ ๋ค์ํ ์๋ฃ๊ตฌ์กฐ
์ด๋ค.
์ด๋ ๊ฒ ๋ค์ํ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ง์ํ๊ฒ ๋๋ฉดย ๊ฐ๋ฐ์ ํธ์์ฑ์ด ์ข์์ง๊ณ ๋์ด๋๊ฐ ๋ฎ์์ง๋ค
๋ ์ฅ์ ์ด ์๋ค.
์๋ฅผ ๋ค์ด, ์ด๋ค ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฌ ํ ๋, DBMS๋ฅผ ์ด์ฉํ๋ค๋ฉด DB์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ , ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฌํ์ฌ ๋ค์ ์ฝ์ด์ค๋ ๊ณผ์ ์ ๋์คํฌ์ ์ง์ ์ ๊ทผ์ ํด์ผํ๊ธฐ ๋๋ฌธ์ ์๊ฐ์ด ๋ ๊ฑธ๋ฆฐ๋ค๋ ๋จ์ ์ด ์๋ค.
ํ์ง๋ง ์ด ๋ย In-Memory
ย ๋ฐ์ดํฐ๋ฒ ์ด์ค์ธย Redis
๋ฅผ ์ด์ฉํ๊ณ ๋ ๋์ค์์ ์ ๊ณตํ๋ย Sorted-Set
์ด๋ผ๋ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๋ฉด ๋ ๋น ๋ฅด๊ณ ๊ฐ๋จํ๊ฒ ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฌํ ์ ์๋ค. ์ฆ, ๋ ๋์ค๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ฉด ์ฌ๋ฌ ์๋ฃ๊ตฌ์กฐ๋ฅผ ํ์ฉํ์ฌ ์์
์ ํจ์จ์ ์ผ๋ก ์งํํ ์ ์๋ค.
๋ ๋์ค(Redis, Remote Dictionary Server)์ ์ฃผ์ ํน์ง์ ์๋์ ๊ฐ๋ค.
์์์ฑ์ ์ง์ํ๋ ์ธ๋ฉ๋ชจ๋ฆฌ ๋ฐ์ดํฐ ์ ์ฅ์
์ฝ๊ธฐ ์ฑ๋ฅ ์ฆ๋๋ฅผ ์ํ ์๋ฒ ์ธก ๋ณต์ ๋ฅผ ์ง์
์ฐ๊ธฐ ์ฑ๋ฅ ์ฆ๋๋ฅผ ์ํ ํด๋ผ์ด์ธํธ ์ธก ์ค๋ฉ(Sharding) ์ง์
๋ค์ํ ์๋น์ค์์ ์ฌ์ฉ๋๋ฉฐ ๊ฒ์ฆ๋ ๊ธฐ์
๋ฌธ์์ด, ๋ฆฌ์คํธ, ํด์, ์ , ์ ๋ ฌ๋ ์ ๊ณผ ๊ฐ์ ๋ค์ํ ๋ฐ์ดํฐํ์ ์ง์. ๋ฉ๋ชจ๋ฆฌ ์ ์ฅ์์์๋ ๋ถ๊ตฌํ๊ณ ๋ง์ ๋ฐ์ดํฐํ์ ์ง์ํ๋ฏ๋ก ๋ค์ํ ๊ธฐ๋ฅ์ ๊ตฌํ
์ฆ, Redis๋ฅผ ํ์ค๋ก ์ ๋ฆฌํ์๋ฉด, ๊ณ ์ฑ๋ฅ ํค-๊ฐ ์ ์ฅ์๋ก์ Stirng , list, hash, set, sorted setํ์์ ๋ฐ์ดํฐ๋ฅผ ์ง์ํ๋ NoSQL์ด๋ค.
Redis ์ด์ ๋ฒ์ ์ผ๋ก๋ Memcached๊ฐ ์๋ค.
- 1ms ์ดํ์ ์๋ต๋๊ธฐ์๊ฐ
1ms ์ดํ์ ์๋ต์๊ฐ์ ์ ๊ณตํ๋ค. ๋ฐ์ดํฐ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํ๊ธฐ ๋๋ฌธ์, ๋์คํฌ ๊ธฐ๋ฐ์ ๋ฐ์ดํฐ ๋ฒ ์ด์ค๋ณด๋ค ๋น ๋ฅด๊ฒ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ์ ์๋ค.
- ๊ฐ๋ฐ์ ์ฉ์ด์ฑ
๋ฌธ๋ฒ์ ์ผ๋ก ์ฌ์ฉํ๊ธฐ ์ฝ๊ณ , ๊ฐ๋ฐ์ฝ๋ ์ ๋ํ ์ ๋ค.
- ๋ฐ์ดํฐ ํํฐ์ ๋
๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฌ ๋ ธ๋์ ๋ถ์ฐํ์ฌ ์ ์ฅ์ํฌ ์ ์๋ค. ๋ฐ๋ผ์ ์์๊ฐ ์ฆ๊ฐํ ๋ ๋ ๋ง์ ๋ฐ์ดํฐ๋ฅผ ํจ๊ณผ์ ์ผ๋ก ์ฒ๋ฆฌํ๊ธฐ ์ํ์ฌ ์ค์ผ์ผ์์์ด ๊ฐ๋ฅํ๋ค.
- ๋ค์ํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด ์ง์
์ฌ๋ฌ ๊ฐ๋ฐ์ธ์ด๋ฅผ ์ง์ํ๋ค. ์๋ฐ, ํ์ด์ฌ, C, C++, C#, JavaScript, Node.Js, Ruby, Go ๊ทธ๋ฆฌ๊ณ ๋ค๋ฅธ ์ธ์ด๋ค์ ์ง์ํ๋ค.
๋ฉํฐ์ค๋ ๋๋ฅผ ์ง์ํ๊ธฐ ๋๋ฌธ์,ย ๋ฉํฐํ๋ก์ธ์ค์ฝ์ด๋ฅผ ์ฌ์ฉํ ์ ์๋ค. ๋ฐ๋ผ์, ์ค์ผ์ผ ์ ์ ํตํ์ฌ ๋์ฑ ๋ง์ ์์ ์ฒ๋ฆฌ๋ฅผ ํ ์ ์๋ค.
1. ๋์ฑ ๋ค์ํ ๋ฐ์ดํฐ ๊ตฌ์กฐ
๋ฌธ์์ด ๋ฟ๋ง ์๋๋ผย List
,ย Set
,ย ์ ๋ ฌ๋ Set
,ย Hash
,ย Bit ๋ฐฐ์ด
,ย hyperloglogs
ย (๋งค์ฐ ์ ์ ๋ฉ๋ชจ๋ฆฌ๋ก ์งํฉ์ ๊ฐ์๋ฅผ ์ถ์ ํ ์ ์๋ ๋ฐฉ๋ฒ)์ ์ง์ํ๋ค. ํ๋ก๊ทธ๋จ์์ ์์ ๋ค์ํ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ ์ ์๋ค. ์๋ฅผ ๋ค์ด,ย Sorted Set
์ ํ์ฉํ์ฌ ๊ฒ์์ ์ ์ ์์๋ญํฌ ์ ๋ณด๋ฅผ ์ฝ๊ฒ ์ ๊ณตํ ์ ์๋ค.
2. Snapshots
๋ ๋์ค๋ ํน์ ์์ ์ ๋ฐ์ดํฐ๋ฅผ ๋์คํฌ์ ์ ์ฅํ์ฌ ํ์ผ ๋ณด๊ด์ด ๊ฐ๋ฅํฉ๋๋ค. ๋ํ, ์ฅ์ ์ํฉ์ ๋ณต๊ตฌ์ ์ฌ์ฉํ ์ ์๋ค.
3. ๋ณต์
Master โ Salves
ย ๊ตฌ์กฐ๋ก, ์ฌ๋ฌ๊ฐ์ ๋ณต์ ๋ณธ์ ๋ง๋ค ์ ์๋ค. ๋ฐ๋ผ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฝ๊ธฐ๋ฅผ ํ์ฅํ ์ ์๊ธฐ ๋๋ฌธ์ ๋์ ๊ฐ์ฉ์ฑ(์ค๋ ์๊ฐ๋์ ๊ณ ์ฅ๋์ง ์์) ํด๋ฌ์คํฐ๋ฅผ ์ ๊ณตํ๋ค.
3. ํธ๋์ ์
ํธ๋ ์ ์ ์ด๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ํ๋ฅผ ๋ณ๊ฒฝ์ํค๋ ์์ ๋จ์๋ฅผ ์๋ฏธํ๊ณ , ์์์ฑ, ์ผ๊ด์ฑ, ๋ ๋ฆฝ์ฑ, ์ง์์ฑ์ ํน์ง์ ๊ฐ์ง๊ณ ์๋ค. Redis๋ ์ด๋ฌํ ํน์ง์ ์ง์ํ๋ค.
4. Pub / Sub messaging
Publish(๋ฐํ)๊ณผ Sub(๊ตฌ๋ )๋ฐฉ์์ ๋ฉ์์ง๋ฅผ ํจํด ๊ฒ์์ด ๊ฐ๋ฅํ๋ค. ๋ฐ๋ผ์ ๋์ ์ฑ๋ฅ์ ์๊ตฌํ๋ ์ฑํ , ์ค์๊ฐ ์คํธ๋ฆฌ๋ฐ, SNS ํผ๋ ๊ทธ๋ฆฌ๊ณ ์๋ฒ์ํธํต์ ์ ์ฌ์ฉํ ์ ์๋ค.
5. ๋ฃจ์ ์คํฌ๋ฆฝํธ ์ง์
๋งค์ฐ ๊ฒฝ๋ํ๋ ์ ์ฐจ์คํฌ๋ฆฝํธ ์ธ์ด์ธ ๋ฃจ์๋ฅผ ์ง์ํ๋ค. eval ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ ๋ฃจ์์คํฌ๋ฆฝํธ๋ฅผ ์คํ์ํฌ ์ ์๋ค. ๋ฐ๋ผ์, ํ๋ก๊ทธ๋จ์ ๋ช ๋ฃํ๊ฒํ๊ณ ์ฑ๋ฅ์ ๋์ผ ์ ์๋ค.
6. ์์น๊ธฐ๋ฐ ๋ฐ์ดํฐ ํ์ ์ง์
Redis๋ ์ค์๊ฐ ์์น๊ธฐ๋ฐ๋ฐ์ดํฐ๋ฅผ ์ง์ํ๋ค. ๋ฐ๋ผ์, ๋ ์์น์ ๊ฑฐ๋ฆฌ๋ฅผ ์ฐพ๊ฑฐ๋, ์ฌ์ด์ ์๋ ์์ ์ฐพ๊ธฐ๋ฑ์ ์์ ์ ์ํํ ์ ์๋ค. ์ด๋ฅผ ํ์ฉํ์ฌ ๋ง์ง, ๊ธธ์ฐพ๊ธฐ ๊ทธ๋ฆฌ๊ณ ์ง๋๊ธฐ๋ฐ์ ๊ณ ์ฑ๋ฅ ์๋น์ค๋ฅผ ์ ๊ณตํ ์ ์๋ค.
Cache-Aside ํจํด๊ณผ Write-Back ํจํด์ Redis์์ ์์ฃผ ์ฌ์ฉ๋๋ ํจํด์ด๋ค.
๊ฒ์ ์ Redis์์ ๋จผ์ ์ฐพ์๋ณด๊ณ Redis์ ์ ์ฅ๋ ๋ด์ฉ์ด ์๋ค๋ฉด ์ ์ฅ๋ ์ ๋ณด๋ฅผ ๋ฐ๋ก ๋ณด์ฌ์ฃผ๊ณ
์๋ค๋ฉด MySQL์์ ์ ๋ณด๋ฅผ ๋ณด์ฌ์ค ๋ค์ ๊ฒ์๋ ๋ด์ฉ์ redis์ ์ ์ฅํ๋ ๋ฐฉ์์ด๋ค.
Cache-Asideํจํด๋ฅผ ์ฌ์ฉํ๋ค๋ฉด ๊ฐ์ ๋ด์ฉ์ 2๋ฒ์งธ ๊ฒ์๋ถํฐ๋ redis์ ์ ์ฅ๋ ์ ๋ณด๋ฅผ ๋ณด์ฌ์ฃผ๊ธฐ ๋๋ฌธ์ ์๋๊ฐ ๋นจ๋ผ์ง๋ค.
redis์ ๋จผ์ ์์ ์ ์ฅํด๋์ ๋ค Database์ ์ ์ฅํ๋ ๋ฐฉ์์ด๋ค.
๋์คํฌ ๊ธฐ๋ฐ์ Database์ ์ ์ฅํด์ผํ ๋ฐ์ดํฐ ์์ด ๋ง์ ๊ฒฝ์ฐ ๋์คํฌI/O(์๋๊ฐ ๋๋ฆฐ ํ์)๊ฐ
๋ฐ์ํ๊ฒ ๋๋๋ฐ ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด Write-Back ํจํด์ ์ฌ์ฉํ๋ค.