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)

 

๋ฐ์ดํ„ฐ ํƒ€์ž…๋ณ„ ์ปค๋งจ๋“œ

https://redis.io/commands/

 

Commands

Redis is an open source (BSD licensed), in-memory data structure store, used as a database, cache, and message broker

redis.io

 

+ Recent posts