Redis๋ ๋ค์ํ ๋ฐ์ดํฐ ํ์ ๊ณผ ๋ฐ์ดํฐ ํ์ ๋ณ ์ปค๋งจ๋๋ฅผ ์ ๊ณตํฉ๋๋ค.
Key ์ค์ ํฌ์ธํธ
- Key๋ ๋ฌธ์์ด์ด๋ฏ๋ก ์ต๋ 512MB๊น์ง ๊ฐ๋ฅ
- ๊ธธ์ด ๋ฑ ๊ฐ๋ ์ฑ์ ๊ณ ๋ คํด์ผํ๊ณ , ์คํค๋ง๋ฅผ ์ ์งํ ์ ์๋๋ก ์ค๊ณํ ๊ฒ
- ex) user:1000:followers
Strings
๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ Redis ๋ฐ์ดํฐ ์ ํ
ํ ์คํธ, ์ง๋ ฌํ๋ ๊ฐ์ฒด ๋ฐ ์ด์ง ๋ฐฐ์ด์ ํฌํจํ ๋ฐ์ดํธ ์ํ์ค๋ฅผ ์ ์ฅ, ์ด๋ฏธ์ง ์ ์ฅ ๊ฐ๋ฅ
์บ์ฑ์ ์์ฃผ ์ฌ์ฉ๋์ง๋ง ์นด์ดํฐ๋ฅผ ๊ตฌํํ๊ณ , ๋นํธ ์ฐ์ฐ์ ์ํํ ์ ์๋ ๊ธฐ๋ฅ๋ ์ ๊ณต
๋จ์ผ ๋ฌธ์์ด์ ์ต๋ 512MB
์
- ๋ฌธ์์ด ์ ์ฅํ๊ณ ๊ฒ์
> SET user:1 minju
OK
> GET user:1
"minju"
- ์ง๋ ฌํ๋ JSON ๋ฌธ์์ด ์ ์ฅํ๊ณ ์ง๊ธ๋ถํฐ 100์ด ํ์ ๋ง๋ฃ๋๋๋ก ์ค์
> SET ticket:27 "\"{'username': 'minju', 'ticket_id': 321}\"" EX 100
- ์นด์ดํฐ ์ฆ๊ฐ
> INCR views:page:2
(integer) 1
> INCRBY views:page:2 10
(integer) 11
Bitmaps
String์ ํ์ฅ, bit ๋จ์ ์ฐ์ฐ
๋ฐ์ดํฐ ์ ์ฅ๊ณต๊ฐ ์ ์ฝ
์ ์๋ก ๋ ๋ฐ์ดํฐ๋ง ์นด์ดํ ๊ฐ๋ฅ
๋ฐ์ดํฐ on/off ๊ฐ๋ฅ - SETBIT
- ํ๋ฃจ ์ด ๋ฐฉ๋ฌธ์ ์ ์ธ๊ธฐ
Lists
๋ฌธ์์ด์ ๋ชฉ๋ก
Linked List์ ๊ฐ์ ํํ, ์คํ๊ณผ ํ ํํ ๊ตฌํ
๋ฐฑ๊ทธ๋ผ์ด๋ ์์คํ ์ ์ํ ๋๊ธฐ์ด ๊ด๋ฆฌ ๊ตฌ์ถ
Blocking ๊ธฐ๋ฅ์ ์ด์ฉํด Event Queue๋ก ์ฌ์ฉ
- ํธ์ํฐ ํผ๋ ๊ธฐ๋ฅ
- ํค๊ฐ ์์ ๋๋ง ๋ฐ์ดํฐ ์ ์ฅ ๊ฐ๋ฅ - LPUSHX / RPUSHX : ์ด๋ฏธ ์บ์ฑ๋์ด ์๋ ํผ๋์๋ง ์ ๊ท ํธ์์ ์ ์ฅํด์ ์์ฃผ ์ฌ์ฉํ๋ ์ ์ ์๊ฒ๋ง ๋ฐ์ดํฐ๋ฅผ ๋ฃ์ด์ค ์ ์์
์
- ๋ฆฌ์คํธ๋ฅผ ๋๊ธฐ์ด์ฒ๋ผ ์ทจ๊ธ(์ ์ ์ ์ถ)
> LPUSH work:queue:ids 101
(integer) 1
> LPUSH work:queue:ids 237
(integer) 2
> RPOP work:queue:ids
"101"
> RPOP work:queue:ids
"237"
- ๋ฆฌ์คํธ๋ฅผ ์คํ์ฒ๋ผ ์ทจ๊ธ(์ ์ , ํ์ถ)
> LPUSH work:queue:ids 101
(integer) 1
> LPUSH work:queue:ids 237
(integer) 2
> LPOP work:queue:ids
"237"
> LPOP work:queue:ids
"101"
- ๋ฆฌ์คํธ ๊ธธ์ด ์กฐํ
> LLEN work:queue:ids
(integer) 0
- ํ ๋ฆฌ์คํธ์์ ์์๋ฅผ atomicํ๊ฒ popํ๊ณ ๋ค๋ฅธ ๋ชฉ๋ก์ผ๋ก push
> LPUSH board:todo:ids 101
(integer) 1
> LPUSH board:todo:ids 273
(integer) 2
> LMOVE board:todo:ids board:in-progress:ids LEFT LEFT
"273"
> LRANGE board:todo:ids 0 -1
1) "101"
> LRANGE board:in-progress:ids 0 -1
1) "273"
- 100๊ฐ๋ฅผ ์ด๊ณผํ์ง ์๋ ๋ฆฌ์คํธ๋ฅผ ๋ง๋ค๋ ค๋ฉด ๋ค์์ ํธ์ถํ ๋๋ง๋ค(LTRIM) ํธ์ถ(LPUSH)
> LPUSH notifications:user:1 "You've got mail!"
(integer) 1
> LTRIM notifications:user:1 0 99
OK
> LPUSH notifications:user:1 "Your package will be delivered at 12:01 today."
(integer) 2
> LTRIM notifications:user:1 0 99
OK
Hashes
ํ๋์ key ์์ ์ฌ๋ฌ ๊ฐ์ field-value ์์ ์ปฌ๋ ์
field = subkey, field ๊ฐ์๋ ์ ํ ์์
๊ธฐ๋ณธ ๊ฐ์ฒด๋ฅผ ๋ํ๋ด๊ณ ์นด์ดํฐ๋ฅผ ๊ทธ๋ฃนํํ์ฌ ์ ์ฅ
์
- ๊ธฐ๋ณธ ์ฌ์ฉ์ ํ๋กํ์ ํด์๋ก ๋ํ๋
> HSET username:123 username minju firstName Minju lastName Jeon country KR
(integer) 4
> HGET user:123 username
"minju"
> HGETALL user:123
1) "username"
2) "minju"
3) "firstName"
4) "Minju"
5) "lastName"
6) "Jeon"
7) "country"
8) "KR"
- ์ฅ์น 777์ด ์๋ฒ์ ํ์ ๋ณด๋ด๊ฑฐ๋, ์์ฒญ์ ๋ฐํํ๊ฑฐ๋, ์ค๋ฅ ๋ณด๋ธ ํ์์ ๋ํ ์นด์ดํฐ ์ ์ฅ
> HINCRBY device:777:stats pings 1
(integer) 1
> HINCRBY device:777:stats pings 1
(integer) 2
> HINCRBY device:777:stats pings 1
(integer) 3
> HINCRBY device:777:stats errors 1
(integer) 1
> HINCRBY device:777:stats requests 1
(integer) 1
> HGET device:777:stats pings
"3"
> HMGET device:777:stats requests errors
1) "1"
2) "1"
Sets
๊ณ ์ ํ ๋ฌธ์์ด, ์ค๋ณต X, ์ ๋ ฌX → ์งํฉ
๊ณ ์ ํ ํญ๋ชฉ ์ถ์ (์: ์ง์ ๋ ๋ธ๋ก๊ทธ ๊ฒ์๋ฌผ์ ์ก์ธ์คํ๋ ๋ชจ๋ ๊ณ ์ ํ IP ์ฃผ์ ์ถ์ )
๊ด๊ณ ๋ํ๋ด๊ธฐ(์: ์ฃผ์ด์ง ์ญํ ์ ๊ฐ์ง ๋ชจ๋ ์ฌ์ฉ์ ์งํฉ)
๊ต์งํฉ, ํฉ์งํฉ ๋ฑ ์ผ๋ฐ์ ์ธ ์งํฉ ์ฐ์ฐ ์ํ
์
- ์ฌ์ฉ์ 123 ๋ฐ 456์ ์ฆ๊ฒจ์ฐพ๋ ์ฑ ID set ์ ์ฅ
> SADD user:123:favorites 347
(integer) 1
> SADD user:123:favorites 561
(integer) 1
> SADD user:123:favorites 742
(integer) 1
> SADD user:456:favorites 561
(integer) 1
- ์ฌ์ฉ์ 123์ด ์ฑ 742์ 299๋ฅผ ์ข์ํ๋์ง ์กฐํ
> SISMEMBER user:123:favorites 742
(integer) 1
> SISMEMBER user:123:favorites 299
(integer) 0
- ์ฌ์ฉ์ 123๊ณผ 456์ด ๊ณตํต์ ์ผ๋ก ์ข์ํ๋ ์ฑ ์กฐํ
> SINTER user:123:favorites user:456:favorites
1) "561"
- ์ฌ์ฉ์ 123์ด ์ข์ํ๋ ์ฑ ์ด ๋ช ๊ถ์ธ์ง ์กฐํ
> SCARD user:123:favorites
(integer) 3
Sorted Sets
์ ๋ ฌ๋ ๊ณ ์ ํ ๋ฌธ์์ด set
key, value์์ score๊น์ง ํจ๊ป ์ ์ฅ → ๋ ์ด์์ score ๊ฐ์ด ๋์ผํ ๊ฒฝ์ฐ ์ฌ์ ์ ์ ๋ ฌ
- ์์ํ. ์๋ฅผ ๋ค์ด ๋๊ท๋ชจ ์จ๋ผ์ธ ๊ฒ์์์ ๊ฐ์ฅ ๋์ ์ ์์ ์ ๋ ฌ๋ ๋ชฉ๋ก์ ์ฝ๊ฒ ์ ์ง ๊ด๋ฆฌ
- ์๋ ์ ํ๊ธฐ. ๊ณผ๋ํ API ์์ฒญ์ ๋ฐฉ์งํ๊ธฐ ์ํด ์ฌ๋ผ์ด๋ฉ ์๋์ฐ ์๋ ์ ํ๊ธฐ ๊ตฌ์ถ
์
- ํ๋ ์ด์ด์ ์ ์๊ฐ ๋ณ๊ฒฝ๋๋ฉด ์ค์๊ฐ ์์ํ ์ ๋ฐ์ดํธ
> ZADD leaderboard:455 100 user:1
(integer) 1
> ZADD leaderboard:455 75 user:2
(integer) 1
> ZADD leaderboard:455 101 user:3
(integer) 1
> ZADD leaderboard:455 15 user:4
(integer) 1
> ZADD leaderboard:455 275 user:2
(integer) 0
- ์์ 3๋ช ์ ํ๋ ์ด์ด ์ ์ ์กฐํ
> ZRANGE leaderboard:455 0 2 REV WITHSCORES
1) "user:2"
2) "275"
3) "user:3"
4) "101"
5) "user:1"
6) "100"
- ์ฌ์ฉ์ 2์ ๋ฑ๊ธ ์กฐํ
> ZREVRANK leaderboard:455 user:2
(integer) 0
HyperLogLogs(HLL)
2007๋ Philippe Flajolet์ด ๋ฐํํ ์๊ณ ๋ฆฌ์ฆ
์๊ฐ๋ณต์ก๋ O(1)๋ก ํจ์จ์ ์ธ ๊ณต๊ฐ ํ์ฉ์ ์ํด unique count๋ฅผ ํตํ ์๋ฒฝํ ์ ํ๋ ์ ๊ณต, set์ ์นด๋๋๋ฆฌํฐ๋ฅผ ๊ตฌํ๋๋ฐ ์ฃผ๋ก ์ฌ์ฉ๋จ
ํ๋ฅ ์ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ด์ฉํ ์ถ์ ์๋ฆฌ : https://d2.naver.com/helloworld/711301
์ต๋ 12KB๋ฅผ ์ฌ์ฉํ๊ณ 0.81%์ ์ค๋ฅ ์ ๊ณต
count๋ง ์ ๋ฟ์ด์ด์ value๋ ์ ์ฅํ์ง ์์ (๋ด๋ถ ๋ฐ์ดํฐ ํ์ธ ๋ถ๊ฐ๋ฅ)
AWS ์๋ผ์คํฑ์บ์, ํด๋ผ์ฐ๋ ๋ฏธํฐ๋ง(๋์ ๋งค๊ธฐ๋ ์งํ)
์
- ๋ช ๊ฐ์ง ํญ๋ชฉ ์ถ๊ฐ
> PFADD members 123
(integer) 1
> PFADD members 500
(integer) 1
> PFADD members 12
(integer) 1
- set์ ๊ตฌ์ฑ์ ์ ์ถ์
> PFCOUNT members
(integer) 3
Streams
์ ๊ท ๊ธฐ๋ฅ
append-only ๋ก๊ทธ, ๋ก๊ทธ๋ฅผ ์ ์ฅํ๊ธฐ์ ์ต์ ์ ์๋ฃ๊ตฌ์กฐ
๋ฉ์์ง ๋ธ๋ก์ปค๋ก ํนํ
์ค์๊ฐ์ผ๋ก ์ด๋ฒคํธ๋ฅผ ๊ธฐ๋กํ๊ณ ๋์์ syndicate ํ๋ค. (์ผ๊ด์ ์ผ๋ก ..??)
kafka์์ ์ํฅ์ ๋ฐ์
- ์ด๋ฒคํธ ์์ฑ(์: ์ฌ์ฉ์ ์์ , ํด๋ฆญ ์ถ์ ๋ฑ)
- ์ผ์ ๋ชจ๋ํฐ๋ง(์: ํ์ฅ ์ฅ์น์ ํ๋ ๊ฐ)
- ์๋ฆผ(์: ๊ฐ ์ฌ์ฉ์์ ์๋ฆผ ๊ธฐ๋ก์ ๋ณ๋์ ์คํธ๋ฆผ์ ์ ์ฅ)
๊ฐ ์คํธ๋ฆผ ํญ๋ชฉ์ ๋ํด ๊ณ ์ ํ ID๋ฅผ ์์ฑ → ๋์ค์ ์ฐ๊ฒฐ๋ ํญ๋ชฉ์ ๊ฒ์ํ๊ฑฐ๋ ํ์ ํญ๋ชฉ ์ฒ๋ฆฌ
์ฌ๋ฌ ํธ๋ฆฌ๋ฐ ์ ๋ต(์คํธ๋ฆผ์ด ๋ฌด์ ํ์ผ๋ก ์ปค์ง๋ ๊ฒ์ ๋ฐฉ์ง)๊ณผ ๋ ์ด์์ ์๋น ์ ๋ต(XREAD, XREADGROUP, ๊ณผ XRANGE)์ ์ง์
์
- ์คํธ๋ฆผ์ ์ฌ๋ฌ ์จ๋ ํ๋ ๊ฐ ์ถ๊ฐ
> XADD temperatures:us-ny:10007 * temp_f 87.2 pressure 29.69 humidity 46
"1658354918398-0"
> XADD temperatures:us-ny:10007 * temp_f 83.1 pressure 29.21 humidity 46.5
"1658354934941-0"
> XADD temperatures:us-ny:10007 * temp_f 81.9 pressure 28.37 humidity 43.7
"1658354957524-0"
- ID์์ ์์ํ๋ ์ฒ์ ๋ ๊ฐ์ ์คํธ๋ฆผ ํญ๋ชฉ ์กฐํ
> XRANGE temperatures:us-ny:10007 1658354934941-0 + COUNT 2
1) 1) "1658354934941-0"
2) 1) "temp_f"
2) "83.1"
3) "pressure"
4) "29.21"
5) "humidity"
6) "46.5"
2) 1) "1658354957524-0"
2) 1) "temp_f"
2) "81.9"
3) "pressure"
4) "28.37"
5) "humidity"
6) "43.7"
- ์คํธ๋ฆผ์ ๋์์ ์์ํด์ ์ต๋ 100๊ฐ์ ์ ์คํธ๋ฆผ์ ์ฝ๊ณ ํญ๋ชฉ์ด ๊ธฐ๋ก๋์ง ์๋ ๊ฒฝ์ฐ ์ต๋ 300ms ๋์ ์ฐจ๋จ
> XREAD COUNT 100 BLOCK 300 STREAMS temperatures:us-ny:10007 $
(nil)
๋ฐ์ดํฐ ํ์ ๋ณ ์ปค๋งจ๋