๐ ์บ์๋ฅผ ์ฌ์ฉํ๋ ์ด์
๋์ค์ ์์ฒญ์ฌ ๊ฒฐ๊ณผ๋ฅผ ๋ฏธ๋ฆฌ ์ ์ฅํด๋์๋ค๊ฐ ๋น ๋ฅด๊ฒ ์๋น์ค๋ฅผ ํด์ฃผ๋ ๊ฒ์ ์๋ฏธํ๋ค. ์บ์๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํด์ ๋์คํฌ ๊ธฐ๋ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ณด๋ค ๋น ๋ฅด๊ฒ ๋ฐ์ดํฐ๋ฅผ ๋ฐํํ ์ ์๋ค.
โ ์บ์ ๋์์ด ๋๋ ๋ฐ์ดํฐ
๋ํ์ ์ผ๋ก Look aside ํจํด๊ณผ Write Back ํจํด์ด ๋ง์ด ์ฐ์ธ๋ค.
๋ฐ๋ณต์ ์ธ ์ฝ๊ธฐ์ ์ ํฉ
๋ ๋์ค์ ์ฅ์ ๊ฐ ์๊ธฐ๋๋ผ๋ DB์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ฌ ์ ์์.
Cache์ DB์ ์ ์ฅ๋ ๋ฐ์ดํฐ๊ฐ ์๋ก ๋ค๋ฅผ ์ ์์.
์ผ๋ฐ์ ์ผ๋ก ๊ฐ์ฅ ๋ง์ด ์ฐ๋ ํจํด
๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ์บ์์ ๋จผ์ ์ฐ๊ณ ํน์ ์๊ฐ ๋ง๋ค DB์ ์ ์ฅํ๋ ๋ฐฉ์
๋จ์ : ์บ์ ์ฅ์ ์ ๋ฐ์ดํฐ๊ฐ ์ฌ๋ผ์ง ๊ฐ๋ฅ์ฑ
์ ์ฉํ ๊ฒฝ์ฐ: ๋ก๊ทธ ์ ์ฅ ์ ์บ์์ ๋จผ์ ๋ฐ์ด๋ฃ๊ณ ํน์ ์๊ฐ๋ง๋ค DB์ ์ ์ฅํ๋ ๊ฒฝ์ฐ
DB์ ์์ฑํ ๋๋ง๋ค ์บ์์ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ์
๋ฐ์ดํธํ๋ ๋ฐฉ์
์บ์์ ๋ฐ์ดํฐ๋ฅผ ํญ์ ์ต์ ์ํ๋ก ์ ์งํ ์ ์๋ค.
์์ฃผ ์ฌ์ฉ๋์ง ์๋ ๋ฐ์ดํฐ๊น์ง ์บ์์ ์ ์ฅ๋์ด ๋ฆฌ์์ค ๋ญ๋น์ write ์์
๋ถํ๊ฐ ๋ฐ์ํ ์ ์์ด TTL์ ์ฌ์ฉํ์ฌ ์ฌ์ฉ๋์ง ์๋ ๋ฐ์ดํฐ๋ฅผ ์ญ์ ํ๋๊ฒ์ด ์ข๋ค.
Look aside ๋ฐฉ์๊ณผ ๋น์ทํ์ง๋ง DB์์ ์ง์ Cache Store๋ฅผ ์ ๋ฐ์ดํธ ํ๋ค.
๋ ๋์ค๋ ๋ค์ํ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ง์ํ๋ค. ์๋ฃ๊ตฌ์กฐ๊ฐ Atomic ํ๊ธฐ ๋๋ฌธ์ Race Condition์ ํผํ ์ ์๋ค.(๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ ์์.)
๋ง์ด ์ฐ์ด๋ ๊ณณ
๐ ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ํํ๋ก, key - value๋ก ์ ์ฅํ๋ ํํ์ด๋ค.
์ฌ์ฉ๋ฒ
set <key> <value>
get <key>
mset <key1> <value1> <key2> <value2> ...
mget <key1> <key2> ... <keyN>
์ฒ์๊ณผ ๋์ ๋ฐ์ดํฐ๋ฅผ ๋ฃ๊ณ ๋นผ๋ ์๋๊ฐ ๋น ๋ฅด์ง๋ง ์ค๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ํ๊ฑฐ๋ ์ญ์ ํด์ผ ํ๋ ๊ฒฝ์ฐ๋ ์ฌ์ฉํ์ง ์๋๊ฒ ์ข๋ค.
Lpush <key> <A>
Rpush <key> <B>
Lpush <key> <C>
Rpush <key> <D, A>
-> Key: (C, A ,B, D, A)
LPOP <key>
RPOP <key>
๐ ๋ฐ์ดํฐ๊ฐ ์๋์ง ์๋์ง ์ฒดํฌํ๋ ์ฉ๋์ด๋ค. (ํน์ ์ ์ ๋ฅผ follow ํ๋ ๋ชฉ๋ก์ ์ ์ฅํ๋ ๊ฒฝ์ฐ ์ ๋ํฌํ value๋ฅผ ์ํด ์ฌ์ฉํ๊ธฐ ์ฉ์ด)
SADD <key> <value> # value๊ฐ ์ด๋ฏธ key์ ์์ผ๋ฉด ์ถ๊ฐx
SMEMBERS <key> # ๋ชจ๋ value๋ฅผ ๋๋ ค์ค
SISMEMBER <key> <value> # value๊ฐ ์กด์ฌํ๋ฉด 1, ์๋๋ฉด 0
๐ ๋ญํน์ ๋ฐ๋ผ์ ์์๊ฐ ๋ฐ๋๊ธธ ๋ฐ๋ ๋
์ ์ ๋ญํน ๋ณด๋๋ก ์ฌ์ฉํ ์ ์์.
ZADD <key> <score> <value>
# ํด๋น index ๋ฒ์๊ฐ ๋ชจ๋ ๋๋ ค์ค
# Zrange key 0 -1 ๋ชจ๋ ๋ฒ์
ZRANGE <key> <startindex> <endindex>
Zreverange <key> <startindex> <endindex>
ZrangeByscore
โ๏ธscore๋ double ํ์ ์ด๊ธฐ ๋๋ฌธ์ ๊ฐ์ด ์ ํํ์ง ์์ ์ ์๋ค.
key ๋ฐ์ sub key๊ฐ ์กด์ฌ
Hget <key> <subkey>
Hgetall <key>
Hmset <key> <subkey1> <value1> <subkey2> <value2>
ํ๋์ ์ปฌ๋ ์ ์ ๋๋ฌด ๋ง์ ์์ดํ ์ ๋ด์ผ๋ฉด ์ข์ง ์๋ค. -> 10000๊ฐ ์ดํ ๋ช์ฒ๊ฐ ์์ค์ผ๋ก ์ ์งํ๋๊ฒ ์ข์
Expire๋ Collection์ item ๊ฐ๋ณ๋ก ๊ฑธ๋ฆฌ์ง ์๊ณ ์ ์ฒด์ ๋ํด์ ๊ฑธ๋ฆผ
์ฆ ํด๋น 10000๊ฐ์ ์์ดํ
์ ๊ฐ์ง Collection์ expire๊ฐ ๊ฑธ๋ ค์๋ค๋ฉด ๊ทธ ์๊ฐ ํ์ 10000๊ฐ์ ์์ดํ
์ด ๋ชจ๋ ์ญ์ .
O(N) ๊ด๋ จ ๋ช ๋ น์ด๋ ์ฃผ์ํ๊ธฐ
๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ์ํ์
-> physical memory์ด์์ ์ฌ์ฉํ๋ฉด ๋ฌธ์ ๋ฐ์, swap์ด ํ๋ฒ์ด๋ผ๋ ๋ฐ์ํ๋ฉด ๊ณ์ swap์ด ์ผ์ด๋์ ํด๋น ๋ฉ๋ชจ๋ฆฌ page ์ ๊ทผ์ ๋ง๋ค ๋ฆ์ด์ง๋ค. Maxmemory๋ฅผ ์ค์ ํ๋๋ผ๋ ๋ ์ฌ์ฉํ ๊ฐ๋ฅ์ฑ์ด ํฌ๋ค.
๋ฉ๋ชจ๋ฆฌ ํํธํ๊ฐ ๋ฐ์ํ ์ ์์.
ํฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ instance ํ๋๋ณด๋ค๋ ์ ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ instance ์ฌ๋ฌ๊ฐ๊ฐ ์ด์์๋ ์์ ํ๋ค.
Spring Cache๋ AOP๋ฅผ ์ด์ฉํ์ฌ ๋ค์ํ ์บ์ ๊ธฐ๋ฅ์ ์ผ๊ด์ฑ ์๊ฒ ์ฌ์ฉํ ์ ์๋๋ก ํด์ค๋ค.
์บ์ ๋ฑ๋ก / ์กฐํ: @Cachable
๋ณดํต ๋ฉ์๋ ๋จ์๋ก ์ ์ฉํ๋ค. ์บ์์ ๋ฐ์ดํฐ๊ฐ ์์ ๊ฒฝ์ฐ์๋ ๋ฉ์๋๊ฐ ์คํ๋์ด ๋ฉ์๋ ๋ก์ง์ ์คํํ ํ ์บ์์ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ๊ณ , ์บ์ฑ ใ
๋ฐ์ดํฐ๊ฐ ์์ผ๋ฉด ์บ์์ ๋ฐ์ดํฐ๋ฅผ ๋ฐํํ๋ค.
์บ์ ์ ์ฅ: @CachePut
๋ฉ์๋์ ๋ก์ง์ ์คํํ๊ณ ์คํ๊ฒฐ๊ณผ๋ฅผ ์บ์์ ์ ์ฅํ๋ค.
์บ์ ์ญ์ : @CacheEvict
์บ์ ์ด๋ฆ์ ๋ฃ์ด์ฃผ๋ฉด ๋ฉ์๋๊ฐ ์คํ ๋ ๋ ์บ์์ ๋ด์ฉ์ด ์ ๊ฑฐ๋๋ค. ํ๋ผ๋ฏธํฐ๋ก allEntries๋ ์ ์ฒด ์บ์๋ฅผ ์ง์ธ์ง ์ฌ๋ถ๋ฅผ ์ ํํ ์ ์๋ค.