- redis๋ ๊ณ ์ฑ๋ฅ key-value๋ฐ์ดํฐ ์ ์ฅ์์ธ NoSQL(Not Only SQL)
- ๋ฌธ์์ด(string), ํด์(hash), ๋ฆฌ์คํธ(list), ์ (set), ์ ๋ ฌ๋ ์ (sorted set), ๋นํธ๋งต(bitmap), ํ์ดํผ๋ก๊ทธ๋ก๊ทธ(hyperloglog) ์ ๊ฐ์ ๊ฐ๋ ฅํ ๋ฐ์ดํฐ ํ์ ๋๋ฌธ์ ๋ฐ์ดํฐ ๊ตฌ์กฐ ์๋ฒ๋ผ๊ณ ๋ ๋ถ๋ฆฐ๋ค.
- ๋ ๋์ค๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํ๊ธฐ ๋๋ฌธ์ ์ผ๊ธฐ์ ์ฐ๊ธฐ ๋ช ๋ น์ด ๋งค์ฐ ๋น ๋ฅด๋ค.
- ๋ ๋์ค๋ ๋์คํฌ์๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ์ ์๋ค. ๋ ๋์ค ๋ฐ์ดํฐ์ ์์์ฑ(data persistance)
- help ์ปค๋งจ๋๋ ๋์๋ง์ ์ค๋ค keys ์ปค๋งจ๋๋ ํจํด๊ณผ ์ผ์นํ๋ ๋ชจ๋ ํค๋ฅผ ๋ฆฌํดํ๊ธฐ ๋๋ฌธ์ ์ ์ฉํ๋ค
- ๋ ๋์ค ๋ฐ์ดํฐ ํ์ ์ ์๋ ๋ฐฉ๋ฒ์ ์ดํดํ๋ฉด ์ํ๋ฆฌ์ผ์ด์ ์ค๊ณ๋ฅผ ์ข ๋ ์ํ ์ ์๋ค.
- ๋ ๋์ค๊ฐ ๋ง์ ๋ฐ์ดํฐ ํ์ ์ ๊ฐ์ง๊ณ ์๋ ์ด์ ๋ ๊ฐ๋จํฉ๋๋ค. ํ๋์ ํฌ๊ธฐ๋ก ๋ชจ๋ ๊ฒ์ ๋ง์กฑ์ํฌ ์ ์๊ณ , ๋ค์ํ ๋ฌธ์ ๊ฐ ์กด์ฌํ๋ ๋งํผ ๋ค์ํ ์๋ฃจ์ ์ด ํ์ํ๊ธฐ ๋๋ฌธ์ด๋ค.
- ๋ฌธ์์ด์ ๊ฐ์ฅ ๋ง์ ์ปค๋งจ๋๋ฅผ ๊ฐ์ง๋ฉฐ ์ฌ๋ฌ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉ๋๊ธฐ ๋๋ฌธ์ ๋ ๋์ค์์ ๊ฐ์ฅ ๋ค์ํ ๋ฐ์ดํฐ ํ์ ์ด๋ค.
- ๋ฌธ์์ด์ ์ ์(integer) ๋๋ ๋ถ๋์์์ (float), ํ ์คํธ ๋ฌธ์์ด, ๋นํธ๋งต ๊ฐ์ด ๊ธฐ๋ฐ์ด์ด๊ณ ์ฐ๊ด ์ปค๋งจ๋๋ฅผ ์ฌ์ฉํจ์ผ๋ก์จ ๋์ํ๋ค.
- ๋ฌธ์์ด์ ๋ฌธ์์ด์ ํ ์คํธ(XML, JSON, HTML, ์๋ฌธ ํ ์คํธ) ๋ ์ ์, ๋ถ๋์์์ , ๋ฐ์ด๋๋ฆฌ ๋ฐ์ดํฐ(๋น๋์ค, ์ด๋ฏธ์ง, ์ค๋์ค ํ์ผ) ์ ๊ฐ์ด ์ด๋ ํ ์ข ๋ฅ์ ๋ฐ์ดํฐ๋ผ๋ ์ ์ฅ ๊ฐ๋ฅ
- ๋ฌธ์์ด ๊ฐ์ ํ ์คํธ ๋๋ ๋ฐ์ด๋๋ฆฌ ๋ฐ์ดํฐ์ 512MB๋ฅผ ์ด๊ณผํ ์ ์๋ค.
- ์ฌ์ฉ ์์ : ์บ์ ๋ฉ์ปค๋์ฆ, ์๋ ๋ง๋ฃ๋๋ ์บ์, Count ๊ณ์ฐ
- Command
- MSET, MGET : Multiple Set & Get
- EXPIRE, TTL : set expire, check ttl
- TTL ์ปค๋งจ๋๋ ๋ค์์ค ํ๋๋ก ๋ฆฌํดํ๋ค.
- ์์ ์ ์ : ์ฃผ์ด์ง ํค๊ฐ ์ผ๋ง๋ ์์กดํ ์ ์๋์ง ์ด๋ก ๋ณด์ฌ์ค
- -2 : ํค๊ฐ ๋ง๋ฃ๋๊ฑฐ๋ ์กด์ฌํ์ง ์๋ ์ํ
- -1 : ํค๊ฐ ์กด์ฌํ์ง๋ง ๋ง๋ฃ ์๊ฐ์ ์ ํ์ง ์์
- TTL ์ปค๋งจ๋๋ ๋ค์์ค ํ๋๋ก ๋ฆฌํดํ๋ค.
- (Atomic) INCR, INCRBY : 1์ฉ ํน์ ์ฃผ์ด์ง ๊ฐ๋งํผ ํค๊ฐ๋ฅผ ์ฆ๊ฐ์ํค๊ณ ์ฆ๊ฐ์ํจ ๊ฐ์ ๋ฆฌํดํ๋ค.
- (Atomic) DECR, DECRBY : 1์ฉ ํน์ ์ฃผ์ด์ง ๊ฐ๋งํผ ํค๊ฐ์ ๊ฐ์์ํค๊ณ ๊ฐ์์ํจ ๊ฐ์ ๋ฆฌํดํ๋ค.
- (Atomic) INCRBYFLOAT, DECRBYFLOAT : ์ฃผ์ด์ง ๋ถ๋์์์ ๋งํผ ํค๊ฐ์ ์ค๊ฐ ํน์ ๊ฐ์์ํค๊ณ ๋ณ๊ฒฝ์ํจ ๊ฐ์ ๋ฆฌํดํ๋ค.
- Atomic Prefix๊ฐ ๋ถ์ ์ปค๋งจ๋๋ ์์์ ์ปค๋งจ๋๋ก์ ์๋ก ๋ค๋ฅธ ๋๊ฐ์ ํด๋ผ์ด์ธํธ๊ฐ ๋์ผํ ์ปค๋งจ๋๋ฅผ ๋์์ ์คํํด๋ ๋์ผํ ๊ฐ์ ์ป์ ์ ์๋ค. ์ปค๋งจ๋ ๊ฐ์๋ ์ด๋ ํ ๊ฒฝํฉ ์กฐ๊ฑด๋ ์๊ธฐ ๋๋ฌธ.
- ๋ ๋์ค๋ ํญ์ ํ ๋ฒ์ ํ๋์ ์ปค๋งจ๋๋ฅผ ์คํํ๋ ์ฑ๊ธ ์ค๋ ๋ ๊ธฐ๋ฐ์ผ๋ก ๋์ํ๊ธฐ ๋๋ฌธ์ ํญ์ ๊ฒฝํฉ ์กฐ๊ฑด์ด ๋ฐ์ํ์ง ์๋๋ค.
- ๋ฆฌ์คํธ๋ ๊ฐ๋จํ ์ฝ๋์ , ์คํ, ํ์ ๊ฐ์ด ๋์ํ ์ ์๋ ๋งค์ฐ ์ ์ฐํ ๋ฐ์ดํฐ ํ์ ์ด๋ค.
- ๋ง์ ์ด๋ฒคํธ ์์คํ ์ ํ๋ก์ ์ฌ์ฉ๋๋๋ฐ ๋ฆฌ์คํธ ์ปค๋งจ๋ ์ญ์ ์์์ ์ธ ํน์ฑ์ ๊ฐ๊ณ ์์ด ๋ณ๋ ฌ ์์คํ ์ด ํ์์ ์๋ฆฌ๋จผํธ๋ฅผ ์ป์ด๋ผ ๋ ์ค๋ณต์ผ๋ก ์ป์ง ์๋๋ก ๋ณด์ฅํด์ค๋ค.
- ๋ ๋์ค ๋ฆฌ์คํธ์ ๋ธ๋กํน ์ปค๋งจ๋๊ฐ ์กด์ฌํ๋ค. ์ฆ ํด๋ผ์ด์ธํธ๊ฐ ๋น์ด์๋ ๋ฆฌ์คํธ์ ๋ธ๋กํน ์ปค๋งจ๋๋ฅผ ์คํํ ๋, ํด๋ผ์ด์ธํธ๋ ๋ฆฌ์คํธ์ ์๋ก์ด ์๋ฆฌ๋จผํธ๊ฐ ์ถ๊ฐ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฐ๋ค๋ ์๋ฏธ๋ค.
- ๋ ๋์ค์ ๋ฆฌ์คํธ๋ Linked List ๋ผ์ ๋ฆฌ์คํธ์ ์ฒ์ ๋๋ ๊ธ์์ ์๋ฆฌ๋จผํธ์ ์ถ๊ฐ ๋ฐ ์ญ์ ๋ ํญ์ O(1), ์ผ์ ์๊ฐ์ ์ฑ๋ฅ์ ๊ฐ์ง๋ค.
- ์ฆ ๋ฆฌ์คํธ์์ ์๋ฆฌ๋จผํธ์ ์ ๊ทผํ๋ ์์ ์ O(N) ์๊ฐ์ด์ง๋ง ์ฒซ๋ฒ์งธ ๋๋ ๋ง์ง๋ง ์๋ฆฌ๋จผํธ์๋ O(1)๋ก ์ ๊ทผํ๋ค.
- ๋ฆฌ์คํธ์ ๊ฐ ์๋ฆฌ๋จผํธ๊ฐ list-max-ziplist-value ์ค์ ๊ฐ๋ณด๋ค ์๊ณ , ์๋ฆฌ๋จผํธ ๊ฐ์๊ฐ list-max-ziplist-entries ์ค์ ๊ฐ๋ณด๋ค ์์ผ๋ฉด ๋ฆฌ์คํธ๋ ์ธ์ฝ๋ ๋ ์ ์๊ณ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ต์ ํ ํ ์ ์๋ค.
- ๋ฆฌ์คํธ๊ฐ ๊ฐ์ง ์ ์๋ ์๋ฆฌ๋จผํธ์ ์ต๋ ๊ฐ์๋ 2^32-1 ์ด๋ฉฐ 40์ต๊ฐ ์ด์์ ์๋ฆฌ๋จผํธ๋ฅผ ๊ฐ์ง ์ ์๋ค.
- ๋ฆฌ์คํธ ์ค์ ์ฌ์ฉ ์์๋ ๋ค์๊ณผ ๊ฐ๋ค. ๋ ์คํ, ์ ๋ฌ๋ฆฌ, ๋ก๊ทธ์คํ์๋ฅผ ํฌํจํ ๋ง์ ํด์์ ์ฌ์ฉํ๋ค.
- ํธ์ํฐ๋ ์ฌ์ฉ์์ ์ต๊ทผ ํธ์์ ์ ์ฅํ ๋ ๋ฆฌ์คํธ๋ฅผ ์ฌ์ฉํ๋ค.
- Command
- LPUSH : ๋ฆฌ์คํธ์ ์ฒ์์ ๋ฐ์ดํฐ ์ถ๊ฐ
- RPUSH : ๋ฆฌ์คํธ์ ๋ง์ง๋ง์ ๋ฐ์ดํฐ ์ถ๊ฐ
- LLEN : ๋ฆฌ์คํธ์ ๊ธธ์ด๋ฅผ ๋ฆฌํด
- LINDEX : ์ฃผ์ด์ง ์ธ๋ฑ์ค์ ์๋ฆฌ๋จผํธ๋ฅผ ๋ฆฌํด (์ธ๋ฑ์ค๋ 0๋ถํฐ ์์), ๋ฆฌ์คํธ์ ์๋ฆฌ๋จผํธ๋ ํญ์ ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์ผ๋ก ์ ๊ทผํ๋ค. ์์๋ก ์ ๊ทผํ ์ ์๋ค. -1์ ๋ฆฌ์คํธ์ ๋, -2๋ ๋ฆฌ์คํธ์ ๋์์ ๋๋ฒ์งธ ์๋ฆฌ๋จผํธ๋ฅผ ๊ฐ๋ฆฌํจ๋ค.
- LRANGE : ์์๊ณผ ๋ ์ธ๋ฑ์ค๋ฅผ ํฌํจ์์ผ ์ฃผ์ด์ง ์ธ๋ฑ์ค ๋ฒ์์ ์๋ ๋ชจ๋ ์๋ฆฌ๋จผํธ ๊ฐ์ ๋ฐฐ์ด๋ก ๋ฆฌํดํ๋ค. ์ธ๋ฑ์ค๋ 0๋ถํฐ ์์ํ๊ณ ์์๋ ์์๊ฐ ๋ ์ ์๋ค.
- LPOP : ๋ฆฌ์คํธ์ ์ฒซ ์๋ฆฌ๋จผํธ๋ฅผ ์ญ์ ํ๊ณ ๋ฆฌํด
- RPOP : ๋ฆฌ์คํธ์ ๋ง์ง๋ง ์๋ฆฌ๋จผํธ๋ฅผ ์ญ์ ํ๊ณ ๋ฆฌํด
- BLPOP, BRPOP : LPOP๊ณผ RPOP์ blockingํ๋ฉด์ ๊ธฐ๋ค๋ฆฐ๋ค.
- ์ด๋ฅผ ์ด์ฉํด์ Message Queue์ฒ๋ผ ์ด์ฉ ๊ฐ๋ฅ
- ํด๋น ๋ถ๋ถ ํ ์คํธ https://spring.io/guides/gs/messaging-redis/ ์์ ํ์ธ ๊ฐ๋ฅ
- ํด์๋ ํ๋๋ฅผ ๊ฐ์ผ๋ก ๋งคํํ ์ ์๊ธฐ ๋๋ฌธ์ ๊ฐ์ฒด๋ฅผ ์ ์ฅํ๋๋ฐ ํ๋ฅญํ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ค.
- ํด์๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํจ์จ์ ์ผ๋ก ์ธ ์ ์๊ณ , ๋ฐ์ดํฐ๋ฅผ ๋นจ๋ฆฌ ์ฐพ์ ์ ์๊ฒ ์ต์ ํ ๋์ด ์๋ค.
- ํด์์์ ํ๋ ์ด๋ฆ๊ณผ ๊ฐ์ ๋ฌธ์์ด ์ด๋ค. ๋ฐ๋ผ์ ํด์๋ ๋ฌธ์์ด์ ๋ฌธ์์ด๋ก ๋งคํํ๋ค.
- hash-max-ziplist-entries, hash-max-ziplist-value ์ค์ ์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ค. (๋ค์ ์ค๋ช ํจ)
- ํด์๋ ๋ด๋ถ์ ์ผ๋ก ziplist ์ hash table์ด ๋ ์ ์๋ค.
- ziplist๋ ๋ฉ๋ชจ๋ฆฌ ํจ์จํ์ ๋ชฉ์ ์ ๋ ์์ชฝ์ผ๋ก ์ฐ๊ฒฐ๋ ๋ฆฌ์คํธ์ด๋ค.
- ziplist์๋ ์ ์๋ฅผ ์ผ๋ จ์ ๋ฌธ์๋ก ์ ์ฅํ์ง ์๊ณ ์ค์ ์ ์์ ๊ฐ์ผ๋ก ์ ์ฅํ๋ค.
- ziplist๊ฐ ๋ฉ๋ชจ๋ฆฌ ์ต์ ํ๊ฐ ๋ผ ์๋ค ํ ์ง๋ผ๋ ์ผ์ ํ ์๊ฐ ๋ด๋ก ๊ฒ์์ด ์ํ ๋์ง๋ ์๋๋ค.
- hash table์์๋ ์ผ์ ํ ์๊ฐ ๋ด๋ก ๊ฒ์์ ๋์ง๋ง ๋ฉ๋ชจ๋ฆฌ ์ต์ ํ๊ฐ ์ด๋ฃจ์ด์ง์ง ์๋๋ค.
- Command
- HSET HMSET : ํค๋ก ๊ฐ ๋ฑ๋ก (single, multiple)
- HGET HMGET : ํค๋ก ๊ฐ ์กฐํ (single, multiple)
- HINCR, HINCRBY, HDECR, HDECRBY, HINCRBYFLOAT, HDECRBYFLOAT : ์ฃผ์ด์ง ์ ์ ํน์ ๋ถ๋์์์ ๋งํผ ํ๋๋ฅผ ์ฆ๊ฐ ๊ฐ์ ์ํด. (HINCR, HDECR์ 1์ฉ ์ฆ๊ฐ ๊ฐ์)
- HDEL : ํด์์์ ํ๋๋ฅผ ์ญ์
- HGETALL : ๋ชจ๋ ํ๋ ์กฐํ
- HKEYS : ๋ชจ๋ ํ๋ key ์กฐํ
- HVALS : ๋ชจ๋ ํ๋ value ์กฐํ
- ์์๊ฐ ์๊ณ ๋์ผํ ๋ฌธ์์ด์ด ์๋ ์ฝ๋ ์
- ์ผ๋ถ ์ปค๋งจ๋(์๋ฆฌ๋จผํธ ์ถ๊ฐ ๋ฐ ์ญ์ , ๊ฒ์์ ์ฑ๋ฅ ์๋๋ ํญ์ O(1)์ด๋ค)๋ฅผ ์ต์ ํํด์ผ ํ๊ธฐ ๋๋ฌธ์ ํด์ ํ ์ด๋ธ๋ก ๊ตฌํ
- ์ ์ ๋ชจ๋ ์๋ฆฌ๋จผํธ ๊ฐ์ด ์ ์(integer)๋ฉด ์ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ์ค์ด๋ค๊ณ ์ ์ฒด ์๋ฆฌ๋จผํธ ๊ฐฏ์๋ set-max-intset-entries ์ค์ ๊ฐ๋งํผ ์ปค์ง ์ ์๋ค.
- ์ ์ด ๊ฐ์ง ์ ์๋ ์๋ฆฌ๋จผํธ์ ์ต๋ ๊ฐ์๋ 2^32-1 ์ด๋ค. ์ฆ, ํ ์ ์ 40์ต๊ฐ ์ด์์ ์๋ฆฌ๋จผํธ๋ฅผ ์ ์ฅํ ์ ์๋ค.
- ์ ์ ๋ฐ์ดํฐ ํํฐ๋ง, ๋ฐ์ดํฐ ๊ทธ๋ฃนํ, ์๋ฆฌ๋จผํธ์ญ ํ์ธ ๋ฑ์ ์ฌ์ฉํ๊ธฐ ์ข๋ค
- Command
- SADD : ์ ์ ํ๋ ์ด์์ ์๋ฆฌ๋จผํธ๋ฅผ ์ถ๊ฐํใท.
- SINTER : ํ๋ ์ด์์ ์ ์ ๋ฐ์ ๋ชจ๋ ์ ์ ๊ณตํต์ผ๋ก ์กด์ฌํ๋ ์๋ฆฌ๋จผํธ๋ฅผ ๋ฐฐ์ด๋ก ๋ฆฌํด
- SDIFF : ํ๋ ์ด์์ ์ ์ ๋ฐ๊ณ ์ฒซ๋ฒ์งธ ์ ์ ๋ชจ๋ ์๋ฆฌ๋ฉํธ์ค ๊ทธ ๋ค์ ๋ฐ๋ฅด๋ ์ ์ ์กด์ฌํ์ง ์๋ ์๋ฆฌ๋ฉํฐ๋ฅผ ๋ฐฐ์ด๋ก ๋ฆฌํด
- SUNION : ํ๋ ์ด์์ ์ ์ ๋ฐ๊ณ ๋ชจ๋ ์ ์ ์๋ฆฌ๋จผํธ๋ฅผ ํ๋๋ก ๋ชจ์ ๋ฆฌํดํ๋ค. ๋ฆฌํด๋ ๊ฒฐ๊ณผ์๋ ์ค๋ณต๋ ์๋ฆฌ๋จผํธ๊ฐ ์กด์ฌํ์ง ์๋๋ค.
- SRANDMEMBER : ์ ์์ ์๋ฆฌ๋จผํธ๋ฅผ ๋ฌด์์๋ก ๋ฝ์ ํ ๋ฆฌํดํ๋ค.
- SISMEMBER : ์ ์ ์๋ฆฌ๋จผํธ๊ฐ ์กด์ฌํ๋์ง ํ์ธํ๋ค.
- SREM : ์ฃผ์ด์ง ์๋ฆฌ๋จผํธ๋ฅผ ์ ์์ ์ญ์ ํ ํ ์ ์ ๋จ์์๋ ์๋ฆฌ๋จผํธ์ ๊ฐ์๋ฅผ ๋ฆฌํดํ๋ค.
- SCARD : ์ ์ ์๋ฆฌ๋จผํธ ๊ฐฏ์๋ฅผ ๋ฆฌํดํ๋ค. (cardinality)
- SMEMBERS : ์ ์ ๋ชจ๋ ์๋ฆฌ๋จผํธ๋ฅผ ๋ฐฐ์ด๋ก ๋ฆฌํด
- ์ ๋ ฌ๋ ์ ์ ์ ๊ณผ ๋น์ทํ์ง๋ง, ์ ๋ ฌ๋ ์ ์ ๋ชจ๋ ์๋ฆฌ๋จผํธ๋ ์ฐ๊ด ์ ์ ๋ฅผ ๊ฐ์ง๋ค.
- ์ฆ sorted set์ ์ ์๋ก ์ ๋ ฌ๋, ์ค๋ณต ๋ฌธ์์ด์ด ์๋ ์ฝ๋์ ์ด๋ค.
- ๋ฐ๋ณต ์ ์๋ฅผ ๊ฐ์ง ์๋ฆฌ๋จผํธ๋ฅผ ๊ฐ์ง ์ ์๋ค. ์ด๋ฐ ๊ฒฝ์ฐ์ ๋ฐ๋ณต ์๋ฆฌ๋จผํธ๋ฅผ ์ฌ์ ํธ์ง ์์๋๋ก ์ ๋ ฌํ ์ ์๋ค.
- ์ ๋ ฌ๋ ์ ์ปค๋งจ๋๋ ๋น ๋ฅธ ํธ์ด์ง๋ง ์ ์๋ก ์๋ฆฌ๋จผํธ๋ฅผ ๋น๊ตํด์ผ ํ๊ธฐ ๋๋ฌธ์ ์ ์ปค๋งจ๋๋ณด๋ค ๋น ๋ฅด์ง ์๋ค.
- ์ ๋ ฌ๋ ์ ์์ ์๋ฆฌ๋จผํธ์ ์ถ๊ฐ ๋ฐ ์ญ์ , ๋ณ๊ฒฝ ์ฑ๋ฅ์ O(logN)์ด๋ฉฐ ์ฌ๊ธฐ์ N์ ์ ๋ ฌ๋ ์ ์ ์๋ฆฌ๋จผํธ ๊ฐ์๋ค.
- ์ ๋ ฌ๋ ์
์ ๋ด๋ถ ๊ตฌํ์ 2๊ฐ์ ๋ถ๋ฆฌ๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ก ๋์ด ์๋ค.
- skiplist : ์์๋๋ก ์ ๋ ฌ๋ ์๋ฆฌ๋จผํธ๋ฅผ ๋น ๋ฅด๊ฒ ๊ฒ์
- ziplist : zset-max-ziplist-entries์ zset-max-ziplist-value ์ค์ ์ ๊ธฐ๋ฐ์ผ๋ก ํจ
- sorted set์ ๊ณ ๊ฐ ์๋น์ค ์ค์๊ฐ ๋๊ธฐ ๋ชฉ๋ก ๋ง๋ค๊ธฐ, ์๋ฐฑ๋ง๊ฐ์ ๋จ์ด๋ฅผ ์ฌ์ฉํ๋ ์๋ ์์ฑ ์์คํ ๋ง๋ค๊ธฐ ๋ฑ์์ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.
- Command
- ZADD : sorted set์ ํ๋ ์ด์์ ์๋ฆฌ๋จผํธ ์ถ๊ฐ, ๋ง์ฝ ํด๋น ์๋ฆฌ๋จผํธ๊ฐ ์ด๋ฏธ ์กด์ฌํ๋ฉด ๋ฌด์ํ๊ณ ์ถ๊ฐ๋ ์๋ฆฌ๋จผํธ์ ๊ฐ์๋ฅผ ๋ฆฌํด
- ZRANGE, ZRANGEBYLEX, ZRANGEBYSCORE, ZREVRANGE, ZREVRANGEBYLEX, ZREVRANGEBYSCORE : ๋ฒ์๋ฅผ ์ฝ์ด์ค๋๋ฐ ์ฌ์ฉ
- WITHSCORES : ๋ฒ์ ์ปค๋งจ๋์ ์ต์ , ์๋ฆฌ๋จผํธ์ ์ ์๋ฅผ ํจ๊ป ๋ฆฌํด
- ZREM : ์ ๋ ฌ๋ ์ ์์ ์๋ฆฌ๋จผํธ๋ฅผ ์ญ์
- ZSCORE : ์๋ฆฌ๋จผํธ์ ์ ์๋ฅผ ๋ฆฌํดํ๋ค.
- ZRANK : ๋ฑ์๊ฐ ๋ฎ์ ์์ผ๋ก ์ ๋ ฌ๋ ์๋ฆฌ๋จผํธ์ ๋ฑ์๋ฅผ ๋ฆฌํดํ๋ค.
- ZREVRANK : ๋ฑ์๊ฐ ๋์ ์์์ ๋ฎ์ ์์ผ๋ก ์ ๋ ฌ๋ ์๋ฆฌ๋จผํธ์ ๋ฑ์๋ฅผ ๋ฆฌํดํ๋ค.
- ๋นํธ๋งต์ ๋ ๋์ค์ ์ค์ ๋ฐ์ดํฐ ํ์ ์ด ์๋๋ค. ๋ด๋ถ์ ์ผ๋ก ๋นํธ๋งต์ ๋ฌธ์์ด ์ด๋ค.
- ๋นํธ๋งต์ ๋ฌธ์์ด์ bit ์ฐ์ฐ์ ์งํฉ ์ด๋ผ๊ณ ๋งํ ์ ์๋ค.
- ๊ทธ๋ฌ๋ ๋ ๋์ค๋ ๋ฌธ์์ด์ ๋นํธ๋งต์ผ๋ก ์ ์ดํ ์ ์๋ ์ปค๋งจ๋๋ฅผ ์ ๊ณตํ๊ธฐ ๋๋ฌธ์, ๋นํธ๋งต์ ๋ฐ์ดํฐ ํ์ ์ ๊ฐ์ฃผ ํ๋ค.
- ๋นํธ๋งต์ ๋นํธ ๋ฐฐ์ด(bit array) ๋๋ ๋ฐฐํธ ์ (bit set)์ผ๋ก ์๋ ค์ ธ ์๋ค.
- ๋นํธ๋งต์ ๊ฐ๋ณ ๋นํธ๋ฅผ 0 ๋๋ 1๋ก ์ ์ฅํ ์ ์๋ ๋นํธ ์ด์ด๋ค.
- ๋นํธ๋งต์ 0๊ณผ 1๋ก ๊ตฌ์ฑ๋ ๋ฐฐ์ด๋ก ์๊ฐํ ์ ์๋ค.
- ๋ ๋์ค ๋ฌธ์๋ ๋นํธ๋งต ์ธ๋ฑ์ค๋ฅผ ์คํ์ ์ผ๋ก ๋ํ๋ธ๋ค.
- ์ ํ๋ฆฌ์ผ์ด์ ๋๋ฉ์ธ์ ๊ฐ๋ณ ๋นํธ๋งต ์ธ๋ฑ์ค๊ฐ ๋ฌด์์ ์๋ฏธํ๋์ง ์ง์ํ๋ค.
- ๋นํธ๋งต์ ๋ฉ๋ชจ๋ฆฌ ํจ์จ์ด ์ข๊ณ ๋น ๋ฅธ ๊ฒ์์ ์ง์ํ๋ฉฐ, 2^32๋นํธ (40์ต๋นํธ ์ด์)๊น์ง ์ ์ฅํ ์ ์๋ค.
- true false๊ฐ์ ๋จ์ํ ์ ์ฅํ ๋ ์ธ๋งํ๋ค
- Command
- SETBIT : ๋นํธ๋งต ์คํ์ ์ ๊ฐ์ ์ ์ฅ
- GETBIT : ๋นํธ๋งต ์คํ์ ๊ฐ์ ๋ฆฌํด
- BITCOUNT: ๋นํธ๋งต์ 1๋ก ํ์๋ ๋ชจ๋ ๋นํธ์ ๊ฐ์๋ฅผ ๋ฆฌํด
- BITOP : ๋์ ํค, ๋นํธ ์ฐ์ฐ, ํด๋น ์ฐ์ฐ์ ์ ์ฉํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ๋์ ํค์ ์ ์ฅํ ํค ๋ชฉ๋ก (OR, AND, XOR, NOT)
- ๋ ๋์ค์ ์ค์ ๋ฐ์ดํฐ ํ์ ์ด ์๋๋ค. ํ์ดํผ๋ก๊ทธ๋ก๊ทธ๋ ๊ฐ๋ ์ ์ผ๋ก๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.
- ์ ์ ์กด์ฌํ๋ ๊ณ ์ ์๋ฆฌ๋จผํธ ๊ฐ์๋ฅผ ์์ฃผ ์ข์ ๊ทผ์ฌ์น ๋ก ์ ๊ณตํ๊ธฐ ์ํด ํ๋ฅ ํ๋ฅผ ์ฌ์ฉํ๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.
- ํ๋์ ํค๋น ์์ฃผ ์์ ๋ฉ๋ชจ๋ฆฌ(์ต๋12KB)๋ฅผ ์ฌ์ฉํ๋ฉฐ, ํญ์ O(1)๋ก๋ง ๋์ํ๊ธฐ ๋๋ฌธ์ ๋งค๋ ฅ์ ์ด๋ค.
- ๊ธฐ์ ์ ์ผ๋ก๋ ํ์ดํผ๋ก๊ทธ๋ก๊ทธ๊ฐ ์ค์ ๋ฐ์ดํฐ ํ์ ์ด ์๋์ง๋ผ๋, ๋ ๋์ค๋ ํ์ดํผ๋ก๊ทธ๋ก๊ทธ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํด ์ ์ ๊ฐ์๋ฅผ ๊ณ์ฐํ๊ธฐ ์ํ ๋ฌธ์์ด ์ ์ดํ๋ ์ปค๋ฉ๋๋ฅผ ์ ๊ณตํ๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐํ์ ์ฒ๋ผ ๋ค๋ฃฐ๊ฒ์ด๋ค.
- ํ์ดํผ๋ก๊ทธ๋ก๊ทธ๋ 100%์ ์ ํ๋๋ฅผ ๋ณด์ฅํ์ง ์๋ ํ๋ฅ ์ ์ธ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.
- ํ์ดํผ๋ก๊ทธ๋ก๊ทธ์ ๋ ๋์ค ๊ตฌํ์ 0.81ํผ์ผํธ์ ํ์ค์ค์ฐจ๋ฅผ ๊ฐ์ง๋ค.
- ์ด๋ก ์ ์ ์ ์๋ ์ ์ ๊ฐ์ ์ ํ์ ์ฌ์ค ์๋ค.
- ํ์ดํผ๋ก๊ทธ๋ก๊ทธ ๋ ผ๋ฌธ(Philippe Flajolet, Eric Fusy, Oliver Gandouet, Frederic Meunier์ ๊ณต๋๋๋ฌธ 'The analysis of a newar-optiomal cardinality estimation algorithm)์์ ํ์ดํผ๋ก๊ทธ๋ก๊ทธ ์๊ณ ๋ฆฌ์ฆ์ด ์ฒ์์ผ๋ก๏ฟฝ ์ค๋ช ๋๋ค.
- ํ์ดํผ๋ก๊ทธ๋ก๊ทธ์๋ PFADD, PFCOUNT, PFMERGE ์ธ ๊ฐ์ ์ปค๋งจ๋๋ง ์กด์ฌํ๋ค.
- ์ข ์ข ๊ณ ์ ๊ฐ์๋ฅผ ๊ณ์ฐํ๊ธฐ ์ํด, ํ์ฌ ๊ณ์ฐ ์ค์ธ ์ ์ ์๋ฆฌ๋จผํธ ์์ ๋น๋กํ๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์์ด์ผ ํ๋ค.
- ํ์ดํผ๋ก๊ทธ๋ก๊ทธ๋ ์ข์ ์ฑ๋ฅ, ๋ฎ์ ๊ณ์ฐ ๋น์ฉ, ์ ์ ๋ฉ๋ชจ๋ฆฌ ์์ผ๋ก ํด๋น ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ค.
- ๊ทธ๋ฌ๋ ํ์ดํผ๋ก๊ทธ๋ก๊ทธ๋ 100ํผ์ผํธ ์ ํํ์ง๋ ์๋ค. ๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ ์ผ๋ถ ์ํฉ์์๋ 99.19ํผ์ผํธ์ ๋๋ผ๋ฉด ์ถฉ๋ถํ ๊ด์ฐฎ์ ์ ์๋ค.
- ํ์ดํผ๋ก๊ทธ๋ก๊ทธ๋ ์น์ฌ์ดํธ ๊ณ ์ ๋ฐฉ๋ฌธ์ ์ ๊ณ์ฐ, ํน์ ๋ ์ง ๋๋ ์๊ฐ์ ์น์ฌ์ดํธ์์ ๊ฒ์ํ ๊ณ ์ ํค์๋ ๊ฐ์ ๊ณ์ฐ, ์ฌ์ฉ์๊ฐ ์ฌ์ฉํ ๊ณ ์ ํด์ํ๊ทธ ๊ฐ์ ๊ณ์ฐ, ์ฑ ์ ๋์ค๋ ๊ณ ์ ๋จ์ด ๊ฐ์ ๊ณ์ฐ ๋ฑ์ ์ฐ์ด๋ฉด ์ข๊ฒ ๋ค.
- Command
- PFADD : ํ๋ ์ด์์ ๋ฌธ์์ด์ ํ์ดํผ๋ก๊ทธ๋ก๊ทธ์ ์ถ๊ฐํ๋ค.
- ํ์ดํผ๋ก๊ทธ๋ก๊ทธ์ ๊ฐ์(cardinality)๊ฐ ๋ณ๊ฒฝ๋๋ฉด 1์ ๋ฆฌํดํ๊ณ , ๋ณ๊ฒฝ๋์ง ์์ผ๋ฉด 0์ ๋ฆฌํดํ๋ค.
- PFCOUNT : ํ๋ ์ด์์ ํค๋ฅผ ๋งค๊ฒ ๋ณ์๋ก ๋ฐ๊ณ , ๊ทผ์ฌ์น ๊ฐ์๋ฅผ ๋ฆฌํดํ๋ค.
- ๋ค์ค ํค๋ฅผ ๋ช ์ธํ๋ฉด ๊ณ ์ ์๋ฆฌ๋จผํธ ๊ฐ์๋ฅผ ๊ณ์ฐํ๊ธฐ ์ํด ๊ทผ์ฌ์น ๊ฐ์๋ก ๋ฆฌํดํ๋ค.
- PFMERGE : ๋์ํค์ ํ๋ ์ด์์ ํ์ดํผ๋ก๊ทธ๋ก๊ทธ ํค๋ฅผ ๋งค๊ฒ๋ณ์๋ก ๋ฐ์์ผ ํ๋ฉฐ, ๋ชจ๋ ํ์ดํผ๋ก๊ทธ๋ฅผ ๋ณํฉํ๊ณ , ๋ณํฉํ ๊ฒฐ๊ณผ๋ฅผ ๋์ ํค์ ์ ์ฅํ๋ค.
- PFADD : ํ๋ ์ด์์ ๋ฌธ์์ด์ ํ์ดํผ๋ก๊ทธ๋ก๊ทธ์ ์ถ๊ฐํ๋ค.
- Pub/Sub๋ ๋ฉ์์ง๋ฅผ ํน์ ์์ ์์๊ฒ ์ง์ ๋ฐ์กํ์ง ๋ชปํ๋ ๊ณณ์์ ์ฐ์ด๋ ํจํด
- Publish-Subscribe์ ์ฝ์์ด๋ค.
- Publisher์ Subscriber๊ฐ ํน์ ์ฑ๋์ ๋ฆฌ์ค๋ ํ๊ณ ์๋ค๋ฉด Publisher๋ ์ฑ๋์ ๋ฉ์์ง๋ฅผ ๋ณด๋ด๊ณ , ๊ตฌ๋ ์๋ ๋ฐ์ก์์ ๋ฉ์์ง๋ฅผ ๋ฐ๋๋ค.
- redis๋ Pub/Sub ํจํด ์ ์ง์ํ๊ณ , ๋ฉ์์ง๋ฅผ ๋ฐ์กํ๊ณ ์ฑ๋์ ๊ตฌ๋ ํ๋ ์ปค๋งจ๋๋ฅผ ์ ๊ณตํ๋ค.
- Pub/Sub ์ ํ๋ฆฌ์ผ์ด์ ์์ : ๋ด์ค์ ๋ ์จ ๋์๋ณด๋, ์ฑํ , ์งํ์ฒ ์ง์ฐ ๊ฒฝ๊ณ , SaltStack ํด์ด ์ง์ํ๋ ๊ฒ๊ณผ ์ ์ฌํ ๋ฆฌ๋ชจํธ ์ฝ๋์ ์คํ
- Command
- PUBLISH : ๋ฉ์์ง๋ฅผ ๋ ๋์ค ์ฑ๋์ ๋ณด๋ด๊ณ ๋ฉ์์ง๋ฅผ ๋ฐ์ ํด๋ผ์ด์ธํธ ์๋ฅผ ๋ฆฌํด.
- SUBSCRIBE : ํด๋ผ์ด์ธํธ๊ฐ ํ๋ ์ด์์ ์ฑ๋์ ๊ตฌ๋ ํ๋ค.
- UNSUBSCRIBE : ํ๋ ์ด์์ ์ฑ๋์์ ํด๋ผ์ด์ธํธ๋ฅผ ๊ตฌ๋ ํด์งํ๋ค.
- PSUBSCRIBE์ PUNSUBSCRIBE ์ปค๋งจ๋๋ SUBSCRIVE์ UNSUBSCRIBE์ ๋์ผํ๊ฒ ์๋ํ์ง๋ง ์ฑ๋ ์ด๋ฆ์ GLOB ํํ๋ก ๋ฐ๋๋ค.
- ๋ ๋์ค ํด๋ผ์ด์ธํธ๊ฐ SUBSCRIBE๋ PSUBSCRIBE ์ปค๋งจ๋๋ฅผ ์คํํ๋ค๋ฉด ๊ตฌ๋ ๋ชจ๋์ ๋ค์ด๊ฐ๊ธฐ ๋๋ฌธ์ SUBSCRIBE, PSUBSCRIBE, UNSUBSCRIBE, PUNSUBSCRIBE ์ธ์ ๋ค๋ฅธ ์ปค๋งจ๋๋ฅผ ๋ฐ์ง ์๋๋ค.
- PUBSUB : ๋ ๋์ค์ PUB/SUB์์คํ
์ ์ํ๋ฅผ ์กฐ์ฌํ๋ค.
- 3๊ฐ์ ํ์ ์ปค๋งจ๋ CHANNELS, NUMSUB, NUMPAT๋ฅผ ๋ฐ๋๋ค.
- PUBSUB CHANNELS [pattern] : ๋์์ค์ธ ๋ชจ๋ ์ฑ๋(์ต์ ํ๋์ ๊ตฌ๋ ์ ์กด์ฌ)์ ๋ฆฌํดํ๋ค./
- PUBSUB NUMSUB [channel-1, channel-2...] : ์ ์ํ ํด๋ผ์ด์ธํธ์ ๊ฐ์๋ฅผ ๋ฆฌํดํ๋ค.
- PUBSUB NUMPAT : PSUBSCRIBE ์ปค๋งจ๋๋ฅผ ํตํด ์ ์ํ ํด๋ผ์ด์ธํธ์ ๊ฐ์๋ฅผ ๋ฆฌํดํ๋ค.
- ๋ ๋์ค์ ํธ๋์ญ์ ์ ์์๋๋ก ์์์ ์ผ๋ก ์คํ๋๋ ์ปค๋งจ๋์ ์ด ์ด๋ค.
- MULTI, EXEC
- MULTI ์ปค๋งจ๋๋ ํธ๋์ญ์ ์ ์์์ ํ์ํ๊ณ , EXEC ์ปค๋งจ๋๋ ํธ๋์ญ์ ์ ๋ง์ง๋ง์ ํ์ํ๋ค.
- MULTI์ EXEC ์ปค๋งจ๋ ๊ฐ์ ๋ชจ๋ ์ปค๋งจ๋๋ ์ง๋ ฌํ๋๋ฉฐ ์์์ ์ผ๋ก ์คํ๋๋ค.
- ๋ ๋์ค๋ ํธ๋์ญ์ ์ ์ฒ๋ฆฌ ๋์ค์ ๋ค๋ฅธ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ์ํ์ง ์๋๋ค.
- ํธ๋์ญ์ ์ ๋ชจ๋ ์ปค๋งจ๋๋ ํด๋ผ์ด์ธํธ์ ํ์ ์์ด๊ณ , EXEC ์ปค๋งจ๋๊ฐ ์คํ๋๋ฉด์ ์๋ฒ๋ก ์ ๋ฌ๋๋ค.
- EXEC ์ปค๋งจ๋ ๋์ DISCARD ์ปค๋งจ๋๋ฅผ ์ฌ์ฉํ๋ฉด, ํธ๋์ญ์ ์ ์คํ๋์ง ์๋๋ค.
- ๊ธฐ์กด์ SQL ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฌ๋ฆฌ, ๋ ๋์ค์ ํธ๋์ญ์ ์ ํธ๋์ญ์ ๊ณผ์ ์ ์คํํ๋ค ์คํจํ๋๋ผ๋ ๋กค๋ฐฑํ์ง ์๋๋ค.
- ๋ ๋์ค๋ ํธ๋์ญ์ ์ ์ปค๋งจ๋๋ฅผ ์์๋๋ก ์คํํ๊ณ , ์ปค๋งจ๋ ์ค ์ผ๋ถ๊ฐ ์คํจํ๋ฉด ๋ค์ ์ปค๋งจ๋๋ก ์ฒ๋ฆฌํ๋ค.
- ๋ ๋์ค ํธ๋์ญ์ ์ ๋จ์ ์ ๋ชจ๋ ์ปค๋งจ๋๊ฐ ํ์ ์์ด๊ธฐ ๋๋ฌธ์, ํธ๋์ญ์ ๋ด๋ถ์์ ์ด๋ ํ ๊ฒฐ์ ๋ ๋ด๋ฆด ์ ์๋ค๋ ์ ์ด๋ค.
- WATCH, UNWATCH
- ํค ๊ทธ๋ฃน์ ๋๊ด์ ์ก๊ธ(Optimistic Lock)์ ๊ตฌํํ WATCH ์ปค๋งจ๋๋ฅผ ์ฌ์ฉํด ํธ๋์ญ์ ์ ์กฐ๊ฑด๋ถ๋ก ์คํํ ์ ์๋ค.
- WATCH๊ฐ ์ปค๋งจ๋๋ ์ฃผ์๋ฐ๋ ํค๋ฅผ ํ์ํ๊ณ ์ฃผ์๋ฐ๋ ํค๊ฐ ๋ณ๊ฒฝ๋์ง ์์ผ๋ฉด EXEC ์ปค๋งจ๋๋ ํธ๋์ญ์ ๋ง ์คํํ๋ค.
- ์ฃผ์๋ฐ๋ ํค๊ฐ ๋ณ๊ฒฝ๋๋ฉด null์ ๋ฆฌํดํ๊ณ , ํด๋น ์ปค๋งจ๋๋ฅผ ๋ค์ ์คํ์์ผ์ผ ํ๋ค.
- UNWATCH ์ปค๋งจ๋๋ ์ฃผ์๋ชฉ๋ก์ ์๋ ํค๋ฅผ ์ ๊ฑฐํ๋ค.
(node์์ ๋ฉํฐ exec ํธ๋์ ์
ํ
์คํธ sources/transaction/bank-transaction.js)
(node์์ watch ํธ๋์ ์
ํ
์คํธ sources/transaction/watch-transaction.js)
- ๋ ๋์ค์์ ํ์ดํ๋ผ์ธ์ ๋ค์ค ์ปค๋งจ๋๋ฅผ ๋ ๋์ค ์๋ฒ์ ํ๊บผ๋ฒ์ ๋ณด๋ด๋ ๋ฐฉ๋ฒ ์ ๋งํ๋ฉฐ, ๊ฐ๋ณ ์๋ต์ ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ํด๋ผ์ด์ธํธ์ ์ํด ์๋ต์ ํ๊บผ๋ฒ์ ์ฝ์ ์ ์๋ค.
- ๋ ๋์ค ํด๋ผ์ด์ธํธ๊ฐ ์ปค๋งจ๋๋ฅผ ๋ณด๋ด๊ณ ๋ ๋์ค ์๋ฒ๋ก๋ถํฐ ์๋ต์ ๋ฐ๋๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ Round Trip Time(RTT) ๋ผ๊ณ ํ๋ค.
- ๋ค์ค ์ปค๋งจ๋๋ฅผ ๋ ๋์ค๋ก ๋ณด๋ด๋ฉด ๋ค์ค RTT๊ฐ ์กด์ฌํ๋ค.
- ํ์ดํ๋ผ์ธ์ ํ์ฉํ๋ฉด ์ด RTT ๊ฐ์ ์ค์ผ ์ ์๋ค. (10๊ฐ์ ์ปค๋งจ๋๋ฅผ ํ๊บผ๋ฒ์ ๋ณด๋ด๋ฉด 10RTT๊ฐ ์๋ 1RTT๊ฐ ๊ฑธ๋ฆฐ๋ค.)
- ์ฆ ๋ ๋์ค ๋คํธ์ํฌ ์ฑ๋ฅ์ ํ์ฐํ ๊ฐ์ ํ ์ ์๋ค.
- ํ์ดํ๋ผ์ธ์ผ๋ก ์ ๋ฌ๋ ๋ ๋์ค ์ปค๋งจ๋๋ ๋
๋ฆฝ์ ์ด์ด์ผ ํ๋ค.
- ๋ ๋์ค ์ปค๋งจ๋๋ ์๋ฒ์์ ์์ฐจ์ ์ผ๋ก ์คํ๋์ง๋ง, ํธ๋ ์ญ์ ์ฒ๋ฆฌ๊ฐ ๋์ง ์๋๋ค.
- ํ์ดํ๋ผ์ธ์ด ์ ํ ํธ๋์ญ์ ์ ์ด๊ฑฐ๋ ์์์ ์ด์ง ์๋ค๊ณ ํด๋(์๋ก ๋ค๋ก ๋ ๋์ค ์ปค๋งจ๋๊ฐ ํ๋์ ํ์ดํ๋ผ์ธ์์ ์คํ๋จ) ๋ถํ๊ฐ ๋์ ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋คํธ์ํฌ ๋ณ๋ชฉ ํ์์ ๋ฐ์์ํค๋ ๋ถ๋ถ ๋ฑ์ ๊ฐ์ ํ๋๋ฐ์๋ ์ฌ์ ํ ์ ์ฉํ๋ค.
- ํ์ฌ ์ด์ฉ์ค์ธ node_redis ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ํ์ดํ๋ผ์ธ์ ์ด์ฉํ์ฌ ์ปค๋งจ๋๋ฅผ ๋ณด๋ธ๋ค.
- ํ์ง๋ง ๋ค๋ฅธ ํด๋ผ์ด์ธํธ๋ค์ ํ์ดํ๋ผ์ธ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฌ์ฉํ์ง ์๊ธฐ ๋๋ฌธ์ ์ด ๋ถ๋ถ์ ์ดํด๋ณผ ํ์๊ฐ ์๋ค.
- ๋ ๋์ค์์ ๋ฃจ์ ์คํฌ๋ฆฝํธ๊ฐ ์คํ๋ ์ ์๋ค.
- ๋ฃจ์ ์คํฌ๋ฆฝํธ๋ ์์์ ์ผ๋ก ์คํ๋๋ค, ์ฆ ๋ ๋์ค ์๋ฒ์์ ๋ฃจ์ ์คํฌ๋ฆฝํธ๊ฐ ์คํ๋๋ ๋์ ๋ ๋์ค ์๋ฒ๋ ๋ธ๋ก๋๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค.
- ์ด๋ฐ ์ด์ ๋ก ๋ ๋์ค๋ ๋ฃจ์ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ๊ธฐ ์ํด ๊ธฐ๋ณธ 5์ด์ ํ์์์์ ๊ฐ์ง๋ค.
- lua-tim-limit ์ค์ ์ ์์ ํด ๋ฃจ์ ์คํฌ๋ฆฝํธ์ ํ์์์ ๊ฐ์ ๋ณ๊ฒฝํ ์ ์๋ค.
- ๋ ๋์ค๋ ๋ฃจ์ ์คํฌ๋ฆฝํธ์ ํ์์์์ด ๋ฐ์ํ์ ๋, ์๋์ผ๋ก ๋ฃจ์ ์คํฌ๋ฆฝํธ๋ฅผ ์ข ๋ฃํ์ง ์๋๋ค.
- ๋์ ๋ฃจ์ ์คํทํธ๊ฐ ๋์ ์ค์์ ์๋ฆฌ๊ธฐ ์ํด๋ชจ๋ ์ปค๋ฉ๋์ BUSY ๋ฉ์์ง๋ฅผ ๋ณด๋ธ๋ค.
- ๋ฃจ์ ์คํฌ๋ฆฝํธ ์คํ์ ์ทจ์ํด ์๋ฒ๋ฅผ ์ ์์ผ๋ก ๋ง๋๋ ์ ์ผํ ๋ฐฉ๋ฒ์ SCRIPT KILL ์ปค๋งจ๋ ํน์ SHUTDOWN NOSAVE ์ปค๋งจ๋์ ํธ์ถ์ด๋ค.
- ์ด์์ ์ผ๋ก ์คํฌ๋ฆฝํธ๋ ๊ฐ๋จํด์ผ ํ๊ณ , ๋จ์ผ ์ฑ ์์ ๊ฐ์ ธ์ผ ํ๋ฉฐ, ๋นจ๋ฆฌ ์คํ๋ผ์ผ ํ๋ค.
- ๋ฃจ์ ์คํฌ๋ฆฝํธ ๋ด์์ ๋ ๋์ค ์ปค๋งจ๋๋ฅผ ์คํํ๋ ๋ ๊ฐ์ ํจ์(redis.call๊ณผ redis.pcall)
- redis.call : ์ปค๋งจ๋ ์ด๋ฆ๊ณผ ๋ชจ๋ ํจ์ ๋งค๊ฐ๋ณ์๋ฅผ ๋ฐ์ผ๋ฉฐ ์ปค๋งจ๋ ๊ฒฐ๊ณผ๋ฅผ ๋ฆฌํดํ๋ค.
- redis.pcall : redis.call ํจ์์ ๋น์ทํ์ง๋ง ์๋ฌ๊ฐ ๋ฐ์ํ ๋ ๋ฃจ์ ํ ์ด๋ธ๋ก ์๋ฌ๋ฅผ ๋ฆฌํดํ๊ณ ์คํฌ๋ฆฝํธ๋ฅผ ๊ณ์ ์งํํ๋ค.
- ๋ฃจ์ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ๋ 2๊ฐ์ ์ปค๋งจ๋๋ EVAL, EVALSHA๊ฐ ์๋ค.
- EVAL์ ๋จ์ ๋ฃจ์ ์คํฌ๋ฆฝํธ ์คํ์ธ ๋ฐ๋ฉด EVALSHA๋ SCRIPT LOAD ์ปค๋งจ๋๊ฐ ๋ฆฌํดํ ์๋ณ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ฃจ์ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ๋ค.
(node์์ lua script in redis ํ
์คํธ sources/lus-script/intro-lua.js)
(node์์ lua script ๋ฅผ ์ด์ฉํ์ฌ zpop ์ํ sources/lus-script/zpop-lua.js)
(node์์ lua script evalsha๋ฅผ ์ด์ฉํ์ฌ zpop ์ํ sources/lus-script/zpop-lua-evalsha.js)
- INFO : ๋ ๋์ค ๋ฒ์ ๊ณผ ์ด์์ฒด์ , ์ฐ๊ฒฐ๋ ํด๋ผ์ด์ธํธ, ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋, ์ ์ฅ์, ๋ณต์ ๋ณธ, ํค ์คํ์ด์ค์ ๋ํ ์ ๋ณด๋ฅผ ํฌํจํ ๋ชจ๋ ๋ ๋์ค ์๋ฒ ํต๊ณ๋ฅผ ๋ฆฌํดํ๋ค.
- ๊ธฐ๋ณธ์ ์ผ๋ก INFO ์ปค๋งจ๋๋ ์ฌ์ฉํ ์ ์๋ ๋ชจ๋ ์น์ ์ ๋ณด์ฌ์ค๋ค.
- ๋งค๊ฐ๋ณ์๋ก ์น์ ์ด๋ฆ์ ๋ช ์ธํค ๊ฒฐ๊ณผ๋ฅผ ์ ํํ ์๋ ์๋ค. (memory, cpu ๋ฑ)
- CONFIG : ๋ ๋์ค ์ค์ ์ ๋ณด์ฌ์ค๋ค
- ์ฌ์ฉ๋ฒ : https://redis.io/commands/config-get
- DBSIZE : ๋ ๋์ค ์๋ฒ์ ์กด์ฌํ๋ ํค ๊ฐ์๋ฅผ ๋ฆฌํดํ๋ค.
- DEBUG SEGFAULT : ์ฌ๋ฐ๋ฅด์ง ์์ ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ์ ์ํํด ๋ ๋์ค ์๋ฒ ํ๋ก์ธ์ค๋ฅผ ์ข
๋ฃํ๋ค.
- ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ ์ค ๋ฒ๊ทธ๋ฅผ ์๋ฎฌ๋ ์ด์ ํ ๋ ์ ์ฉํ๋ค.
- MONITOR : ๋ ๋์ค ์๋ฒ๊ฐ ์ฒ๋ฆฌํ๋ ๋ชจ๋ ์ปค๋งจ๋๋ฅผ ์ค์๊ฐ์ผ๋ก ๋ณด์ฌ์ค๋ค.
- CLIENT LIST : ํด๋ผ์ด์ธํธ์ ๋ํ ๊ด๋ จ ์ ๋ณด์ ํต๊ณ๋ฟ ์๋๋ผ ์๋ฒ์ ์ฐ๊ฒฐ๋ ๋ชจ๋ ํด๋ผ์ด์ธํธ ๋ชฉ๋ก์ ๋ฆฌํดํ๋ค.
- CLIENT SETNAME : ํด๋ผ์ด์ธํธ์ ์ด๋ฆ์ ๋ณ๊ฒฝํ๋ค.
- CLIENT KILL : ํด๋ผ์ด์ธํธ์ ์ฐ๊ฒฐ์ ์ข ๋ฃํ๋ค. IP๋ ํฌํธ iD ํ์ ์ผ๋ก ํด๋ผ์ด์ธํธ ์ฐ๊ฒฐ์ ์ข ๋ฃํ ์ ์๋ค.
- FLUSHALL : ๋ ๋์ค์ ๋ชจ๋ ํค๋ฅผ ์ญ์ ํ๋ค. ์ญ์ ํ ํค๋ ๋ค์ ๋ณต๊ตฌํ ์ ์๋ค.
- RANDOMKEY : ์กด์ฌํ๋ ํค ์ค ๋ฌด์์๋ก ์ ํํ ํ๋์ ํค ์ด๋ฆ์ ๋ฆฌํดํ๋ค.
- EXIRE : ํน์ ํค์ ํ์์์์ ์ด ๋จ์๋ก ์ค์ ํ๋ค.
- EXPIREAT : ์ ๋์ค ํ์์คํฌํ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํน์ ํค์ ํ์์์์ ์ค์ ํ๋ค.
- TTL : ํ์์์ ๊ฐ์ด ์๋ ํค์ ๋จ์ ์๋ ์์กด์๊ฐ์ ์ด ๋จ์๋ก ๋ฆฌํดํ๋ค.
- PTTL : TTL๊ณผ ๊ฐ์ง๋ง ๋จ์๊ฐ ๋ฐ๋ฆฌ ์ด์ด๋ค.
- PERSIST : ํน์ ํค์ ์ฃผ์ด์ง ํ์กด ํ์์์์ ์ ๊ฑฐํ๋ค.
- SETEX : ํน์ ํค์ ๊ฐ์ ์ ์ฅํ ๋ ๋ง๋ฃ ์๊ฐ๋ ํจ๊ป ์์์ ์ผ๋ก ์ค์ ํ๋ค.
- DEL : ํ๋ ์ด์์ ํค๋ฅผ ๋ ๋์ค์์ ์ญ์ ํ๋ค.
- EXISTS : ํน์ ํค๊ฐ ์กด์ฌํ๋ฉด 1์, ์กด์ฌํ์ง ์์ผ๋ฉด 0์ ๋ฆฌํดํ๋ค.
- PING : PONG ๋ฌธ์์ด์ ๋ฆฌํดํ๋ค. ๋ ๋์ค๊ฐ ๋ฐ์ดํฐ๋ฅผ ๊ตํํ ์ ์๋ ์ํ์ธ์ง๋ฅผ ํ์ธํ ๋ ์ ์ฉํ๋ค.
- MIGRATE : ํน์ ํค๋ฅผ ๋์ ๋ ๋์ค ์๋ฒ๋ก ์ฎ๊ธด๋ค. ํค๋ฅผ ์ ์ฅํ ๋ ๋์ค ์๋ฒ์ ํค๊ฐ ์กด์ฌํ๋ค๋ฉด ์คํจํ๋ค.
- SELECT : ํด๋ผ์ด์ธํธ๊ฐ ์ฐ๊ฒฐ๋ ํ์ฌ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋ณ๊ฒฝํ๋ค. (๋ ๋์ค๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ค์ค ๋ฐ์ดํฐ๋ฒ ์ด์ค์ด๋ค.)
- AUTH : ๋ ๋์ค์ ์ฐ๊ฒฐํ ์ ์๋ ํด๋ผ์ด์ธํธ๋ฅผ ํ๊ฐ(authorization)ํ๋ ๋ฐ ์ฌ์ฉ๋๋ค.
- SCRIPT KILL : ๋ฃจ์ ์คํฌ๋ฆฝํธ ์คํ์ ์ข ๋ฃํ๋ค.
- SHUTDOWN : ๋ชจ๋ ํด๋ผ์ด์ธํธ๋ฅผ ์ข
๋ฃํ๊ณ , ์ต๋ํ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ค๊ณ ํ ํ ๋ ๋์ค ์๋ฒ๋ฅผ ์ข
๋ฃํ๋ค.
- SAVE, NOSAVE ๋๊ฐ์ ๋งค๊ฐ๋ณ์ ์ค ํ๋๋ฅผ ๋ฐ๋๋ค.
- OBJECT ENCODING : ์ฃผ์ด์ง ํค์์ ์ฌ์ฉ์ค์ธ ์ธ์ฝ๋ฉ ๊ฐ์ ๋ฆฌํดํ๋ค.
- ๋ ๋์ค์์ ๋ชจ๋ ๋ฐ์ดํฐ ํ์ ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ์ฅํ๊ฑฐ๋ ์ฑ๋ฅ์ ๋์ด๋ ๋ค์ํ ์ธ์ฝ๋ฉ์ ์ฌ์ฉํ ์ ์๋ค.
- ์๋ฅผ ๋ค์ด ๋จ์ง ์ซ์๋ง ๊ฐ๋ ๋ฌธ์์ด์ ๋ค๋ฅธ ์ธ์ฝ๋ฉ์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๊ธ์๋ง ๊ฐ๋ ๋ฌธ์์ด๋ณด๋ค ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ ์ฌ์ฉํ๋ค.
- ๋ฐ์ดํฐ ํ์ ์ ๋ ๋์ค์ ์๋ฒ ์ค์ ์ ์ ์๋ ์๊ณ ๊ฐ์ ๊ธฐ๋ฐ์ผ๋ก ๋ค์ํ ์ธ์ฝ๋ฉ์ ์ฌ์ฉํ๋ค.
- ๋ณดํต redis.conf ํ์ผ์์ ์ด๋ฌํ ์ค์ ๋ค์ ํ์ธํ ์ ์๋ค.
- linked list ์ค๋ช : http://redisgate.kr/redis/configuration/internal_linkedlist.php
- ziplist ์ค๋ช : http://redisgate.kr/redis/configuration/internal_ziplist.php
- quicklist, ์์ถ๋ quicklist ์ค๋ช : http://redisgate.kr/redis/configuration/internal_quicklist.php
- ๋ฌธ์์ด์์ ์ฌ์ฉ ๊ฐ๋ฅํ ์ธ์ฝ๋ฉ ์ ๋ณด๋ int, embstr, raw ์ธ๊ฐ์ง์ด๋ค.
- embstr์ 40๋ฐ์ดํธ๋ณด๋ค ์์ ๋ฌธ์์ด, raw๋ 40๋ฐ์ดํธ๋ณด๋ค ํฐ ๋ฌธ์์ด์ ํํํ ๋ ์ฌ์ฉ๋๋ค.
- ๋ฆฌ์คํธ์์ ์ฌ์ฉ ๊ฐ๋ฅํ ์ธ์ฝ๋ฉ์ ziplist์ linked list๊ฐ ์๋ค.
- ziplist : ๋ฆฌ์คํธ ํฌ๊ธฐ์ ์๋ฆฌ๋จผํธ๊ฐ list-max-ziplist-entires ์ค์ ๋ณด๋ค ์๊ณ , ๋ฆฌ์คํธ์ ๊ฐ๋ณ ๋ฐ์ดํธ๊ฐ list-max-ziplist-value ์ค์ ๋ณด๋ค ์๋ค๋ฉด ์ง ๋ฆฌ์คํธ๊ฐ ์ฌ์ฉ๋๋ค.
- linked list : ๋ฆฌ์คํธ ํฌ๊ธฐ์ ์๋ฆฌ๋จผํธ๊ฐ list-max-ziplist-entires ์ค์ ๋ณด๋ค ํฌ๊ฑฐ๋, ๋ฆฌ์คํธ์ ๊ฐ๋ณ ์๋ฆฌ๋จผํธ์ ๋ฐ์ดํธ๊ฐ list-max-ziplist-value ์ค์ ๋ณด๋ค ํฌ๋ฉด linked list๊ฐ ์ฌ์ฉ๋๋ค.
- ํ์ฌ๋ quick list๋ง ์ฌ์ฉ๋๋ค๊ณ ํ๋๋ฐ ์กฐ๊ธ ๋ ์กฐ์ฌ๊ฐ ํ์ํ๋ค (https://matt.sh/redis-quicklist)
- ziplist๊ฐ ์ฌ๋ฌ๊ฐ ๋ฆฌ์คํธ๋ก ๋์ด ์๋ ํํ๋ผ๊ณ ํจ.
- ziplist์ ๋ง์ง๋ง๋ณด๋ค ์ฐพ๋ ์ธ๋ฑ์ค๊ฐ ๋ค์์ ์์ผ๋ฉด ๋ค์ ziplist๋ก ์ด๋ํ๋ ํ์์ผ๋ก ๋ค์๋ฅผ skipํ์ฌ ๋ฆฌ์คํธ ํ์ ์๊ฐ์ ์ค์
- ์
์์ ์ฌ์ฉ ๊ฐ๋ฅํ ์ธ์ฝ๋ฉ์ intset, hashtable์ด๋ค.
- intset : ์ ์ ๋ชจ๋ ์๋ฆฌ๋จผํธ๊ฐ ์ ์๊ณ ์ ์ ๊ฐ์๊ฐ set-max-intset-entries ์ค์ ๋ณด๋ค ์์ผ๋ฉด ์ธํธ์ ์ด ์ฌ์ฉ๋๋ค.
- hashtable : ์ ์ ์๋ฆฌ๋จผํธ ์ค ํ๋๋ผ๋ ์ ์๊ฐ ์๋๊ฑฐ๋, ์ ์ ๊ฐ์๊ฐ set-max-intset-entries ์ค์ ๋ณด๋ค ํฌ๋ฉด ํด์ํ ์ด๋ธ์ด ์ฌ์ฉ๋๋ค.
- ํด์์์๋ ziplist, hashtable ์ธ์ฝ๋ฉ์ ์ฌ์ฉํ๋ค.
- ziplist : ํด์์ ํ๋ ๊ฐ์๊ฐ hash-max-ziplist-entries ์ค์ ๋ณด๋ค ์๊ณ ํด์์ ํ๋ ์ด๋ฆ๊ณผ ๊ฐ์ด hash-max-ziplist-value ์ค์ ๋ณด๋ค ์์ผ๋ฉด ์ง ๋ฆฌ์คํธ๊ฐ ์ฌ์ฉ๋๋ค.
- hashtable : ํด์์ ํ๋ ๊ฐ์๊ฐ hash-max-ziplist-entries ์ค์ ๋ณด๋ค ํฌ๊ฑฐ๋ ํด์์ ํ๋ ๊ฐ ์ค ํ๋๋ผ๋ hash-max-ziplist-value(๋ฐ์ดํธ) ์ค์ ๋ณด๋ค ํฌ๋ฉด ํด์ํ ์ด๋ธ์ด ์ฌ์ฉ๋๋ค.
- sorted set์์ ์ฌ์ฉ ๊ฐ๋ฅํ ์ธ์ฝ๋ฉ์ ziplist, skiplist + hashtable ์ด๋ค.
- ziplist : ์ ๋ ฌ๋ ์ ์ ๊ฐ์๊ฐ set-max-ziplist-entries ์ค์ ๋ณด๋ค ์๊ณ , ์ ๋ ฌ๋ ์ ์ ์๋ฆฌ๋จผํธ ๊ฐ์ด ๋ชจ๋ zset-max-ziplist-value(๋ฐ์ดํธ)์ค์ ๋ณด๋ค ์์ผ๋ฉด ์ง๋ฆฌ์คํธ๊ฐ ์ฌ์ฉ๋๋ค.
- skiplist + hashtable : ์ ๋ ฌ๋ ์ ์ ๊ฐ์๊ฐ set-max-ziplist-entries ์ค์ ๋ณด๋ค ํฌ๊ฑฐ๋ sorted set์ ์๋ฆฌ๋จผํธ ๊ฐ ์ค ํ๋๋ผ๋ zset-max-ziplist-value(๋ฐ์ดํธ) ์ค์ ๋ณด๋ค ํฌ๋ฉด skiplist + hashtable์ด ์ฌ์ฉ๋๋ค.
- ๊ฐ์ ๋ก ์ธ์ฝ๋ฉ์ ziplist๋ก ์ ํ์ํฌ์๋ ์์ผ๋, ์ฑ๋ฅ๊ณผ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ๋ํ ํธ๋ ์ด๋ ์คํ์ด๊ธฐ ๋๋ฌธ์ ์ ์๊ฐํด๋ด์ผ ํ๋ค.
- ํ ์คํธ ์ดํ "INFO MEMORY" command๋ฅผ ํตํด ์ค์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ์ธก์ ํด ๋ณผ ์ ์๋ค.
- bitmap์ set, list์ ๋ค๋ฅด๊ฒ ๋ค์ด๊ฐ ํค์ ์ฌ์ด์ฆ ์ค ๊ฐ์ ํฐ ์ฌ์ด์ฆ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ฌ์ด์ฆ๊ฐ ํฝ์ค ๋๊ธฐ ๋๋ฌธ์ ์ ์ฅ ๊ณต๊ฐ ํจ์จ์ด ๋ ์์ข์ ์ ์๋ค.
- ๋ ๋์ค์๋ ๋ค์ค ๋ ๋์ค ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์กด์ฌํ๊ธด ํ์ง๋ง ์ด๋ฏธ ๋ ๋์ค์์ ๋ค์ค ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์ฌ๋ผ์ง ๊ฒ์ด๋ผ๊ณ ๊ณต์ ๋ฐ๋ฃ๋ ์ํ์ด๊ธฐ ๋๋ฌธ์ ์ฌ์ฉํ์ง ์์์ผ ํ๋ค.
- ๋ ๋์ค๋ ๋จ์ผ ์ค๋ ๋ ๊ธฐ๋ฐ์ด๋ฏ๋ก, ํ๋์ ๋ ๋์ค ์๋ฒ์ ๋ค์ค ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ํ๋์ cpu ์ฝ์ด๋ง ์ฌ์ฉํ๋ค.
- ๋ค์ค ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๋ ๋์ค ๊ด๋ฆฌ๋ฅผ ์ด๋ ต๊ฒ ํ๊ณ ์ฑ๋ฅ๊ณผ ์์์ ๋ํ ์ฌ์ฉ ์ง๋จ์ ๋ณต์กํ๊ฒ ํ๋ค.
- ๋ค์์คํ์ด์ค ๋ฅผ ์ฌ์ฉํด์ผํ๋ค.
- ํค ์ด๋ฆ์ ์ ์ํ ๋ ์ถฉ๋์ ํผํ๊ธฐ ์ํด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ๋ณด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํค๋ฅผ ๊ตฌ์ฑํ๊ธฐ ์ํด ๋ค์์คํ์ด์ค๋ฅผ ์์ฑํด๋ผ.
- ๋ ๋์ค๋ ๋ค์์คํ์ด์ค ๊ธฐ๋ฅ์ ์ง์ํ์ง ์๋๋ค. ๊ทธ๋์ prefix๋ฅผ ์ง์ ์๋ช ํด ๋ถ์ฌ๋ผ.
- ์ค์๊ณต๊ฐ ์ค์ ์ ํ์คํ ํด๋ผ
- ๋จ์๋ง ๋ ๋์ค๊ฐ ์กด์ฌํ๊ฒ ํ๋ ค๋ฉด swappiness ์ค์ ์ 0์ผ๋ก ์ค์ผ ํ๋ค.
- ์ค์ ๋ฒ : https://zetawiki.com/wiki/%EB%A6%AC%EB%88%85%EC%8A%A4_swappiness
- ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ์ ํ๊ฒ ์ค์ ํด์ผํ๋ค.
- ๋ ๋์ค๋ ๋ฐฑ์ ํ๋ก์ธ์ค์์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ต๋ 2๋ฐฐ ๋ก ๋์ด๋ ์ ์๋ค.
- RDB snapshot์ ์์ฑํ๊ณ AOF rewrite์ด ์งํ๋๋ ๋์ redis-server๋ ๋ ๋์ค๋ฅผ ๋ณต์ ํด์ผํ๋ค. ์ฆ 2๋ฐฐ์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ค ์ ์๋ค๋ ๊ฒ.
- ๋ฐ๋ผ์ ๋ ๋์ค๋ ๋ฉ๋ชจ๋ฆฌ์ 50ํผ์ผํธ ์ด์์ ์ฌ์ฉํ์ง ๋ชปํ๋๋ก ํด์ผํ๋ฉฐ, ๋ ๋์ค ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ๋ํ ๊ฒฝ๊ณ ์๋ฆผ์ ๋ฐ๋์ ์ค์ ํด์ผํ๋ค.
- ๋ถ์ ์ ํ ์ ์ฅ ์ ๋ต
- 8์ฅ ๊ณต๋ถ ์ดํ ๋์์ด
- ๋ ๋์ค๋ ์ ๋ขฐํ ๋งํ ๋ด๋ถ ๋คํธ์ํฌ์์ ์ฌ์ฉํ ์ ์๋๋ก ์ค๊ณ๋๋ค.
- ๋ ๋์ค๋ ํ๋ฌธ ํจ์ค์๋๋ฅผ ์ฌ์ฉํด ํด๋ผ์ด์ธํธ์ ์๋ฒ ๊ฐ์ ์ฐ๊ฒฐ์ ๋ณดํธํ๋ ๊ธฐ๋ณธ์ ์ธ ๋ณด์ ์์คํ ์ ๊ฐ์ง๊ณ ์๋ค.
- ๊ธฐ๋ณธ์ ์ธ ๋ณด์
- ๋ ๋์ค๋ฅผ ์ค๊ณํ์ ๋, ๋ ๋์ค์ ์ฃผ์ ๋ชฉํ๋ ์ต๊ณ ์ ๋ณด์์์ค๋ณด๋ค๋ ์ต๊ณ ์ ์ฑ๋ฅ๊ณผ ๋จ์์ฑ์ด์๋ค.
- ๋ ๋์ค๊ฐ ํ๋ฌธ ํจ์ค์๋๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ๊ธฐ๋ณธ ๋ณด์ ๋งค์ปค๋์ฆ์ ๊ตฌํํ์ง๋ง, ๋ ๋์ค๋ ACL์ ๊ตฌํํ์ง ์์๋ค. ๋ฐ๋ผ์ ํผ๋ฏธ์ ๋ ๋ฒจ ๋จ์๋ก ์ฌ์ฉ์๋ฅผ ๊ตฌ๋ถํ ์ ์๋ค.
- ์ธ์ฆ ๊ธฐ๋ฅ์ requirepass ์ค์ ์ผ๋ก ํ์ฑํํ ์ ์๋ค.
- ํ์ง๋ง ๋ ๋์ค๋ ๋น ๋ฅด๊ธฐ ๋๋ฌธ์, ์ ์ฑ ์ ์ ๊ฐ ์ด๋น ์์ฒ ๊ฐ์ ํจ์ค์๋๋ฅผ ์์ฒญํด ์ ์ฌ์ ์ผ๋ก ์์๋งํ ์ ์์ด์ requirepass ์ค์ ์ด ์ํํ ์๋ ์๋ค.
- ๋ฐ๋ผ์ ์ต์ 64์์ ๋ณต์กํ ํจ์ค์๋๋ฅผ ๋ช ์ธํด ํจ์ค์๋๋ฅผ ์์๋งํ์ง ๋ชปํ๊ฒ ํด์ผํ๋ค.
- requirepass๋ฅผ ํ์ฑํํ๋ฉด, ๋ ๋์ค๋ ์ธ์ฆ ์๋ ํด๋ผ์ด์ธํธ์ ๋ชจ๋ ์ปค๋งจ๋ ์์ฒญ์ ๊ฑฐ๋ถํ๋ค.
- FLUSHDB, FLUSHALL, CONFIG, KEYS, DEBUG, SAVE ์ ๊ฐ์ ๋ช
๋ น์ด๋ค์ ์๊ธฐ ์ด๋ ต๊ฒ ํ๊ฑฐ๋ ์ฌ์ฉ์ ๊ธ์งํ๋ ๋ฐฉ๋ฒ๋ ์๋ค.
- redis.conf์์ rename-command ์ค์ ์ ํตํด ๊ฐ๋ฅ.
- ์ด ์ด์ธ์ ๋คํธ์ํฌ ์ ์ผ๋ก ์ถ๊ฐ ๋ณด์์ ์ ์ฉํ๋ ๋ฐฉ๋ฒ ๋ฑ์ ์ ํํ๋ค.
- ํ๋ง๋๋ก ๋ณด์์ด ์ข ์ฝํ๋ค.
- ๋ ๋์ค๋ ๋ฐ์ดํฐ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํ๋ค.
- ๋ฉ๋ชจ๋ฆฌ๋ ์ ์ ๋์๋ง ์ ์ฅ๋๋ ์์ ์ ์ฅ์๋ผ์ ๋ ๋์ค ์ธ์คํด์ค๊ฐ ์ข ๋ฃ, ํฌ๋์, ์ฌ์์๋๋ฉด ์ ์ฅ๋ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ์๊ฒ ๋๋ค.
- ๋ฐ๋ผ์ ๋ฐ์ดํฐ ์์ค ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ ๋์ค๋ ์ ์ฅ ๊ฐ๋ฅํ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ, **๋ ๋์ค ๋ฐ์ดํฐ๋ฒ ์ด์ค(RDB)**์ **Append-only File(AOF)**์ ์ ๊ณตํ๋ค.
- ๋์ผํ ๋ ๋์ค ์ธ์คํด์ค์์ ๋ ๋ฐฉ๋ฒ์ ๊ฐ๋ณ์ ์ผ๋ก, ๋๋ ๋์์ ์ฌ์ฉํ ์ ์๋ค.
- ๋ ๋์ค ๋ฐ์ดํฐ๋ฒ ์ด์ค (RDB)
- rdb ํ์ผ์ ํน์ ์์ ์ ๋ฐ์ดํฐ ๋ฐ์ด๋๋ฆฌ๋ก, ๋ ๋์ค ์ธ์คํด์ค์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ํํํ๋ค.
- rdb ํ์ผ ํํ๋ ๋น ๋ฅธ ์ผ๊ธฐ์ ์ฐ๊ธฐ์ ์ต์ ํ๋ผ ์๋ค.
- ์ฑ๋ฅ์ ๋์ด๊ธฐ ์ํด ๋์ํฌ์ rdb ํ์ผ์ ๋ด๋ถ ๊ตฌ์กฐ๋ ๋ ๋์ค ์ธ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ์ ๋งค์ฐ ๋น์ทํ๊ฒ ๋ผ์๋ค.
- rdbํ์ผ ์์ถ ์์ lzf ์์ฃฝ ์ ํ์ฉํ๋ค.
- lzf ์์ถ์ ์์ถ์ ์งํํ ๋ ์์ฃผ ์์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๋น ๋ฅธ ์์ถ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.
- lzf ์์ถ ์๊ณ ๋ฆฌ์ฆ์ด ๋ค๋ฅธ ์๊ณ ๋ฆฌ์ฆ๋ณด๋ค ์ต๊ณ ์ ์์ถ๋ฅ ์ ๊ฐ์ง๊ณ ์์ง๋ ์๋ค.
- ๋ ๋์ค ์ธ์คํด์ค๋ฅผ ์์ ํ๊ฒ ๋ณต๊ตฌ ํ๋๋ฐ ํ๋์ RDB ํ์ผ๋ง ์์ผ๋ฉด ๋๋ค.
- ํ์ํ ๋๋ง๋ค ๋งค์๊ฐ, ๋งค์ผ, ๋งค์ฃผ, ๋งค๋ฌ RDB ํ์ผ์ ์ ์ฅํ ์ ์๋๋ก ํ ์ ์๋ค.
- SAVE ์ปค๋งจ๋๋ฅผ ํตํด RDB ํ์ผ์ ์ฆ์ ์์ฑํ ์๋ ์๋ค. ํ์ง๋ง ์ด ๊ณผ์ ์์ ๋ ๋์ค ์๋ฒ๋ฅผ ๋ธ๋กํ๊ธฐ ๋๋ฌธ์ SAVE ์ปค๋งจ๋๋ฅผ ์ฌ์ฉํ์ง ์๋๋ก ํ๋ค.
- BGSAVE ์ปค๋งจ๋๋ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์ ์ฅํ๊ธฐ ๋๋ฌธ์ ๋ ๋์ค๋ฅผ ๋ธ๋กํ์ง ์๋๋ค. (์์ ํ๋ก์ธ์ค๋ก ์คํ)
- ๋ฐฑ๊ทธ๋ผ์ด๋๋ก RDB ํ์ผ์ ์ ์ฅํ ๋ ์ฑ๋ฅ ์ ํ๊ฐ ๋ฐ์ํ์ง ์๋๋ก reids-server๋ ๋ชจ๋ ์ ์ฅ ์์ ์ ์ํํด์ ์์ ํ๋ก์ธ์ค๋ฅผ ์์ฑํ๋ค. ๋ฐ๋ผ์ redis-server ํ๋ก์ธ์ค๋ ์ด๋ ํ ๋์คํฌ I/O์์ ๋ ์ํํ์ง ์๋๋ค.
- redis-server๊ฐ ์ฐ๊ธฐ ์์
์ ๋ฐ๊ณ ์๋ ์ํ๋ฉด, ์์ ํ๋ก์ธ์ค๋ ๋ณ๊ฒฝ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ณต์ฌํด์ผ ํ๋ค. ์ด๋ก ์ธํด ์ ์ฒด ์ฌ์ฉ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ๊ฒฉํ๊ธฐ ์ฆ๊ฐํ ์ ์๋ค.
- ๋ ๋์ค๋ copy-on-write๋ฅผ ์ฌ์ฉํ๋ค.
- ์ค์ redis.conf๋ฅผ ์ด์ด๋ณด๋ฉด ์ด๋ฌํ ์ค์ ์ด ์์ (save 900 1, save 300 10, save 60 10000)
- save ์ง์์ ๋ฌธ๋ฒ์ save number_of_seconds number_of_changes ์ด๋ค.
- ์ฆ ํ๋ ์ด์์ ์ฐ๊ธฐ ์์ ์ด ์คํ๋๋ฉด 900์ด๋ง๋ค ๋์คํฌ์ rdb ํ์ผ ์ ์ฅ
- 10๊ฐ ์ด์์ ์ฐ๊ธฐ ์์ ์ด ์คํ๋๋ฉด 300์ด๋ง๋ค ๋์คํฌ์ rdb ํ์ผ ์ ์ฅ
- 10,000๊ฐ ์ด์์ ์ฐ๊ธฐ ์์ ์ด ์คํ๋๋ฉด 60์ด๋ง๋ค ๋์คํฌ์ rdb ํ์ผ์ ์ ์ฅ
- ๋จ์
- ์ฆ rdb๋ ํด๋น ์ค์ ์ด๋ด์ 100% ๋ณต๊ตฌ๋ฅผ ์ฅ๋ดํ์ง ๋ชปํ๊ธฐ ๋๋ฌธ์ ์ด์ ๋ํ ๋๋น๊ฐ ํ์ํ๋ค.
- ๊ทธ๋ฆฌ๊ณ snapshot์ ๋จ์ ์ ์์ฑ ์๋ง๋ค ๋ ๋์ค๋ ๋์คํฌ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ธฐ ์ํด ์์ ํ๋ก์ธ์ค๋ฅผ ์์ฑ ํ๋ค๋ ์ ์ด๋ค.
- ์์ ํ๋ก์ธ์ค๋ฅผ ์์ฑํ๋ ๋์ ์๋น์ค์ค์ธ ํด๋ผ์ด์ธํธ๋ฅผ ๋ฉ์ถ๊ฒ ํ ์ ์๋ค. ์ด ๋ถ๋ถ์ ๋ ๋์ค์์ ๊ฐ์ง๊ณ ์๋ ๋ฐ์ดํฐ ์งํฉ์ ํฌ๊ธฐ์ ์ํฅ์ ๋ฐ๋๋ค. ๋๋ก๋ ๋ช ms์์ ๋ช s๊น์ง ๊ฑธ๋ฆด ์ ์๋ค.
- ๋ ๋์ค ์ค์ ์์ ์ฌ์ฉํ ์ ์๋ RDB ๊ด๋ จ ์ง์์๋ ๋ค์๊ณผ ๊ฐ๋ค
- stop-writes-on-bgsabve-error : (yes or no) ๋ง์ง๋ง์ผ๋ก ์คํํ ๋ฐฑ๊ทธ๋ผ์ด๋ ์ ์ฅ์ด ์คํจํ๋ค๋ฉด, ๋ ๋์ค๊ฐ ์ฐ๊ธฐ ์์ ์ ๋ฐ๋ ๊ฒ์ ๋ฉ์ถ๋๋ก ๊ฒฐ์ . ๋ฐฑ๊ทธ๋ผ์ด๋ ์ ์ฅ์ด ์ฑ๊ณตํ๋ฉด ์ฐ๊ธฐ ์์ ์ ๋ค์ ๋ฐ๊ธฐ ์์.
- rdbcompression : (yes or no) rdbํ์ผ์ ๋ํด lzf ์์ถ์ ์ฌ์ฉํ ์ง์ ๋ํ ์ต์
- rdbchecksum : rdb ํ์ผ์ ๋ง์ง๋ง์ ์ฒดํฌ์ฌ(checksum)์ ์ ์ฅํ๊ณ , rdb ํ์ผ์ ๋ก๋ฉํ๊ธฐ ์ ์ ์ฒดํฌ์ฌ์ ์ํํ ์ง์ ๋ํ ์ต์ , ์ฒดํฌ์ฌ์ด ์ณ์ง ์์ผ๋ฉด ๋ ๋์ค๊ฐ ์์๋์ง ์๋๋ค.
- dbfilename : rdbํ์ผ์ ์ด๋ฆ์ ๊ฒฐ์ ํ๋ค.
- save ์ด์ ๋ณ๊ฒฝ ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ค๋ต์ท ์ฃผ๊ธฐ๋ฅผ ์ค์
- dir: AOF์ RDBํ์ผ์ ๋๋ ํ ๋ฆฌ ์์น๋ฅผ ๋ช ์ธํ๋ค.
- Append-only File (AOF)
- ๋ ๋์ค๋ ๋ฐ์ดํฐ ์งํฉ์ ๋ณ๊ฒฝํ๋ ์ปค๋งจ๋๋ฅผ ๋ฐ์ ๋๋ง๋ค, AOF ํ์ผ์ ํด๋น ์ปค๋งจ๋๋ฅผ ์ถ๊ฐํ๋ค.
- ์ด๋ฅผ ๋ฐํ์ผ๋ก ๋ ๋์ค์ AOF ์ค์ ์ ์ ์ฉํ ํ ๋ ๋์ค๋ฅผ ์ฌ์์ํ๋ฉด, ๋ ๋์ค๋ AOF์ ๋์ด๋ ๋ชจ๋ ์ปค๋งจ๋๋ฅผ ์์๋๋ก ์คํํด ๋ฐ์ดํฐ๋ฅผ ๋ณต๊ตฌํ ์ ์์ผ๋ฉฐ ๋ฐ์ดํฐ์ ์ํ๋ฅผ ์ฌ๊ตฌ์ถํ๋ค.
- AOF๋ RDB ์ค๋ ์ท์ ๋์์ด๋ค.
- AOF ํ์ผ์ '์ฌ๋์ด ์ฝ์ ์ ์๋' ๋ก๊ทธ๋ฅผ ์ถ๊ฐ๋ง ํ ์ ์๋ ๋ก๊ทธ ํ์ผ์ด๋ค.
- ์ฆ ๊ฒ์์ด๋ ์์ ๋ฌธ์ ๋ฅผ ์ฝ๊ฒ ์๋ณํ ์ ์์์ ์๋ฏธํ๋ค.
- ํ ์คํธ ์๋ํธ์์ ์ด์ด๋ณผ ์๋ ์๊ณ ๋ด๋ถ ๊ตฌ์กฐ๋ ์ดํดํ ์ ์๋ค.
- AOF๊ฐ ๋ถ์์ ํ๊ฑฐ๋ ์์๋๋ ๊ฒฝ์ฐ AOF ํ์ผ์ ์ฝ๊ฒ ํ์ธํ๊ณ ๊ณ ์น ์ ์๋ redis-check-aof ํด์ด ์กด์ฌํ๋ค.
- ์ฌ๋ฌ ์ต์ ์ ์ฌ์ฉํด AOF์ ์๋์ผ๋ก ์์ ๋ฒ์ ์ผ๋ก ์ต์ ํํ๊ฑฐ๋, BGREWRITEAOF ์ปค๋งจ๋๋ฅผ ํตํด ์๋์ผ๋ก ์์ผ ๋ฒ์ ์ผ๋ก ์ต์ ํํ ์ ์๋ค.
- AOFํ์ผ์ ์ ์ฅํ๋ ๋์ ํฌ๋์๊ฐ ๋ฐ์ํ๋ค๋ฉด ์๋ณธ AOFํ์ผ์ ๋ณ๊ฒฝ๋์ง ์๋๋ค.
- AOF ๊ด๋ จ ์ค์ ์์ ์ฌ์ฉํ ์ ์๋ ์ง์์๋ ๋ค์๊ณผ ๊ฐ๋ค.
- appendonly : (yes or no)AOF์ ์ฌ์ฉ ์ฌ๋ถ๋ฅผ ์ค์ ํ๋ค.
- appendfilename : AOF ํ์ผ ์ด๋ฆ์ ๋ช ์ธํ๋ค. ํ์ผ ๊ฒฝ๋ก๋ฅผ ์ธ ์ ์๋ค.
- appendfsync : ์ฃผ์ ํ๋ก์ธ์ค์์ fsync(์ด์์ฒด์ ๊ฐ ๋ฐ์ดํฐ๋ฅผ ๋์คํฌ์ Flushํ ๋ ์ฐ์ด๋ ์์คํ
ํธ์ถ - https://www.joinc.co.kr/w/man/2/fsync)๋ฅผ ์ํํ๊ธฐ ์ํด ๋ฐฑ๊ทธ๋ผ์ด๋ ์ค๋ ๋๋ฅผ ์ฌ์ฉํ๋ค.
- no : fsync๋ฅผ ์คํํ์ง ์๋๋ค.
- always : ๋ชจ๋ ์ฐ๊ธฐ ์์ ๋ง๋ค fsync๋ฅผ ์คํํ๋ค.
- everysec : ๋งค์ด ์คํํ๋ค. (appendfsync ์ต์ ์ ๊ธฐ๋ณธ๊ฐ)
- no-appendfsync-on-rewirte : (yes or no) ๋๋์ ์ฐ๊ธฐ ๋ฐ์ํ์ฌ ์ง์ฐ์ด ๋ฐ์ํ ์ ๋ ๋์ค ์๋ฒ์์ fsync๋ฅผ ์คํํ์ง ์๋๋ค.
- auto-aof-rewrite-percentage : (0~100) AOF ํ์ผ ํฌ๊ธฐ๊ฐ ํด๋น ์ต์ ์์ ๋ช ์ธํ ํผ์ผํธ๊น์ง ๋๋ฌํ๋ฉด ์๋ถ์ ์ผ๋ก BGREWRITEAOF ์ปค๋งจ๋๋ฅผ ์ํ, ๊ธฐ๋ณธ ๊ฐ์ 100
- auto-aof-rewirte-min-size : ํด๋น ์ต์ ์ AOF ํ์ผ์ ์ต์ ํฌ๊ธฐ๋ค. ๋ช ์ธํ auto-aof-rewrite-percentage ๊ฐ์ ์ด๊ณผํ๋ฉด, ๋ช ์ธํ ์ต์ ํฌ๊ธฐ์ ๋๋ฌํ ๋๊น์ง AOF์ ์ฅ์ด ์๋๋๋ก ํ๋ค. ๊ธฐ๋ณธ๊ฐ์ 67,108,864 ๋ฐ์ดํธ์ด๋ค.
- aof-load-turncated : (yes or no) ๋ ๋์ค์ ํฌ๋์๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ ๋ ๋์ค ์์์ AOF ํ์ผ์ ๋ก๋ํ ์ง ์ฌ๋ถ๋ฅผ ๋ช ์ธ. ๋ง์ฝ no๋ฉด ๋ก๋ํ์ง ์๊ณ ์๋ฌ๋ฅผ ์ถ๋ ฅํ๊ณ ์ข ๋ฃํ ๊ฒ์ด๋ค.
- dir : AOF์ RDB ํ์ผ์ ๋๋ ํ ๋ฆฌ ์์น๋ฅผ ๋ช ์ธํ๋ค.
- RDB๋ AOF
- ํฐ ๋ฐ์ดํฐ ์งํฉ์ ๋ณต๊ตฌํ ๋, ๋ณต๊ตฌ ์๋๋ RDB๊ฐ AOF๋ณด๋ค ๋น ๋ฅด๋ค. RDB๋ ์ ์ฒด ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋ฐ์ํ๋ ๋ชจ๋ ๋ณ๊ฒฝ์ ์ฌ์คํํ ํ์๊ฐ ์๊ธฐ ๋๋ฌธ์ด๋ค.
- ๋ ๋์ค๋ ์์ ์ RDB์ AOFํ์ผ ์ค ํ๋๋ผ๋ ์กด์ฌํ๋ฉด ๊ทธ ํ์ผ์ ๋ก๋ํ๋ค. ๋ ํ์ผ ๋ชจ๋ ์กด์ฌํ๋ฉด AOF๊ฐ ๋ด๊ตฌ์ฑ์ด ๋ณด์ฅ๋ผ ์๊ธฐ ๋๋ฌธ์ AOF๊ฐ ์ฐ์ ๊ถ์ ๊ฐ์ง๋ค.
- ์ฃผ์์ฌํญ
- ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ ์ฅ์ด ํ์ํ์ง ์๋ค๋ฉด RDB์ AOF๋ฅผ ๋นํ์ฑํ๋ค.
- ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ฝ๊ฐ์ ๋ฐ์ดํฐ ์์ค์ด ํ์ฉ๋๋ค๋ฉด RDB๋ฅผ ์ฌ์ฉํ๋ค.
- ์ ํ๋ฆฌ์ผ์ด์ ์์ ์์ ํ ๋ด๊ตฌ์ฑ ์๋ ์ ์ฅ์ด ํ์ํ๋ค๋ฉด, RDB์ AOF๋ฅผ ๋ ๋ค ์ฌ์ฉํ๋ค.
- ๋ ๋์ค ์ธ์คํด์ค(master)์ ์ฐ๊ธฐ ์์ ์ ์งํํ๋ ๋์, ํ๋ ์ด์์ ์ธ์คํด์ค(slave)๊ฐ ๋ ๋์ค ๋ง์คํฐ์ ์๋ฒฝํ ๋ณต์ฌ๋ณธ์ด ๋๋ ๊ฒ ์ ๋ณต์ ๋ผ๊ณ ํ๋ค.
- ๋ ๋์ค 2.8์์ ๋ง์คํฐ๊ฐ ๋ง์ ์์ ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ ์ด๋ธ์๊ฒ ์ฃผ๊ธฐ์ ์ผ๋ก ์ ๋ฌํ๋ฉด, ์ฌ๋ ์ด๋ธ๊ฐ ์ ๋ฌ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ๋น๋๊ธฐ ๋ณต์ ๊ธฐ๋ฅ์ ์๊ฐํ๋ค.
- ๋ ๋์ค ์๋ฒ์ ์ธ์คํด์ค๋ฅผ ์ฌ๋ ์ด๋ธ๋ก ๋ง๋๋ ๋ฐฉ๋ฒ์ 3๊ฐ์ง๊ฐ ์๋ค.
- redis.conf ํ์ผ์ slaveof IP PORT ์ง์์๋ฅผ ์ถ๊ฐํ๊ณ , ํด๋น ์ค์ ํ์ผ์ ์ฌ์ฉํด ๋ ๋์ค๋ฅผ ์์ํ๋ค.
- redis-server ์ปค๋งจ๋ ๋ผ์ธ ์ต์ ์ --slaveof IP PORT๋ฅผ ์ฌ์ฉํ๋ค.
- SLAVEOF IP PORT ์ปค๋งจ๋๋ฅผ ์ฌ์ฉํ๋ค.
- ๋ณต์ ๋ณธ์ ๋ ๋์ค๋ฅผ ํ์ฅํ๊ธฐ ์ํด ๊ด๋ฒ์ํ๊ฒ ์ฐ์ด๋ฉฐ, ๋ชจ๋ ์ฝ๊ธฐ ์์ ์ ๋ณต์ ๋ณธ์์ ์ฒ๋ฆฌ๋๊ณ ๋ง์คํฐ๋ ์ฐ๊ธฐ ๋ช ๋ น๋ง ์ฒ๋ฆฌํ๋ค. (--appendonly ์ต์ ์ master์ ์ค์ผํ๋ค. ์๋๋ฉด GET๋ ๊ฐ๋ฅ)
- ์ ์ฅ ๊ธฐ๋ฅ์ ๋ณต์ ๋ณธ์ผ๋ก ์ด๋์์ผ ๋ง์คํฐ๊ฐ ๋์คํฌ I/O ์ปค๋งจ๋๋ฅผ ์ํํ์ง ์๊ฒ ํ ์ ์๋ค.
- ๋ณต์ ์๋๋ฆฌ์ค์์ ๋ง์คํฐ ์๋ฒ๋ ์ ์ฅ ์ค์ ์ ํ์ง ์์์ผ ํ๋ฉฐ ์ด๋ค ์ด์ ์์๋ ์๋์ผ๋ก ์ฌ์์ ํ๋ฉด ์๋๋ค.
- ๊ทธ๋ ์ง ์์ผ๋ฉด, ๋ง์คํฐ ๋ ๋์ค์ ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ ์ง์ด ํ, ๋น ๋ฐ์ดํฐ ์งํฉ์ ์ฌ์์ํ๋ฉฐ ๋ณต์ ๋ณธ์ ๋น ๋ฐ์ดํฐ ์งํฉ์ ๋ณต์ ํ๋ค.
- ๋ณต์ ๋ณธ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฝ๊ธฐ๋ง ๊ฐ๋ฅ ํ์ง๋ง, slave-read-only ๋ฅผ no๋ก ์ค์ ํ๋ฉด ๋ณต์ ๋ณธ์ ์ํ๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ค. ๊ทธ๋ฌ๋ ์ด ๋ฐฉ๋ฒ์ ์ถ์ฒํ์ง ์๋๋ค.
- ๋ง์คํฐ ์๋ฒ์ ์ฐ๊ฒฐ๋ ๋ณต์ ๋ณธ์ ์ต์ ๊ฐ์๋ฅผ ์๊ตฌํด ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ ๋ณด์ฅ์ ํฅ์์ํฌ ์ ์๋ค.
- ์ด๋ฐ ๋ฐฉ๋ฒ์ผ๋ก ๋ณต์ ๋ณธ์ ์ต์ ๊ฐ์๊ฐ ๋ง์กฑ๋๋ฉด, ๋ชจ๋ ์ฐ๊ธฐ ์์ ์ ๋ ๋์ค ์๋ฒ์์๋ง ์คํ๋๊ณ , ๋ณต์ ์ ๋ฐ๋ฅธ ์ต๋ ์ง์ฐ ํ์(์ด ๋จ์)์ด ๋ฐ์ ํ๋ค.
- ๊ทธ๋ฌ๋ ๋ณต์ ๋ณธ ์ต์ ๊ฐ์๋ฅผ ์๊ตฌํ๋ ๊ธฐ๋ฅ์ ์ฐ๊ธฐ ์์ ์ ๋ชจ๋ ๋ณต์ ๋ณธ์ด ๋ฐ์ ์ ์๊ฒ ๋ณด์ฅํ์ง ์๊ธฐ ๋๋ฌธ์ ์ฌ์ ํ ์ทจ์ฝํ๋ค.
- ๋ณต์ ๋ณธ ์ต์ ๊ฐ์์ ์ต๋ ์ง์ฐ ์๊ฐ์ ์ค์ ์ min-slaves-to-write ์ min-slave-max-lag ์ด๋ฉฐ ๊ธฐ๋ณธ๊ฐ์ ๊ฐ๊ฐ 0๊ณผ 10(์ด)์ด๋ค.
- ๋ณต์ ๋ณธ์ ์ต๊ทผ์ ๋ฐ์ํ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ํฌํจํ๋ฉฐ ๋ง์คํฐ๋ก ์น๊ฒฉํ ์ ์๊ธฐ ๋๋ฌธ์ ๋ง์คํฐ์ ๋ฌธ์ ๊ฐ ์๊ธธ ์ ์๋ ์ํฉ์์ ๋งค์ฐ ์ ์ฉํ๋ค.
- ๋ ๋์ค ์ผํฐ๋๋ก ์ธํด ๋ง์คํฐ ์ฅ์ ์ํฉ์์ ์๋ก์ด ๋ง์คํฐ ์ ์ถ์ด ๊ฐ๋ฅํ๋ค. ์ด๋ ๋ค์์ ๋ค๋ฃจ๋๋ก ํ๊ฒ ๋ค.
- SLAVEOF NO ONE ์ปค๋งจ๋๋ ์ฌ๋ ์ด๋ธ๋ฅผ ๋ง์คํฐ๋ก ๋ณํํ๊ณ ํ์ผ์ค๋ฒ๊ฐ ๋ฐ์ํ ๋ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.
(docker๋ฅผ ์ด์ฉํด master, slave1, slave2 redis ์ค์ )
(master์์ testkey set ์ดํ master, slave1, slave2 ์์ GET test)
(master ์ฅ์ ์ํฉ์ slave๋ฅผ master๋ก ๋ณ๊ฒฝ test)
- ํํฐ์ ๋์ ๋ฐ์ดํฐ๋ฅผ ๋๋๊ณ , ์ฌ๋ฌ ์ฅ๋น์ ๊ฑธ์ณ ๋ฐ์ดํฐ๋ฅผ ๋ถ์ฐ์ํค๋ ํ์์ด๋ค.
- ํํฐ์ ๋์๋ 2๊ฐ์ง ํ์ , ์ํ ํํฐ์ ๋๊ณผ ์์ง ํํฐ์ ๋์ด ์๋ค.
- ํํฐ์ ๋์ ๋ ์ข์ ์ฑ๋ฅ, ์ ์ง ๋ณด์์ฑ, ๊ฐ์ฉ์ฑ์ด ์๊ตฌ๋ ๋ ์ฅ๋น ํด๋ฌ์คํฐ์์ ์ํ๋๋ค.
- ๋ ๋์ค๋ฅผ ์ฒ์ ์ค๊ณํ์ ๋๋ ๋ฐ์ดํฐ๋ฅผ ๋ถ์ฐํด์ ์ ์ฅํ ์๋๊ฐ ์ ํ ์์๋ค. ๋ฐ๋ผ์ ์ฌ๋ฌ ์ธ์คํด์ค์ ๋ฐ์ดํฐ๋ฅผ ๋ถ์ฐํ ์ ์์๋ค. ๋ฐ๋ผ์ ์ฌ๋ฌ ์ธ์คํด์ค์ ๋ฐ์ดํฐ๋ฅผ ๋ถ์ฐํ ์ ์์๋ค.
- ์ด์ ์ ์์ ์ค๋ช
ํ replication๋ง์ผ๋ก๋ ๋ง์คํฐ ์ธ์คํด์ค์ ๋ํ ์ฌ๋ฌ ๋ณ๋ชฉ์ ์ ๊ฑฐํ ์ ์์ง๋ง, ๋ง์ ๊ฒฝ์ฐ์ ์ด ๋ฐฉ๋ฒ๋ง์ผ๋ก ์ถฉ๋ถํ์ง ์์๋ค.
- ๋ฌธ์ ๊ฐ ๋๋ ์ผ์ด์ค ์์
- ์ ์ฅ๋ ์ ์ฒด ๋ฐ์ดํฐ๊ฐ ๋ ๋์ค ์๋ฒ์ ์ ์ฒด ๋ฉ๋ชจ๋ฆฌ๋ณด๋ค ํฌ๋ค.
- ๋คํธ์ํฌ ๋์ญํญ์ด ๋ชจ๋ ํธ๋ํฝ์ ์ฒ๋ฆฌํ๊ธฐ์ ์ถฉ๋ถํ์ง ์๋ค.
- ๋ฌธ์ ๊ฐ ๋๋ ์ผ์ด์ค ์์
- ๋ฐ๋ผ์ ์ด๋ฐ ๋ฌธ์ ๋ค์ ํด๊ฒฐํ๊ธฐ ์ํด ํํฐ์ ๋์ด ๊ณ ์๋์๋ค.
- ํด๋ผ์ด์ธํธ ๋ ๋ฒจ์ ํํฐ์ ๋๊ณผ ํ๋ก์ ์์คํ ์ ํตํ ํํฐ์ ๋์ด ์กด์ฌํ๋ค.
- ๋ ๋์ค์์์ ์ํ ํํฐ์ ๋์ ํค๋ฅผ ์ฌ๋ฌ ๋ ๋์ค ์ธ์คํดํธ๋ก ๋ถ์ฐํ๋ ๊ฒ์ ์๋ฏธํ๋ค.
- ๋ ๋์ค์์์ ์์ง ํํฐ์ ๋์ ์ฌ๋ฌ ๋ ๋์ค ์ธ์คํด์ค๋ก ํค์ ๊ฐ์ ๋ถ์ฐํ๋ ๊ฒ์ ์๋ฏธํ๋ค.
- ๋ ๋์ค์์ ์ง์ ์ ์ผ๋ก ํด๋ผ์ด์ธํธ์ ์ํ ํํฐ์ ๋์ ์ง์ํ์ง๋ ์๋๋ค.
- ํํฐ์
๋ ๋ฐฉ์
- constant hashing
- java์์ google ssm์ฒ๋ผ ์ด๋ฐ ํํฐ์ ๋์ ์ง์ํ๋ ํด๋ผ์ด์ธํธ๊ฐ ์กด์ฌํ๋ค.
- jedis : https://github.com/xetorthio/jedis/tree/b03d4231f4412c67063e356a7c3acf9bb7e62534
- jedis ์ฌ์ฉ๋ฒ : https://www.javatips.net/api/javaProject-master/ssm-parent/ssm-redis/src/main/java/com/xwd/redis/api/RedisClient.java
- tagging
- key ๋ค์ ์ค๊ดํธ๋ก ํ๊ทธ๋ฅผ ์ถ๊ฐํ๋ค.
- ์ด ํ๊ทธ์ ์ ์ฅ์ ์์น๋ฅผ ์ ๋ฌํ๋ค.
- constant hashing
- ์ผ๋ฐ์ ์ผ๋ก constant hashing์ ์ด์ฉํ๋๋ก ํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ชจ๋ ์ธ์คํด์ค๊ฐ ์ง์ํ ๋๋ ๊ทธ์ ๋ง๋ ์ธ์คํด์ค๋ฅผ ์๋ ค์ค ์ ์๋ ์๋ฃจ์ ์ ์๊ฐํ๊ฑฐ๋ ๋ ๋์ค ํด๋ฌ์คํฐ๋ฅผ ๊ณ ๋ คํด์ผ ํฉ๋๋ค.
- ๋ ๋์ค ํํฐ์
๋์ ๊ตฌํ
- ํํฐ์
๋์ ํด๋ผ์ด์ธํธ , ํ๋ก์ , ์ง์ ๋ผ์ฐํฐ ์ ๊ฐ์ ์ฌ๋ฌ ๊ณ์ธต์ผ๋ก ๊ตฌ์ฑ๋ ์ ์์ต๋๋ค.
- ํด๋ผ์ด์ธํธ๋ constant hashing์ ๊ตฌํ ์ด๊ณ
- ํ๋ก์ ๊ณ์ธต์ ๋ชจ๋ ๋ ๋์ค์ ์ง์๋ฅผ ํ๋ก์ํ๊ณ , ์ ํ๋ฆฌ์ผ์ด์
์ ํํฐ์
๋์ ์ํํ๋ ์ถ๊ฐ์ ์ธ ๊ณ์ธต ์ด๋ค.
- ํ๋ก์๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ํด๋ผ์ด์ธํธ ๊ณ์ธต์์๋ ํํฐ์ ๋์ด ์ผ์ด๋๊ณ ์๋์ง ์ ํ์๊ฐ ์๋ค.
- ํ๋ก์ ๊ณ์ธต์ ๋ํ ์๋ ํธ์ธํ๋ก์(twemproxy) ํ๋ก๊ทธ๋จ์ผ๋ก ์ดํ ์๊ฐํ๋๋ก ํ๋ค.
- ์ง์ ๋ผ์ฐํฐ ๊ณ์ธต์ ์ ํ๋ฆฌ์ผ์ด์
์์ ๋ณด์ด์ง ์๋๋ค.
-์ง์ ๋ผ์ฐํฐ ๊ณ์ธต์ ์ธ๋ถ ํ๋ก๊ทธ๋จ์ด ์๋๊ณ , ๋ฐ์ดํฐ ์ ์ฅ์๋ค.
- ๋ ๋์ค ์ธ์คํด์ค๋ก ์์ฒญํ๋ ๋ชจ๋ ์ปค๋ฉ๋๊ฐ ์ง์ ๋ผ์ฐํฐ ๊ณ์ธต์์ ์ฑ๊ณต์ ์ธ ๊ฒ์ ๋ ๋์ค ์ธ์คํด์ค๊ฐ ์ปค๋งจ๋๋ฅผ ๋ ๋์ค ํด๋ฌ์คํฐ์ ์ ์ ํ ๋ ๋์ค ์ธ์คํด์ค์ ํ์คํ ์ ๋ฌํ๊ธฐ ๋๋ฌธ์ด๋ค.
- ๋ ๋์ค ํด๋ฌ์คํฐ๋ ์ง์ ๋ผ์ฐํฐ๊ฐ์ด ๋์ํ๋ค.
- ์ด๋ค ํํ์ ํํฐ์ ๋์ ์ฌ์ฉํ๋๋ผ๋, ๋ชจ๋ ๋ ๋์ค ์ปค๋งจ๋๋ฅผ ์ฌ์ฉํ ์ ์๋ค๊ณ ๋ ํ ์ ์๋ค.
- ํํฐ์ ๋์ด ์ ์ฉ๋ ๋ ๋์ค์์ ์ผ๋ถ ์ปค๋งจ๋๋ ๋์ํ์ง ์๋๋ค.
- ํ ๋์ ๋ ๋์ค๊ฐ ์๋๋ผ ๋ ๋์ค ์ธ์คํด์ค ํด๋ฌ์คํฐ๊ฐ ์ฌ์ฉ ๊ฐ๋ฅํ ์ํ์ด๊ธฐ ๋๋ฌธ์ ๋ ๋์ค ์๋ฒ๋ฅผ ๊ฒ์ฌํ๋ ์ปค๋งจ๋๊ฐ ๋์ํ ์ ์๋ค.
- ์ฌ๋ฌ ์ฅ๋น์ ๊ฑธ์ณ ํค๊ฐ ๋ถ์ฐ๋๊ธฐ ๋๋ฌธ์ ์ฌ๋ฌ ๊ฐ์ ํค๋ฅผ ๋งค๊ฐ๋ณ์๋ก ๋ฐ๋ ์ปค๋งจ๋๋ ์ญ์ ๋์ํ ์ ์๋ค.
- ํํฐ์
๋์ ํด๋ผ์ด์ธํธ , ํ๋ก์ , ์ง์ ๋ผ์ฐํฐ ์ ๊ฐ์ ์ฌ๋ฌ ๊ณ์ธต์ผ๋ก ๊ตฌ์ฑ๋ ์ ์์ต๋๋ค.
- ํธ์ธํ๋ก์(twemproxy) ๋ก ์๋ ์ค๋ฉํ๊ธฐ
- ์์ฉ ํ๊ฒฝ์์ ์ธ ์ ์๋ nutcracker ๋ผ๊ณ ๋ ์๋ ค์ ธ ์์๋ค.
- ํธ์ธํ๋ก์๋ ํธ์ํฐ์์ ๋ง๋ค์ด์ก๊ณ , 2012๋ ์ ๋ฐฐํฌ๋์์ผ๋ฉฐ, ์ํ์น ๋ผ์ด์ ์ค 2.0๋ฒ์ ์ด๋ค.
- ํธ์ธํ๋ก์๋ constant hashing๋ฟ ์๋๋ผ ๋ค์ค ํด์ฑ ๋ชจ๋๋ฅผ ์ง์ํ๋ ์ค๋ฉ์ ๊ตฌํํ ๋ ๋์ค์ ๋งด์บ์๋ ํ๋กํ ์ฝ์ ๋ํ ํ๋ก์๋ก ๊ฐ๋ณ๊ณ ๋น ๋ฅด๋ค.
- ๋ํ ์์ฒญ๊ณผ ์๋ต์ผ๋ก ๊ตฌ์ฑ๋ ํ์ดํ๋ผ์ธ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์๊ณ ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฌ ์๋ฒ์ ์๋์ผ๋ก ์ค๋ฉํ ์ ์๋๋ก ์๋ฒ ์ฐ๊ฒฐ์ ์ง์์ ์ผ๋ก ์ ์งํ ์ ์๋ค.
- ์ด๋ฏธ ํํฐ๋ ์คํธ, ํ ๋ธ๋ฌ, ํธ์ํฐ, ๋ฐ์ธ, ์ํค๋ฏธ๋์ด, ๋, ์ค๋ ์ฑ๊ณผ ๊ฐ์ ํ์ฌ๋ค์ด ์์ฉ ํ๊ฒฝ์์ ํธ์นํ๋ก์๋ฅผ ์ฌ์ฉํ๋ค.
- ๊ณต์ git : https://github.com/twitter/twemproxy
- mac์ฉ brew : http://macappstore.org/nutcracker/
- ํธ์ธํ๋ก์๋ฅผ ํ๋๋ง ์ฌ์ฉํ๋ฉด ๋จ์ผ ์ฅ์ ํฌ์ธํธ๊ฐ ๋๊ธฐ ๋๋ฌธ์ ์ฌ๋ฌ๋์ ํ๋ก์ ์๋ฒ๋ฅผ ๋๊ณ ๋ก๋๋ฐธ๋ฐ์๋ฅผ ๋๋ ํ์์ผ๋ก ์ฐ๊ฒฐํด ์ฌ์ฉํ ์ ์๋ค.
- ๋ ๋์ค๋ฅผ ์ฒ์ ์ค๊ณํ ๋๋ ๋ ๋์ค๋ฅผ ๋งค์ฐ ๊ฐ๋ณ๊ณ ๋น ๋ฅด๊ฒ ํ๋ ๊ฒ์ด ๋ชฉ์ ์ด์๋ค.
- ์ง๊ธ๊น์ง ๋ ๋์ค๋ฅผ ์ฌ์ฉํ ์ ์๋ topology๋ ๋ง์คํฐ/์ฌ๋ ์ด๋ธ์ topology์๋ค.
- ์ด topology๋ ๋ง์คํฐ๊ฐ ๋ชจ๋ ์ฐ๊ธฐ ์์ ์ ๋ฐ๊ณ , ๊ทธ ๋ณ๊ฒฝ์ ํ๋ ๋๋ ์ฌ๋ฌ ์ฌ๋ ์ด๋ธ์ ๋ณต์ ํ๋ ๋ฐฉ์์ด์๋ค.
- ์ด๋ ํ ์ข ๋ฅ์ ์๋ ํ์ผ์ค๋ฒ ๋๋ ๋ฐ์ดํฐ ์ค๋ฉ ์์ด๋ ๋ง์คํฐ/์ฌ๋ ์ด๋ธ topology๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
- ๋ง์คํฐ/์ฌ๋ ์ด๋ธ topology๋ ๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ์ ์๋๋ฆฌ์ค์์ ์ ๋์ํ๋ค.
- ๋ง์คํฐ๋ ํ์ํ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ธฐ์ ์ถฉ๋ถํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ฐ๊ณ ์๋ค.
- ์ฝ๊ธฐ ์ฑ๋ฅ์ ๋ ์ข๊ฒ ํ๋ํ๊ฑฐ๋ ๋คํธ์ํฌ ๋์ญํญ์ด ๋ฌธ์ ์ผ ๋ ์ฌ๋ ์ด๋ธ๋ฅผ ๋ ์ถ๊ฐํ ์ ์๋ค. (์ ์ฒด ์ฝ๊ธฐ ์ฉ๋์ด ํ๋์จ์ด ์ฑ๋ฅ๋ณด๋ค ํด ๋)
- ๋ง์คํฐ ์๋ฒ์ ์ ๊ฒ์ด ํ์ํ ๋, ์ ํ๋ฆฌ์ผ์ด์ ์ ๋์์ ์ค์งํ ์ ์๋ค.
- ์ฌ๋ ์ด๋ธ์ ๋ง์คํฐ์ ๋์ผํ ๋ฐ์ดํฐ๊ฐ ์กด์ฌํ๋ค.
- ํ์ง๋ง ๋ง์คํฐ/์ฌ๋ ์ด๋ธ topology๋ ๊ทธ ๋ฐ์ ์๋๋ฆฌ์ค์์๋ ์ ๋์ํ์ง ์๋๋ค.
- ๋ฐ์ดํฐ ์งํฉ์ด ๋ง์คํฐ ๋ ๋์ค ์ธ์คํด์ค์์ ์ฌ์ฉํ ์ ์๋ ๋ฉ๋ชจ๋ฆฌ๋ณด๋ค ํฌ๋ค.
- ๋ง์คํฐ ๋ ๋์ค ์ธ์คํด์ค์์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๋, ๋ง์คํฐ์ ์ฐ๊ฒฐ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฉ์ถ ์ ์๋ค.
- ์ฌ๋ฌ ๋ ธ๋์ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฐฐํด์ผ ํ๋ค.
- ๋จ์ผ ์ฅ์ ์ (a single point of failure)์ ํ์ฉํ์ง ๋ชปํ๋ค.
- 2011๋ ์ด๋ฐํ ๋ฅด ์ฐํ๋ฆฌํฌ๋ ๋ง์คํฐ/์ฌ๋ ์ด๋ธ topology ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ํ๋ก์ ํธ๋ฅผ ์์ํ๊ณ , ๋ ๋์ค ํด๋ฌ์คํฐ๋ฅผ ๊ฐ๋ฐํ๊ธฐ๋ณด๋ค๋ ์๋ ํ์ผ์ค๋ฒ๋ฅผ ํด๊ฒฐํ๊ธฐ๋ก ๊ฒฐ์ ํ๋ค.
- ๋ง์คํฐ ์ธ์คํด์ค์์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ฉด ๋ง์คํฐ ์ฌ๋ ์ด๋ธ ์ธ์คํด์ค ์ค ํ๋๊ฐ ๋ง์คํฐ๋ก ์น๊ฒฉ๋์ด์ผ ํ๊ณ , ๋๋จธ์ง ์ฌ๋ ์ด๋ธ ์ธ์คํด์ค๋ ์๋ก์ด ๋ง์คํฐ์ ๋ํ ์ฌ๋ ์ด๋ธ๋ก ์ฌ๊ตฌ์ฑ ํ ์ ์์ด์ผ ํ๋ค.
- ๋ ๋์ค ์ผํฐ๋์ด ์๊ธฐ ์ ์๋ ํ์ผ ์ค๋ฒ ์์ ์ ์๋์ผ๋ก ํ๋๋ฐ ๊ฒฐ์ฝ ์์ ์ ์ด์ง ์์๋ค.
- ๋ ๋์ค ์ผํฐ๋์ ๊ธฐ์กด์ ๋ ๋์ค ๋ง์คํฐ๊ฐ ์๋์ด ์๋๋ฉด ์ฌ๋ ์ด๋ธ ์ค ํ๋๋ฅผ ๋ง์คํฐ๋ก ์๋ ์น๊ฒฉํ ์ ์๋๋ก ์ค๊ณ๋ ๋ถ์ฐ ์์คํ ์ด๋ค.
- ๋ ๋์ค ๋ง์คํฐ๊ฐ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ๊ณ ์๊ณ , ์ฌ๋ ์ด๋ธ ๋ ๋์ค๋ ๋ง์คํฐ์ ๋ํ ๋ณต์ฌ๋ณธ์ ๊ฐ๊ณ ์์ด, ๋ ๋์ค ์ผํฐ๋์ ๋ ธ๋์ ๋ฐ์ดํฐ๋ฅผ ๋ถ์ฐํ์ง ์๋๋ค.
- ์ฆ ๋ ๋์ค ์ผํฐ๋์ ๋ถ์ฐ ๋ฐ์ดํฐ ์ ์ฅ์๊ฐ ์๋๋ค.
- ๋ ๋์ค ์ผํฐ๋์ ์ฌ์ฉํ๋ ์์ฃผ ์ผ๋ฐ์ ์ธ ์ํคํ ์ฒ๋ ํ๋์ ๋ ๋์ค ์๋ฒ๋ง๋ค ํ๋์ ๋ ๋์ค ์ผํฐ๋์ ์ค์นํ๋ ๊ฒ์ด๋ค.
- ๋ ๋์ค ์ผํฐ๋์ ๋ ๋์ค ์๋ฒ์ ๋ถ๋ฆฌ๋ ํ๋ก์ธ์ค์ด๋ฉฐ, ๋ ๋์ค ์๋ฒ์๋ ๋ค๋ฅธ ํฌํธ๋ฅผ ์ฐ๋ค.
- ๊ธฐ์กด ๋ ๋์ค์ ๋ ๋์ค ์ผํฐ๋์ ์ฃผ์ ์ฐจ์ด์ ์ ๋ ๋์ค ์ผํฐ๋์ ๋ค๋ฅธ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ค๋ ์ ์ด๋ฉฐ, ์ผํฐ๋์ ์ฌ์ฉํ๋ ค๋ฉด ์ผํฐ๋์ ์ง์ํ๋ ๋ ๋์ค ํด๋ผ์ด์ธํธ๋ฅผ ๋ฐ๋ก ์ค์นํด์ผ ํ๋ค.
- ํด๋ผ์ด์ธํธ๋ ํญ์ ๋ ๋์ค ์ธ์คํด์ค์ ์ฐ๊ฒฐ๋ผ ์์ง๋ง ์ฐ๊ฒฐํด์ผ ํ ๋ ๋์ค ์ธ์คํด์ค๋ฅผ ์ฐพ๊ธฐ ์ํด์๋ ๋ ๋์ค ์ผํฐ๋์ ์ง์ํด์ผ ํ๋ค.
- docker๋ฅผ ์ด์ฉํ ๋ ๋์ค ์ผํฐ๋ ์ค์ ๋ฐ ์คํ : https://hub.docker.com/r/erichsu/redis-sentinel/
- ๊ฐ๋จํ ์ค์ ํ์ผ์ /conf ํด๋ ์๋ ๋ฃ์ด๋์๋ค.
- sentinel monitor [master-name] [ip] [redis-port] [quorum]
- ๋ชจ๋ํฐํ ๋ง์คํฐ redis ์ ํ
- quorum : ์๋ก์ด ๋ง์คํฐ๋ฅผ ์ ์ถํ๊ธฐ ์ ํ์ฌ์ ๋ง์คํฐ๊ฐ ๋ค์ด ์ํ์์ ๋์ํด์ผ ํ๋ ์ผํฐ๋์ ์ต์ ๊ฐ์
- sentinel down-after-milliseconds [master-name] [milliseconds]
- ๋ช ์ธํ ๋ฐ๋ฆฌ์ด ๋์ ๋ง์คํฐ์ ๋๋ฌํ์ง ๋ชปํ๋ฉด (PING์ ์๋ต์ ๋ฐ์ง ๋ชปํ๋ฉด), ๋ค๋ฅธ์ผํฐ๋์๊ฒ ๋ง์คํฐ๊ฐ ๋ค์ด๋ฌ์์ ์๋ฆผ
- sentinel failover-timeout [master-name] [milliseconds]
- ์งง์ ์๊ฐ ๋ด์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๋ง์คํฐ์ ํ์ผ์ค๋ฒ๋ฅผ ํผํ๊ธฐ ์ํ ์ค์
- ํ๋ฒ ๋ง์คํฐ์์ ํ๋ฝํ ๋ ธ๋๋ failover ์ํฉ์ด ๋ค์ ์๋ fileover-timeout ์๊ฐ ๋ด๋ผ๋ฉด ๋ง์คํฐ ํ๋ณด๊ตฐ์ ๋ค์ง ๋ชปํ๋๋ก ํด์ฃผ๋ timeout ์ค์
- sentinel parallel-syncs [master-name] [numslaves]
- ์๋ก์ด ๋ง์คํฐ์ ์ฐ๊ฒฐํ๊ธฐ ์ํด ๋์์ ์ฌ์ค์ ๋ ์ ์๋ ์ฌ๋ ์ด๋ธ์ด ๊ฐฏ์.
- ์ด ํ๋ก์ธ์ค๋ฅผ ์งํํ๋ ๋์ ์ฌ๋ ์ด๋ธ๋ ํด๋ผ์ด์ธํธ์์ ์ฌ์ฉ ๋ถ๊ฐ๋ฅํ ์ํ๊ฐ ๋๋ค.
- ๋์์ ์ฌ์ฉ ๋ถ๊ฐ๋ฅํ ์ฌ๋ ์ด๋ธ์ ๊ฐ์๋ฅผ ์ต์ํํ๊ธฐ ์ํด parallel-sync๋ฅผ ๋ฎ์ ๊ฐ์ผ๋ก ํ๋ค.
- sentinel monitor [master-name] [ip] [redis-port] [quorum]
- sentinel์ ์ฐ์ด๋ java-client ๋ jedis์ด๋ค. (https://scalegrid.io/blog/high-availability-with-redis-sentinels-connecting-to-redis-masterslave-sets/)
- redis sentinel์ ํ๋์
๋ ์ํ์์๋ ๋ฐ์ดํฐ๋ฅผ ์์ด๋ฒ๋ฆฌ๊ฒ ๋๋ค. ์๋๋ฆฌ์ค๋ ๋ค์๊ณผ ๊ฐ๋ค.
- 3๊ฐ์ ๋ ๋์ค ์ธ์คํด์ค๊ฐ ์๋ค. ํ๋๋ ๋ง์คํฐ๊ณ ๋์ ๋ณต์ ๋ณธ์ด๋ค. ๊ฐ ๋ ๋์ค ์ธ์คํด์ค์๋ ๋ ๋์ค ์ผํฐ๋์ด ์๋ค.
- ํ์ฌ ๋ง์คํฐ์ ์ฐ๊ฒฐ๋ ํด๋ผ์ด์ธํธ๊ฐ ์์ผ๋ฉฐ, ์ฐ๊ธฐ ์์ ์ ํ ์ ์๋ค.
- ๋คํธ์ํฌ ํํฐ์ ์ด ๋ฐ์ํด ํ์ฌ ๋ง์คํฐ๊ฐ ์ฌ๋ ์ด๋ธ๋ก๋ถํฐ ๋ถ๋ฆฌ๋๊ณ ์ฌ๋ ์ด๋ธ๋ผ๋ฆฌ๋ง ์ฌ์ ํ ํต์ ํ ์ ์๋ค๋ฉด, ์ฌ๋ ์ด๋ธ ์ค ํ๋๊ฐ ๋ง์คํฐ๋ก ์น๊ฒฉ๋๋ค.
- ์ฌ๋ ์ด๋ธ ์ค ํ๋๊ฐ ๋ง์คํฐ๋ก ์น๊ฒฉ๋๋ ์ค์, ๋ ๋์ค ํด๋ผ์ด์ธํธ๋ ๊ฒฉ๋ฆฌ๋ ๋ง์คํฐ์ ์ฐ๊ธฐ ์์ ์ ๊ณ์ํ๋ค.
- ๋ค์ ๋คํธ์ํฌ๊ฐ ์ ๋์ํด์ ๋ชจ๋ ๋ ๋์ค ์๋ฒ ๊ฐ์ ํต์ ์ด ์ ๋๋ค๋ฉด, ๋๋ถ๋ถ์ ์ผํฐ๋์ ์ด์ ์ ๋ง์คํฐ๊ฐ ์๋ก์ด ๋ง์คํฐ์ ์ฌ๋ ์ด๋ธ๊ฐ ๋๋ ๊ฒ์ด ๋์ํ ๊ฒ์ด๋ค.
- ์ด๋ฐ ์ผ์ด ๋ฐ์ํ ๋ ํ๋ก์ธ์ค๊ฐ ๋ฐ์ดํฐ ๋๊ธฐํ๊ฐ ์ด๋ฃจ์ด์ง์ง ์๊ธฐ ๋๋ฌธ์ ๋ ๋์ค ํด๋ผ์ด์ธํธ๊ฐ ์ ๋ฌํ ๋ชจ๋ ์ฐ๊ธฐ ์์ ์ ์์ด๋ฒ๋ฆฐ๋ค.
- ์ฆ ๋ ๋์ค ์ผํฐ๋์ ๋์ ๊ฐ์ฉ์ฑ๊ณผ ์๋ ํ์ผ์ค๋ฒ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ง๋ง, ๋ค์ค ๋ ๋์ค ์ธ์คํด์ค ๊ฐ์ ๋ฐ์ดํฐ ๋ถ์ฐ ๋ฌธ์ ๋ ํด๊ฒฐํ์ง ๋ชปํ๋ค. ๋ ๋์ค ํด๋ฌ์คํฐ๋ ๋ค๋ฅธ ์ ๊ทผ ๋ฐฉ๋ฒ์ผ๋ก ํด๋น ๋ฌธ์ ๋ฅผ ๋ ๋ค ํด๊ฒฐํ๋ค.
- ๋ ๋์ค ์ผํฐ๋ ๊ทธ๋ฆผ ์ฐธ์กฐ (http://senlinzhan.github.io/2017/04/08/redis-sentinel/)
- ๋ ๋์ค ํด๋ฌ์คํฐ๋ ์ฌ๋ฌ ๋ ๋์ค ์ธ์คํด์ค์ ๋ฐ์ดํฐ๋ฅผ ์๋์ผ๋ก ์ค๋ฉํ ์ ์๋๋ก ์ค๊ณ๋๊ณ , ๋คํธ์ํฌ ํํฐ์ ์ด ๋ฐ์ํ๋๋ผ๋ ์ด๋ ์ ๋์ ๊ฐ์ฉ์ฑ์ ์ ๊ณตํ๋ค.
- ํผ๋ ์ํ์ ์๋๋ฆฌ์ฅ์๋ ๊ฐํ ์ผ๊ด์ฑ์ ์ ๊ณตํ์ง ์๋๋ค.
- ๋ ๋์ค ์ผํฐ๋๊ณผ ๋ฌ๋ฆฌ ๋ ๋์ค ํด๋ฌ์คํฐ๋ ์คํ ๊ฐ๋ฅํ ํ๋์ ํ๋ก์ธ์ค๋ง ํ์๋ก ํ๋ค.
- ๊ทธ๋ฌ๋ ๋ ๋์ค๊ฐ ์ฌ์ฉํ๋ ํฌํธ๋ 2๊ฐ๋ค.
- ์ฒซ๋ฒ์งธ ํฌํธ๋ ํด๋ผ์ด์ธํธ๋ฅผ ์ํด ์ฌ์ฉ๋๊ณ , ๋๋ฒ๏ฟฝ์งธ ํฌํธ๋ ๋ ธ๋ ๊ฐ์ ํต์ ์ ์ํ ๋ฒ์ค๋ก ์ฌ์ฉ๋๋ค.
- ์ซ์๊ฐ ๋์ ํฌํธ๋ ๋ฌธ์ ํ์ง, ํ์ผ ์ค๋ฒ, ์ฌ์ฌ๋ฉ ๋ฑ๊ณผ ๊ฐ์ ๋ฉ์์ง๋ฅผ ๊ตํํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ค.
- ๋ ๋์ค ํด๋ฌ์คํฐ์ ๋ฒ์ค๋ ๋ ๋์ค ๋ ธ๋ ๊ฐ์ ๋ฉ์์ง๋ฅผ ๊ตํํ๊ธฐ ์ํด ๋ฐ์ด๋๋ฆฌ ํ๋กํ ์ฝ์ ์ฌ์ฉํ๋ค.
- ์ซ์๊ฐ ๋ฎ์ ํฌํธ๋ ์ค์ ์์ ๋ช ์ธํ๊ณ , ๋ ๋์ค๋ ์ซ์๊ฐ ๋ฎ์ ํฌํธ์ 10,000์ ๋ํด ๋์ ํฌํธ๋ฅผ ํ ๋นํ๋ค.
- ๋ ๋์ค ํด๋ฌ์คํฐ topology๋ ํ ๋ฉ์์ง ๋คํธ์ํฌ์ด๋ค.
- ๋ชจ๋ ๋ ธ๋๋ TCP ์ฐ๊ฒฐ ๋ฐฉ์์ผ๋ก ์๋ก ์ฐ๊ฒฐ๋๋ค.
- ๋ ๋์ค ํด๋ฌ์คํฐ ์ํ๊ฐ ์์ ์ ์ด๊ฒ ๋๋ ค๋ฉด ์ต์ 3๊ฐ์ ๋ง์คํฐ๊ฐ ํ์ํ๋ค.
- ๋ชจ๋ ๋ฐ์ดํฐ๋ ๋ง์คํฐ ๋จ์๋ก ์ค๋ฉ๋๊ณ ์ฌ๋ ์ด๋ธ ๋จ์๋ก ๋ณต์ ๋๋ค.
- ๋ง์คํฐ๋ง๋ค ์ต์ ํ๋์ ๋ณต์ ๋ณธ์ ๋๋ ๊ฒ์ ์ถ์ฒํ๋ค. ๋ณต์ ๋ณธ์ด ํ๋๋ ์์ ๊ฒฝ์ฐ ๋ง์คํฐ ๋ ธ๋๊ฐ ์๋์ด ์๋๋ฉด ํด๋น ๋ฐ์ดํฐ๋ฅผ ์๊ฒ ๋๋ค.
- ๋ ๋์ค ์ผํฐ๋๊ณผ ๋ฌ๋ฆฌ ํ์ผ ์ค๋ฒ๊ฐ ๋ ๋์ค ํด๋ฌ์คํฐ์์ ๋ฐ์ํ๋ค๋ฉด, ์ฌ๋ ์ด๋ธ๊ฐ ๋ง์คํฐ๋ก ์น๊ฒฉํ ๋๊น์ง, ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๋ง์คํฐ๋ก ํ ๋น๋ ์ฌ๋กฏ์ ํค๋ ์ฌ์ฉํ ์ ์๋ค.
- ์ฌ๋ ์ด๋ธ ์น๊ฒฉ์ด ์ฆ๊ฐ์ ์ด์ง ์๊ทธ ๋๋ฌธ์ ํ์ผ์ค๋ฒ ๋ฐ์์ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉ ๋ชปํ ์๋ ์๋ค.
- ๋ ๋์ค๊ฐ ํด๋ฌ์คํฐ ๋ชจ๋์์ ๋์ ์ค์ด๋ฉด ๋ ๋์ค์ ์ธํฐํ์ด์ค๋ ์ฝ๊ฐ ๋ฐ๋๊ธฐ ๋๋ฌธ์, ๋ ๋๋ํ ํด๋ผ์ด์ธํธ๊ฐ ํ์ํ๋ค
- ์๋ฅผ๋ค์ด redis-cli๋ฅผ ํตํด ์ฐ๊ฒฐํ๋ ค๋ฉด -c ๋งค๊ฐ๋ณ์ ๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค. ๋ง์ฝ ๊ทธ๋ฅ ์ ์ํ๋ฉด ์ฑ๊ธ ์ธ์คํด์ค ๋ชจ๋๋ก ์ ์๋จ
- ํด์ ์ฌ๋กฏ
- ๋ ๋์ค ํด๋ฌ์คํฐ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ค๋ฉํ๊ธฐ ์ํด ํํฐ์ ๋ ๋ฐฉ๋ฒ์ ํด์ ํํฐ์ ๋ ๋ฉ์๋์ ๋น์ทํ์ง๋ง, ๋ ๋์ค ํด๋ฌ์คํฐ๋ง์ ํํฐ์ ๋ ๋ฐฉ๋ฒ์ ํญ์ ๊ณ ์ ๊ฐ์ผ๋ก ์ ์ฉ๋๋ค.
- ๋ ๋์ค ํด๋ฌ์คํฐ์ ๊ณ ์ ๊ฐ์ 16,384๋ค.
- ๋ ๋์ค์์๋ ์ด ํํฐ์ ๋ ๋ฉ์๋๋ฅผ ํด์ ์ฌ๋กฏ์ด๋ผ ๋ถ๋ฅธ๋ค.
- ๋ ๋์ค ํด๋ฌ์คํฐ์ ๊ฐ ๋ง์คํฐ๋ 16,384 ์ฌ๋กฏ์ค ์ผ๋ถ๋ฅผ ์์ ํ๋ค.
- ํค๋ฅผ ์ ์๋ก ๋ณํํ๊ธฐ ์ํด CRC-16 ํด์ ํจ์ ๋ฅผ ์ฌ์ฉํ๊ณ , ํด๋น ์ ์๊ฐ์ด 16,385๋ก ๋ชจ๋ ์ฐ์ฐํ ๊ฐ์ด ํด์ ์ฌ๋กฏ์ด๋ค.
- ๋ง์คํฐ์ ๋ํ ์ฌ๋กฏ์ ์๋ ์ฌ๋ถํฌ๋ ์๋ค. ๊ฐ ๋ง์คํฐ์ x๊ฐ์ ์ฌ๋กฏ์ ์๋์ผ๋ก ํ ๋นํด์ผ ํ๋ค.
- ํด์ ํ๊ทธ
- ๋ค์ค ํค ์์ ์ ์งํํ๋ ค๋ฉด ๋์ผ ๋ ธ๋์ ์ ์ฅ๋ ๋ชจ๋ ํค๊ฐ ํ์ํ๋ฉฐ, ํด์ ํ๊ทธ๋ ๋ ๋์ค ํด๋ฌ์คํฐ์์ ๋ค์ค ํค๋ฅผ ์ฌ์ฉํ ์ ์๋ ์ ์ผํ ๋ฐฉ๋ฒ์ด๋ค.
- ํด์ ํ๊ทธ๋ ํธ์ธํ๋ก์๋ฅผ ์ด์ฉํ ๊ธฐ๋ฅ๊ณผ ๋งค์ฐ ๋น์ทํ๋ค.
- ํด์ ํจ์๋ฅผ ์ ์ฉํด ๋์ผํ ํด์ ์ฌ๋กฏ์ ์ฌ๋ฌ ๊ฐ์ ํค ์ด๋ฆ์ ์ ์ฅํ ์ ์๋๋ก ์ฌ์ฉ๋๋ค.
- ID๋ก ์๋ณ๋๋ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ ค๋ฉด ๋ค์์ฒ๋ผ ํค ์ด๋ฆ์ ๋ณ๊ฒฝํ ์ ์๋ค.
- SADD {user123}:friends:usa "John" "Bob"
- SADD {user123}:friend:brazil "Max" "Hugo"
- SUNION {user123}:all_friends {user123}:friends:usa user123}:friend:brazil
- ์ด ๋ฐฉ์์ user123์ด๋ผ๋ ํด์ํ๊ทธ(์ค๊ดํธ๋ก ๊ตฌ๋ถ๋จ)๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์, ๋ชจ๋ ํค๊ฐ ๋์ผํ ์ฌ๋กฏ์ ์ ์ฅ๋๋ค.
- ์๋๋ ์ค์ ๋ ๋์ค ํด๋ฌ์คํฐ๋ฅผ ์์ฑํ๊ณ ์ฌ๋ ์ด๋ธ๋ฅผ ๋ง๋ค๊ณ command๋ฅผ ํ ์คํธ ํด๋ณธ ๊ฒฐ๊ณผ์ด๋ค.
- COMMAND
- master node ์ถ๊ฐ
- redis-server --port [port] --cluster-enabled yes --cluster-config-file node-5000.conf --cluster-node-timeout 2000 --cluster-slave-validity-factor 10 --cluster-migration-barrier 1 --cluster-require-full-coverage yes --dbfilename dump-5000.rdb --daemonize yes
- slot ์ง์
- CLUSTER ADDSLOT {[from]..[to]}
- ์ํฌํฌ ์ค์ (ํด์ ์ฌ๋กฏ์ ๋ํ ์ถฉ๋์ด ์์ ๊ฒฝ์ฐ์ ์ฐ์ ์์)
- CLUSTER SET-CONFIG-EPOCH [epoch no]
- cluster join
- CLUSTER MEET [host] [port]
- cluster node ํ์ธ
- CLUSTER NODES
- slave ๋ณต์ ๋ณธ ์ถ๊ฐ
- CLUSTER REPLICATE [node-id]
- ๋ ๋์ค ํด๋ฌ์คํฐ์์ ์ฝ๊ธฐ๋ฅผ ํ์ฅํ๊ธฐ ์ํด ์ฌ๋ ์ด๋ธ์ ์ฐ๊ฒฐํด์ READONLY ์ปค๋งจ๋๋ก ์ฌ๋ ์ด๋ธ๋ฅผ ์ฝ๊ธฐ ์ ์ฉ์ผ๋ก ๋ณ๊ฒฝํ ์ ์๋ค.
- ์ฌ๋ ์ด๋ธ๊ฐ ์ฝ๊ธฐ ์ ์ฉ ๋ชจ๋์ผ ๋, ์ฌ๋ ์ด๋ธ๋ ์์ ์ด ์ฒ๋ฆฌํ ์ ์๋ ์ง์๋ฅผ ๋ค๋ฅธ ๋ ธ๋๋ก ์ ๋ฌํ์ง ์๋๋ค.
- ์ฒ๋ฆฌํ ์ ์๋ ์ง์๋ง ๋ค๋ฅธ ๊ณณ์ผ๋ก ์ ๋ฌํ๋ค.
- ์ฝ๊ธฐ ์ ์ฉ ๋ชจ๋์ ์ ์ผํ ๋จ์ ์ ๋ฐ์ดํฐ์ ๋ณ๊ฒฝ ๋๋ ์ถ๊ฐ ์ ์๋ก์ด ๊ฐ ๋์ ์ค๋๋ ๊ฐ์ ์ฝ์ ์๋ ์๋ค๋ ์ ์ด๋ค.
- READWRITE ์ปค๋งจ๋๋ก ์ฝ๊ธฐ ์ ์ฉ ๋ชจ๋๋ฅผ ์ข ๋ฃํ ์ ์๋ค.
- ์ฌ๋กฏ ์ฌ์ค๋ฉ ๋ฐ ์ฎ๊ธฐ๊ธฐ
- ํด์ ์ฌ๋กฏ์ ์ํ๋ฅผ importing์ผ๋ก ๋ณ๊ฒฝ : CLUSTER SETSLOT [hash-slot] IMPORTING [source-id]
- ํด์ ์ฌ๋กฏ์ ๋ฐ๋ ๊ณณ์์ ์คํ
- ํด์ ์ฌ๋กฏ์ ์ํ๋ก migrating์ผ๋ก ๋ณ๊ฒฝ : CLUSTER SETSLOT [hash-slot] MIGRATING [destinationd-id]
- ํด์ ์ฌ๋กฏ์ ๋ณด๋ด๋ ๊ณณ์์ ์คํ
- ํด์ ์ฌ๋กฏ์ ๋
ธ๋์ ๋ณด๋ : CLUSTER SETSLOT [hash-slot] NODE [owner-id]
- source node์ destination node์์ ๋ ๋ค ์คํ
- ํด์ ์ฌ๋กฏ์ ์ํ(importing, migrating)๋ฅผ ์ ๋ฆฌ : CLUSTER SETSLOT [hash-slot] STABLE
- ํด์ ์ฌ๋กฏ์ ์ํ๋ฅผ importing์ผ๋ก ๋ณ๊ฒฝ : CLUSTER SETSLOT [hash-slot] IMPORTING [source-id]
- ๊ทธ ์ธ ์ปค๋งจ๋
- CLUSTER COUNTKEYSINSLOT [slot] ์ปค๋งจ๋๋ ์ฃผ์ด์ง ์ฌ๋กฏ์ ํค ๊ฐ์๋ฅผ ๋ฆฌํดํ๋ค.
- CLUSTER GETKEYSINSLOT [slot] [amount] ์ปค๋งจ๋๋ ์ฌ๋กฏ์ ํฌํจ๋ ํค ์ด๋ฆ์ ๊ฐ์ง ๋ฐฐ์ด์ ๋ช ์ธํ ํฌ๊ธฐ๋งํผ ๋ฆฌํดํ๋ค.
- MIGRATE [host] [port] [key] [db] [timeout] ์ปค๋งจ๋๋ ํค๋ฅผ ์ฌ๋ฌ ๋ ๋์ค ์ธ์คํด์ค๋ก ์ฎ๊ธด๋ค.
- ๋
ธ๋ ์ญ์
- CLUSTER FORGET [node-id]
- master node ์ถ๊ฐ
(ํด๋ฌ์คํฐ์ฉ ๋ ๋์ค ์ด๊ธฐํ)
(๋
ธ๋ ์ถ๊ฐํ๊ณ ํด๋ฌ์คํฐ ๋
ธ๋์ ๋ ํ๋ฆฌ์นด๋ก ๋ณ๊ฒฝ)
(๋ ๋์ค ํด๋ฌ์คํฐ ๋ชจ๋์์ mset, mget ๋ถ๊ฐ)
- Reference : Redis ํต์ฌ์ ๋ฆฌ - ๋งฅ์ค์ฐ ๋ฐ์ด๋ธ์จ ๋ค ์ค๋ฐ, ํด๊ณ ๋กํ์ค ํ๋ฐ๋ ์ค ์ง์ | ๊น์ฉํ ์ฎ๊น
- Authors : song2 (tkagksmsen)