Redis Stream - ๋ฉ”์‹œ์ง• ์‹œ์Šคํ…œ์˜ ์•ˆ์ •์„ฑ๊ณผ ํ™•์žฅ์„ฑ

Redis Stream - ๋ฉ”์‹œ์ง• ์‹œ์Šคํ…œ์˜ ์•ˆ์ •์„ฑ๊ณผ ํ™•์žฅ์„ฑ

Redis Stream์€ Redis ๋ฒ„์ „ 5.0์— ๋„์ž…๋œ ์ƒˆ๋กœ์šด ์ถ”์ƒ ๋ฐ์ดํ„ฐ ์œ ํ˜•์ž…๋‹ˆ๋‹ค.
๊ฐœ๋…์ ์œผ๋กœ Redis Stream์€ ํ•ญ๋ชฉ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋Š” ๋ชฉ๋ก์ž…๋‹ˆ๋‹ค. ๊ฐ ํ•ญ๋ชฉ์—๋Š” ๊ณ ์œ ํ•œ ์‹๋ณ„์ž๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ID๋Š” ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋˜๋ฉฐ ํƒ€์ž„์Šคํƒฌํ”„๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ Unix "tail -f" ๋ช…๋ น์ด ๋กœ๊ทธ ํŒŒ์ผ์„ ์ฝ๊ณ  ์ƒˆ ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๋™์•ˆ ์ •์ง€๋˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ๋ ˆ์ฝ”๋“œ ๋ฒ”์œ„๋ฅผ ์ฟผ๋ฆฌํ•˜๊ฑฐ๋‚˜ ์ŠคํŠธ๋ฆผ์— ๋„์ฐฉํ•˜๋Š” ์ƒˆ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งŽ์€ "tail -f" ํ”„๋กœ์„ธ์Šค๊ฐ€ ์„œ๋กœ ์ถฉ๋Œํ•˜์ง€ ์•Š๊ณ  ๋™์‹œ์— ํŒŒ์ผ์„ ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ์—ฌ๋Ÿฌ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋™์‹œ์— ์Šค๋ ˆ๋“œ๋ฅผ ์ˆ˜์‹ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ ์œ ํ˜•์˜ ๋ชจ๋“  ์ด์ ์„ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด Redis Stream์˜ ๊ธฐ๋Šฅ์„ ๋ถ€๋ถ„์ ์œผ๋กœ ๋ณต์ œํ•˜๋Š” ๊ธฐ์กด Redis ๊ตฌ์กฐ๋ฅผ ๊ฐ„๋žตํ•˜๊ฒŒ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๋ ˆ๋””์Šค PUB/SUB

Redis Pub/Sub๋Š” ํ‚ค-๊ฐ’ ์ €์žฅ์†Œ์— ์ด๋ฏธ ๋‚ด์žฅ๋œ ๊ฐ„๋‹จํ•œ ๋ฉ”์‹œ์ง• ์‹œ์Šคํ…œ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‹จ์ˆœ์„ฑ์—๋Š” ๋น„์šฉ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

  • ์–ด๋–ค ์ด์œ ๋กœ ๊ฒŒ์‹œ์ž๊ฐ€ ์‹คํŒจํ•˜๋ฉด ๋ชจ๋“  ๊ตฌ๋…์ž๋ฅผ ์žƒ์Šต๋‹ˆ๋‹ค.
  • ๊ฒŒ์‹œ์ž๋Š” ๋ชจ๋“  ๊ตฌ๋…์ž์˜ ์ •ํ™•ํ•œ ์ฃผ์†Œ๋ฅผ ์•Œ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฐ์ดํ„ฐ๊ฐ€ ์ฒ˜๋ฆฌ๋˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋น ๋ฅด๊ฒŒ ๊ฒŒ์‹œ๋˜๋ฉด ๊ฒŒ์‹œ์ž๋Š” ๊ตฌ๋…์ž์—๊ฒŒ ์ž‘์—…์„ ๊ณผ๋ถ€ํ•˜์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ฉ”์‹œ์ง€๋Š” ๋ฉ”์‹œ์ง€๊ฐ€ ์ „๋‹ฌ๋œ ๊ตฌ๋…์ž ์ˆ˜์™€ ์ด ๋ฉ”์‹œ์ง€๋ฅผ ์–ผ๋งˆ๋‚˜ ๋นจ๋ฆฌ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์—ˆ๋Š”์ง€์— ๊ด€๊ณ„์—†์ด ๊ฒŒ์‹œ ์งํ›„ ๊ฒŒ์‹œ์ž์˜ ๋ฒ„ํผ์—์„œ ์‚ญ์ œ๋ฉ๋‹ˆ๋‹ค.
  • ๋ชจ๋“  ๊ฐ€์ž…์ž๋Š” ๋™์‹œ์— ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ›๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๊ตฌ๋…์ž๋“ค์€ ๋™์ผํ•œ ๋ฉ”์‹œ์ง€๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์ˆœ์„œ์— ๋Œ€ํ•ด ์–ด๋–ป๊ฒŒ๋“  ์„œ๋กœ ๋™์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ๊ตฌ๋…์ž๊ฐ€ ๋ฉ”์‹œ์ง€๋ฅผ ์„ฑ๊ณต์ ์œผ๋กœ ์ฒ˜๋ฆฌํ–ˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ธฐ๋ณธ ์ œ๊ณต ๋ฉ”์ปค๋‹ˆ์ฆ˜์€ ์—†์Šต๋‹ˆ๋‹ค. ๊ตฌ๋…์ž๊ฐ€ ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ›๊ณ  ์ฒ˜๋ฆฌ ์ค‘์— ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•˜๋ฉด ๊ฒŒ์‹œ์ž๋Š” ์ด์— ๋Œ€ํ•ด ์•Œ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๋ ˆ๋””์Šค ๋ชฉ๋ก

Redis List๋Š” ์ฝ๊ธฐ ๋ช…๋ น ์ฐจ๋‹จ์„ ์ง€์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค. ๋ชฉ๋ก์˜ ์ฒ˜์Œ์ด๋‚˜ ๋์—์„œ ๋ฉ”์‹œ์ง€๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ์ฝ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ตฌ์กฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์— ์ ํ•ฉํ•œ ์Šคํƒ ๋˜๋Š” ๋Œ€๊ธฐ์—ด์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ์ด๊ฒƒ์œผ๋กœ ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. Redis Pub/Sub์™€์˜ ์ฃผ์š” ์ฐจ์ด์ :

  • ๋ฉ”์‹œ์ง€๋Š” ํ•œ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ์ฝ๊ธฐ ์ฐจ๋‹จ๋œ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋จผ์ € ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์‹ ํ•ฉ๋‹ˆ๋‹ค.
  • Clint๋Š” ๊ฐ ๋ฉ”์‹œ์ง€์— ๋Œ€ํ•œ ์ฝ๊ธฐ ์ž‘์—…์„ ์ง์ ‘ ์‹œ์ž‘ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ชฉ๋ก์€ ํด๋ผ์ด์–ธํŠธ์— ๋Œ€ํ•ด ์•„๋ฌด๊ฒƒ๋„ ๋ชจ๋ฆ…๋‹ˆ๋‹ค.
  • ๋ฉ”์‹œ์ง€๋Š” ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์ฝ๊ฑฐ๋‚˜ ๋ช…์‹œ์ ์œผ๋กœ ์‚ญ์ œํ•  ๋•Œ๊นŒ์ง€ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฅผ ๋””์Šคํฌ๋กœ ํ”Œ๋Ÿฌ์‹œํ•˜๋„๋ก Redis ์„œ๋ฒ„๋ฅผ ๊ตฌ์„ฑํ•˜๋ฉด ์‹œ์Šคํ…œ์˜ ์•ˆ์ •์„ฑ์ด ํฌ๊ฒŒ ํ–ฅ์ƒ๋ฉ๋‹ˆ๋‹ค.

์ŠคํŠธ๋ฆผ ์†Œ๊ฐœ

์ŠคํŠธ๋ฆผ์— ํ•ญ๋ชฉ ์ถ”๊ฐ€

ํŒ€ XADD ์ŠคํŠธ๋ฆผ์— ์ƒˆ ํ•ญ๋ชฉ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ๋ ˆ์ฝ”๋“œ๋Š” ๋‹จ์ˆœํ•œ ๋ฌธ์ž์—ด์ด ์•„๋‹ˆ๋ฉฐ ํ•˜๋‚˜ ์ด์ƒ์˜ ํ‚ค-๊ฐ’ ์Œ์œผ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ฐ ํ•ญ๋ชฉ์€ ์ด๋ฏธ ๊ตฌ์กฐํ™”๋˜์–ด ์žˆ์œผ๋ฉฐ CSV ํŒŒ์ผ์˜ ๊ตฌ์กฐ์™€ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

> XADD mystream * sensor-id 1234 temperature 19.8
1518951480106-0

์œ„์˜ ์˜ˆ์—์„œ๋Š” ์ด๋ฆ„(ํ‚ค)์ด "mystream"์ธ ์ŠคํŠธ๋ฆผ์— "sensor-id" ๋ฐ "์˜จ๋„" ๊ฐ’์„ ๊ฐ๊ฐ "1234" ๋ฐ "19.8"๋กœ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ๋‘ ๋ฒˆ์งธ ์ธ์ˆ˜๋กœ ๋ช…๋ น์€ ํ•ญ๋ชฉ์— ํ• ๋‹น๋  ์‹๋ณ„์ž๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด ์‹๋ณ„์ž๋Š” ์ŠคํŠธ๋ฆผ์˜ ๊ฐ ํ•ญ๋ชฉ์„ ๊ณ ์œ ํ•˜๊ฒŒ ์‹๋ณ„ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด ๊ฒฝ์šฐ Redis๊ฐ€ ์ƒˆ ID๋ฅผ ์ƒ์„ฑํ•˜๋„๋ก ํ•˜๊ธฐ ์œ„ํ•ด *๋ฅผ ์ „๋‹ฌํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ๊ฐ์˜ ์ƒˆ๋กœ์šด ID๊ฐ€ ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ฐ๊ฐ์˜ ์ƒˆ ํ•ญ๋ชฉ์€ ์ด์ „ ํ•ญ๋ชฉ๊ณผ ๊ด€๋ จํ•˜์—ฌ ๋” ๋†’์€ ์‹๋ณ„์ž๋ฅผ ๊ฐ–๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์‹๋ณ„์ž ํ˜•์‹

๋ช…๋ น์œผ๋กœ ๋ฐ˜ํ™˜๋œ ํ•ญ๋ชฉ ID XADD, ๋‘ ๋ถ€๋ถ„์œผ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.

{millisecondsTime}-{sequenceNumber}

๋ฐ€๋ฆฌ์ดˆ์‹œ๊ฐ„ โ€” Unix ์‹œ๊ฐ„(๋ฐ€๋ฆฌ์ดˆ)(Redis ์„œ๋ฒ„ ์‹œ๊ฐ„). ๊ทธ๋Ÿฌ๋‚˜ ํ˜„์žฌ ์‹œ๊ฐ„์ด ์ด์ „ ๋…น์Œ ์‹œ๊ฐ„๊ณผ ๊ฐ™๊ฑฐ๋‚˜ ์ด์ „ ๋…น์Œ ์‹œ๊ฐ„๋ณด๋‹ค ์ž‘์„ ๊ฒฝ์šฐ์—๋Š” ์ด์ „ ๋…น์Œ์˜ ํƒ€์ž„์Šคํƒฌํ”„๊ฐ€ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์„œ๋ฒ„ ์‹œ๊ฐ„์ด ๊ณผ๊ฑฐ๋กœ ๋Œ์•„๊ฐ€๋”๋ผ๋„ ์ƒˆ ์‹๋ณ„์ž๋Š” ์—ฌ์ „ํžˆ ์ฆ๋ถ„ ์†์„ฑ์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.

์‹œํ€€์Šค ๋ฒˆํ˜ธ ๋™์ผํ•œ ๋ฐ€๋ฆฌ์ดˆ์— ์ƒ์„ฑ๋œ ๋ ˆ์ฝ”๋“œ์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์‹œํ€€์Šค ๋ฒˆํ˜ธ ์ด์ „ ํ•ญ๋ชฉ์— ๋น„ํ•ด 1์”ฉ ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ์‹œํ€€์Šค ๋ฒˆํ˜ธ ํฌ๊ธฐ๊ฐ€ 64๋น„ํŠธ์ธ ๊ฒฝ์šฐ ์‹ค์ œ๋กœ๋Š” XNUMX๋ฐ€๋ฆฌ์ดˆ ๋‚ด์— ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ๋ ˆ์ฝ”๋“œ ์ˆ˜์— ์ œํ•œ์ด ์žˆ์–ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ์‹๋ณ„์ž์˜ ํ˜•์‹์€ ์–ธ๋œป ๋ณด๋ฉด ์ด์ƒํ•ด ๋ณด์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‹ ๋ขฐํ•  ์ˆ˜ ์—†๋Š” ๋…์ž๋Š” ์™œ ์‹œ๊ฐ„์ด ์‹๋ณ„์ž์˜ ์ผ๋ถ€์ธ์ง€ ๊ถ๊ธˆํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ์ด์œ ๋Š” Redis ์ŠคํŠธ๋ฆผ์ด ID๋ณ„๋กœ ๋ฒ”์œ„ ์ฟผ๋ฆฌ๋ฅผ ์ง€์›ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์‹๋ณ„์ž๋Š” ๊ธฐ๋ก์ด ์ƒ์„ฑ๋œ ์‹œ๊ฐ„๊ณผ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ ์‹œ๊ฐ„ ๋ฒ”์œ„๋ฅผ ์ฟผ๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ช…๋ น์„ ๋ณผ ๋•Œ ๊ตฌ์ฒด์ ์ธ ์˜ˆ๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์—‘์Šค๋ ˆ์ธ์ง€.

์–ด๋–ค ์ด์œ ๋กœ ์‚ฌ์šฉ์ž๊ฐ€ ์™ธ๋ถ€ ์‹œ์Šคํ…œ๊ณผ ๊ด€๋ จ๋œ ์ž์‹ ์˜ ์‹๋ณ„์ž๋ฅผ ์ง€์ •ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ์ด๋ฅผ ๋ช…๋ น์— ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. XADD ์•„๋ž˜์™€ ๊ฐ™์ด * ๋Œ€์‹ :

> XADD somestream 0-1 field value
0-1
> XADD somestream 0-2 foo bar
0-2

์ด ๊ฒฝ์šฐ ID ์ฆ๋ถ„์„ ์ง์ ‘ ๋ชจ๋‹ˆํ„ฐ๋งํ•ด์•ผ ํ•œ๋‹ค๋Š” ์ ์— ์œ ์˜ํ•˜์„ธ์š”. ์ด ์˜ˆ์—์„œ ์ตœ์†Œ ์‹๋ณ„์ž๋Š” "0-1"์ด๋ฏ€๋กœ ๋ช…๋ น์€ "0-1"๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ๋‹ค๋ฅธ ์‹๋ณ„์ž๋ฅผ ํ—ˆ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

> XADD somestream 0-1 foo bar
(error) ERR The ID specified in XADD is equal or smaller than the target stream top item

์ŠคํŠธ๋ฆผ๋‹น ๋ ˆ์ฝ”๋“œ ์ˆ˜

๊ฐ„๋‹จํžˆ ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ ์ŠคํŠธ๋ฆผ์˜ ๋ ˆ์ฝ”๋“œ ์ˆ˜๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค ์—‘์Šค๋ Œ. ์˜ˆ๋ฅผ ๋“ค์–ด ์ด ๋ช…๋ น์€ ๋‹ค์Œ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

> XLEN somestream
(integer) 2

๋ฒ”์œ„ ์ฟผ๋ฆฌ - XRANGE ๋ฐ XREVRANGE

๋ฒ”์œ„๋ณ„๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ•˜๋ ค๋ฉด ๋ฒ”์œ„์˜ ์‹œ์ž‘๊ณผ ๋์ด๋ผ๋Š” ๋‘ ๊ฐœ์˜ ์‹๋ณ„์ž๋ฅผ ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ฐ˜ํ™˜๋œ ๋ฒ”์œ„์—๋Š” ๊ฒฝ๊ณ„๋ฅผ ํฌํ•จํ•œ ๋ชจ๋“  ์š”์†Œ๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ๋‘ ๊ฐœ์˜ ํŠน์ˆ˜ ์‹๋ณ„์ž "-"์™€ "+"๊ฐ€ ์žˆ๋Š”๋ฐ, ๊ฐ๊ฐ ์ŠคํŠธ๋ฆผ์—์„œ ๊ฐ€์žฅ ์ž‘์€(์ฒซ ๋ฒˆ์งธ ๋ ˆ์ฝ”๋“œ) ์‹๋ณ„์ž์™€ ๊ฐ€์žฅ ํฐ(๋งˆ์ง€๋ง‰ ๋ ˆ์ฝ”๋“œ) ์‹๋ณ„์ž๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์•„๋ž˜ ์˜ˆ์—์„œ๋Š” ๋ชจ๋“  ์ŠคํŠธ๋ฆผ ํ•ญ๋ชฉ์„ ๋‚˜์—ดํ•ฉ๋‹ˆ๋‹ค.

> XRANGE mystream - +
1) 1) 1518951480106-0
   2) 1) "sensor-id"
      2) "1234"
      3) "temperature"
      4) "19.8"
2) 1) 1518951482479-0
   2) 1) "sensor-id"
      2) "9999"
      3) "temperature"
      4) "18.2"

๋ฐ˜ํ™˜๋œ ๊ฐ ๋ ˆ์ฝ”๋“œ๋Š” ์‹๋ณ„์ž์™€ ํ‚ค-๊ฐ’ ์Œ ๋ชฉ๋ก์ด๋ผ๋Š” ๋‘ ์š”์†Œ์˜ ๋ฐฐ์—ด์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ด๋ฏธ ๋ ˆ์ฝ”๋“œ ์‹๋ณ„์ž๊ฐ€ ์‹œ๊ฐ„๊ณผ ๊ด€๋ จ๋˜์–ด ์žˆ๋‹ค๊ณ  ๋งํ–ˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํŠน์ • ๊ธฐ๊ฐ„์˜ ๋ฒ”์œ„๋ฅผ ์š”์ฒญํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์š”์ฒญ์— ์ „์ฒด ์‹๋ณ„์ž๊ฐ€ ์•„๋‹Œ Unix ์‹œ๊ฐ„๋งŒ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๊ด€๋ จ ๋ถ€๋ถ„์€ ์ƒ๋žต๋ฉ๋‹ˆ๋‹ค. ์‹œํ€€์Šค ๋ฒˆํ˜ธ. ์‹๋ณ„์ž์—์„œ ์ƒ๋žต๋œ ๋ถ€๋ถ„์€ ๋ฒ”์œ„ ์‹œ์ž‘ ๋ถ€๋ถ„์—์„œ๋Š” ์ž๋™์œผ๋กœ XNUMX์œผ๋กœ ์„ค์ •๋˜๊ณ  ๋ฒ”์œ„ ๋ ๋ถ€๋ถ„์—์„œ๋Š” ๊ฐ€๋Šฅํ•œ ์ตœ๋Œ€๊ฐ’์œผ๋กœ ์„ค์ •๋ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ์€ XNUMX๋ฐ€๋ฆฌ์ดˆ ๋ฒ”์œ„๋ฅผ ์š”์ฒญํ•˜๋Š” ๋ฐฉ๋ฒ•์˜ ์˜ˆ์ž…๋‹ˆ๋‹ค.

> XRANGE mystream 1518951480106 1518951480107
1) 1) 1518951480106-0
   2) 1) "sensor-id"
      2) "1234"
      3) "temperature"
      4) "19.8"

์ด ๋ฒ”์œ„์—๋Š” ํ•ญ๋ชฉ์ด ํ•˜๋‚˜๋งŒ ์žˆ์ง€๋งŒ ์‹ค์ œ ๋ฐ์ดํ„ฐ ์„ธํŠธ์—์„œ๋Š” ๋ฐ˜ํ™˜๋˜๋Š” ๊ฒฐ๊ณผ๊ฐ€ ์—„์ฒญ๋‚  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ด์œ ๋กœ ์—‘์Šค๋ ˆ์ธ์ง€ COUNT ์˜ต์…˜์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์ˆ˜๋Ÿ‰์„ ์ง€์ •ํ•˜๋ฉด ์ฒ˜์Œ N๊ฐœ์˜ ๋ ˆ์ฝ”๋“œ๋ฅผ ๊ฐ„๋‹จํžˆ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ N๊ฐœ์˜ ๋ ˆ์ฝ”๋“œ(ํŽ˜์ด์ง€ ๋งค๊น€)๋ฅผ ๊ฐ€์ ธ์™€์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ๋งˆ์ง€๋ง‰์œผ๋กœ ๋ฐ›์€ ID๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋Š˜๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‹œํ€€์Šค ๋ฒˆํ˜ธ ํ•˜๋‚˜์”ฉ ๋‹ค์‹œ ๋ฌผ์–ด๋ณด์„ธ์š”. ๋‹ค์Œ ์˜ˆ์—์„œ ์ด๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” 10๊ฐœ์˜ ์š”์†Œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ธฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. XADD (mystream์ด ์ด๋ฏธ 10๊ฐœ์˜ ์š”์†Œ๋กœ ์ฑ„์›Œ์ ธ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •). ๋ช…๋ น๋‹น 2๊ฐœ์˜ ์š”์†Œ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋ฐ˜๋ณต์„ ์‹œ์ž‘ํ•˜๋ ค๋ฉด ์ „์ฒด ๋ฒ”์œ„์—์„œ ์‹œ์ž‘ํ•˜์ง€๋งŒ COUNT๋Š” 2์ž…๋‹ˆ๋‹ค.

> XRANGE mystream - + COUNT 2
1) 1) 1519073278252-0
   2) 1) "foo"
      2) "value_1"
2) 1) 1519073279157-0
   2) 1) "foo"
      2) "value_2"

๋‹ค์Œ ๋‘ ์š”์†Œ๋กœ ๊ณ„์† ๋ฐ˜๋ณตํ•˜๋ ค๋ฉด ์ˆ˜์‹ ๋œ ๋งˆ์ง€๋ง‰ ID(์˜ˆ: 1519073279157-0)๋ฅผ ์„ ํƒํ•˜๊ณ  1์„ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์‹œํ€€์Šค ๋ฒˆํ˜ธ.
๊ฒฐ๊ณผ ID(์ด ๊ฒฝ์šฐ 1519073279157-1)๋Š” ์ด์ œ ๋‹ค์Œ ํ˜ธ์ถœ์— ๋Œ€ํ•œ ์ƒˆ๋กœ์šด ๋ฒ”์œ„ ์‹œ์ž‘ ์ธ์ˆ˜๋กœ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—‘์Šค๋ ˆ์ธ์ง€:

> XRANGE mystream 1519073279157-1 + COUNT 2
1) 1) 1519073280281-0
   2) 1) "foo"
      2) "value_3"
2) 1) 1519073281432-0
   2) 1) "foo"
      2) "value_4"

๋“ฑ๋“ฑ. ๋ณต์žกํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์—‘์Šค๋ ˆ์ธ์ง€ ๊ฒ€์ƒ‰ํ•˜๋Š” ๊ฒฝ์šฐ O(log(N))์ด๊ณ  M๊ฐœ์˜ ์š”์†Œ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒฝ์šฐ O(M)์ด๋ฏ€๋กœ ๊ฐ ๋ฐ˜๋ณต ๋‹จ๊ณ„๊ฐ€ ๋น ๋ฆ…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ, ์—‘์Šค๋ ˆ์ธ์ง€ ์ŠคํŠธ๋ฆผ์„ ํšจ์œจ์ ์œผ๋กœ ๋ฐ˜๋ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํŒ€ XREVRANGE ๋™๋“ฑํ•˜๋‹ค ์—‘์Šค๋ ˆ์ธ์ง€, ๊ทธ๋Ÿฌ๋‚˜ ์š”์†Œ๋ฅผ ์—ญ์ˆœ์œผ๋กœ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

> XREVRANGE mystream + - COUNT 1
1) 1) 1519073287312-0
   2) 1) "foo"
      2) "value_10"

๋ช…๋ น์–ด๋ฅผ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š” XREVRANGE ๋ฒ”์œ„ ์ธ์ˆ˜ ์‹œ์ž‘ ๋ฐ ์ค‘์ง€๋ฅผ ์—ญ์ˆœ์œผ๋กœ ์ทจํ•ฉ๋‹ˆ๋‹ค.

XREAD๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒˆ ํ•ญ๋ชฉ ์ฝ๊ธฐ

์ข…์ข… ์ŠคํŠธ๋ฆผ์„ ๊ตฌ๋…ํ•˜๊ณ  ์ƒˆ ๋ฉ”์‹œ์ง€๋งŒ ์ˆ˜์‹ ํ•˜๋Š” ์ž‘์—…์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฐœ๋…์€ Redis Pub/Sub ๋˜๋Š” Redis List ์ฐจ๋‹จ๊ณผ ์œ ์‚ฌํ•ด ๋ณด์ผ ์ˆ˜ ์žˆ์ง€๋งŒ Redis Stream์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์—๋Š” ๊ทผ๋ณธ์ ์ธ ์ฐจ์ด์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ๊ฐ๊ฐ์˜ ์ƒˆ ๋ฉ”์‹œ์ง€๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ชจ๋“  ๊ตฌ๋…์ž์—๊ฒŒ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค. ์ด ๋™์ž‘์€ ์ƒˆ ๋ฉ”์‹œ์ง€๋ฅผ ํ•œ ๋ช…์˜ ๊ตฌ๋…์ž๋งŒ ์ฝ๋Š” ์ฐจ๋‹จ Redis ๋ชฉ๋ก๊ณผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.
  2. Redis Pub/Sub์—์„œ๋Š” ๋ชจ๋“  ๋ฉ”์‹œ์ง€๊ฐ€ ์žŠํ˜€์ง€๊ณ  ์ง€์†๋˜์ง€ ์•Š์ง€๋งŒ Stream์—์„œ๋Š” ๋ชจ๋“  ๋ฉ”์‹œ์ง€๊ฐ€ ๋ฌด๊ธฐํ•œ ๋ณด๊ด€๋ฉ๋‹ˆ๋‹ค(ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ช…์‹œ์ ์œผ๋กœ ์‚ญ์ œ๋ฅผ ์œ ๋ฐœํ•˜์ง€ ์•Š๋Š” ํ•œ).
  3. Redis ์ŠคํŠธ๋ฆผ์„ ์‚ฌ์šฉํ•˜๋ฉด ํ•˜๋‚˜์˜ ์ŠคํŠธ๋ฆผ ๋‚ด์—์„œ ๋ฉ”์‹œ์ง€์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋ฅผ ์ฐจ๋ณ„ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŠน์ • ๊ตฌ๋…์ž๋Š” ์ž์‹ ์˜ ๊ฐœ์ธ ๋ฉ”์‹œ์ง€ ๊ธฐ๋ก๋งŒ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ ์Šค๋ ˆ๋“œ๋ฅผ ๊ตฌ๋…ํ•˜๊ณ  ์ƒˆ ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. XREAD. ์ƒ๊ฐ๋ณด๋‹ค ์กฐ๊ธˆ ๋” ๋ณต์žกํ•ด์š” ์—‘์Šค๋ ˆ์ธ์ง€์ด๋ฏ€๋กœ ๋จผ์ € ๋” ๊ฐ„๋‹จํ•œ ์˜ˆ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

> XREAD COUNT 2 STREAMS mystream 0
1) 1) "mystream"
   2) 1) 1) 1519073278252-0
         2) 1) "foo"
            2) "value_1"
      2) 1) 1519073279157-0
         2) 1) "foo"
            2) "value_2"

์œ„์˜ ์˜ˆ๋Š” ๋น„์ฐจ๋‹จ ํ˜•์‹์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. XREAD. COUNT ์˜ต์…˜์€ ์„ ํƒ ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ํ•„์š”ํ•œ ์œ ์ผํ•œ ๋ช…๋ น ์˜ต์…˜์€ ํ•ด๋‹น ์ตœ๋Œ€ ์‹๋ณ„์ž์™€ ํ•จ๊ป˜ ์ŠคํŠธ๋ฆผ ๋ชฉ๋ก์„ ์ง€์ •ํ•˜๋Š” STREAMS ์˜ต์…˜์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” "STREAMS mystream 0"์ด๋ผ๊ณ  ์ผ์Šต๋‹ˆ๋‹ค. "0-0"๋ณด๋‹ค ํฐ ์‹๋ณ„์ž๋ฅผ ๊ฐ€์ง„ mystream ์ŠคํŠธ๋ฆผ์˜ ๋ชจ๋“  ๋ ˆ์ฝ”๋“œ๋ฅผ ์ˆ˜์‹ ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ์ œ์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋“ฏ์ด ๋™์‹œ์— ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๋ฅผ ๊ตฌ๋…ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋ช…๋ น์€ ์Šค๋ ˆ๋“œ ์ด๋ฆ„์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด "STREAMS mystream otherstream 0 0"์ด๋ผ๊ณ  ์“ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. STREAMS ์˜ต์…˜ ๋‹ค์Œ์—๋Š” ๋จผ์ € ํ•„์š”ํ•œ ๋ชจ๋“  ์ŠคํŠธ๋ฆผ์˜ ์ด๋ฆ„์„ ์ œ๊ณตํ•œ ๋‹ค์Œ ์‹๋ณ„์ž ๋ชฉ๋ก๋งŒ ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด ๊ฐ„๋‹จํ•œ ํ˜•์‹์—์„œ ๋ช…๋ น์€ ๋‹ค์Œ๊ณผ ๋น„๊ตํ•˜์—ฌ ํŠน๋ณ„ํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์—‘์Šค๋ ˆ์ธ์ง€. ๊ทธ๋Ÿฐ๋ฐ ํฅ๋ฏธ๋กœ์šด ์ ์€ ์šฐ๋ฆฌ๊ฐ€ ์‰ฝ๊ฒŒ ๋ฐฉํ–ฅ์„ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. XREAD BLOCK ์ธ์ˆ˜๋ฅผ ์ง€์ •ํ•˜์—ฌ ์ฐจ๋‹จ ๋ช…๋ น์—:

> XREAD BLOCK 0 STREAMS mystream $

์œ„์˜ ์˜ˆ์—์„œ๋Š” ์‹œ๊ฐ„ ์ œํ•œ์ด 0๋ฐ€๋ฆฌ์ดˆ์ธ ์ƒˆ BLOCK ์˜ต์…˜์ด ์ง€์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค(์ด๋Š” ๋ฌด๊ธฐํ•œ ๋Œ€๊ธฐ๋ฅผ ์˜๋ฏธํ•จ). ๋˜ํ•œ mystream ์ŠคํŠธ๋ฆผ์— ๋Œ€ํ•œ ์ผ๋ฐ˜์ ์ธ ์‹๋ณ„์ž๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๋Œ€์‹  ํŠน์ˆ˜ ์‹๋ณ„์ž $๊ฐ€ ์ „๋‹ฌ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ํŠน์ˆ˜ ์‹๋ณ„์ž๋Š” ๋‹ค์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. XREAD mystream์˜ ์ตœ๋Œ€ ์‹๋ณ„์ž๋ฅผ ์‹๋ณ„์ž๋กœ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์šฐ๋ฆฌ๋Š” ๋“ฃ๊ธฐ ์‹œ์ž‘ํ•œ ์ˆœ๊ฐ„๋ถ€ํ„ฐ ์ƒˆ๋กœ์šด ๋ฉ”์‹œ์ง€๋งŒ ๋ฐ›๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์–ด๋–ค ๋ฉด์—์„œ๋Š” ์ด๋Š” Unix "tail -f" ๋ช…๋ น๊ณผ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

BLOCK ์˜ต์…˜์„ ์‚ฌ์šฉํ•  ๋•Œ ๋ฐ˜๋“œ์‹œ ํŠน์ˆ˜ ์‹๋ณ„์ž $๋ฅผ ์‚ฌ์šฉํ•  ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค. ์ŠคํŠธ๋ฆผ์— ์กด์žฌํ•˜๋Š” ๋ชจ๋“  ์‹๋ณ„์ž๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŒ€์ด ์ฐจ๋‹จ ์—†์ด ์ฆ‰์‹œ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์œผ๋ฉด ๊ทธ๋ ‡๊ฒŒ ํ•˜๊ณ , ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์ฐจ๋‹จ๋ฉ๋‹ˆ๋‹ค.

๋ธ”๋กœํ‚น XREAD ํ•œ ๋ฒˆ์— ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๋ฅผ ๋“ค์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฆ„๋งŒ ์ง€์ •ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ๋ช…๋ น์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์‹ ํ•œ ์ฒซ ๋ฒˆ์งธ ์ŠคํŠธ๋ฆผ์˜ ๋ ˆ์ฝ”๋“œ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ํŠน์ • ์Šค๋ ˆ๋“œ์— ๋Œ€ํ•ด ์ฐจ๋‹จ๋œ ์ฒซ ๋ฒˆ์งธ ๊ตฌ๋…์ž๊ฐ€ ๋จผ์ € ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์‹ ํ•ฉ๋‹ˆ๋‹ค.

์†Œ๋น„์ž ๊ทธ๋ฃน

ํŠน์ • ์ž‘์—…์—์„œ๋Š” ํ•˜๋‚˜์˜ ์Šค๋ ˆ๋“œ ๋‚ด์˜ ๋ฉ”์‹œ์ง€์— ๋Œ€ํ•œ ๊ตฌ๋…์ž ์•ก์„ธ์Šค๋ฅผ ์ œํ•œํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์œ ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์˜ˆ๋Š” ์Šค๋ ˆ๋“œ์—์„œ ๋‹ค์–‘ํ•œ ๋ฉ”์‹œ์ง€๋ฅผ ์ˆ˜์‹ ํ•˜์—ฌ ๋ฉ”์‹œ์ง€ ์ฒ˜๋ฆฌ๋ฅผ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋Š” ์ž‘์—…์ž๊ฐ€ ์žˆ๋Š” ๋ฉ”์‹œ์ง€ ๋Œ€๊ธฐ์—ด์ž…๋‹ˆ๋‹ค.

์„ธ ๋ช…์˜ ๊ตฌ๋…์ž C1, C2, C3๊ณผ ๋ฉ”์‹œ์ง€ 1, 2, 3, 4, 5, 6, 7์„ ํฌํ•จํ•˜๋Š” ์Šค๋ ˆ๋“œ๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋ฉด ๋ฉ”์‹œ์ง€๋Š” ์•„๋ž˜ ๋‹ค์ด์–ด๊ทธ๋žจ๊ณผ ๊ฐ™์ด ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.

1 -> C1
2 -> C2
3 -> C3
4 -> C1
5 -> C2
6 -> C3
7 -> C1

์ด ํšจ๊ณผ๋ฅผ ๋‹ฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด Redis Stream์€ ์†Œ๋น„์ž ๊ทธ๋ฃน์ด๋ผ๋Š” ๊ฐœ๋…์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฐœ๋…์€ ์ŠคํŠธ๋ฆผ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์‹ ํ•˜์ง€๋งŒ ์‹ค์ œ๋กœ๋Š” ๊ทธ๋ฃน ๋‚ด์˜ ์—ฌ๋Ÿฌ ๊ตฌ๋…์ž๊ฐ€ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜์—ฌ ํŠน์ • ๋ณด์žฅ์„ ์ œ๊ณตํ•˜๋Š” ์˜์‚ฌ ๊ตฌ๋…์ž์™€ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

  1. ๊ฐ ๋ฉ”์‹œ์ง€๋Š” ๊ทธ๋ฃน ๋‚ด์˜ ๋‹ค๋ฅธ ๊ตฌ๋…์ž์—๊ฒŒ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค.
  2. ๊ทธ๋ฃน ๋‚ด์—์„œ ๊ฐ€์ž…์ž๋Š” ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜๋Š” ๋ฌธ์ž์—ด์ธ ์ด๋ฆ„์œผ๋กœ ์‹๋ณ„๋ฉ๋‹ˆ๋‹ค. ๊ฐ€์ž…์ž๊ฐ€ ์ผ์‹œ์ ์œผ๋กœ ๊ทธ๋ฃน์—์„œ ํƒˆํ‡ดํ•œ ๊ฒฝ์šฐ ๊ณ ์œ ํ•œ ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ทธ๋ฃน์— ๋ณต์›ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  3. ๋ชจ๋“  ์†Œ๋น„์ž ๊ทธ๋ฃน์€ "์ฝ์ง€ ์•Š์€ ์ฒซ ๋ฒˆ์งธ ๋ฉ”์‹œ์ง€" ๊ฐœ๋…์„ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค. ๊ตฌ๋…์ž๊ฐ€ ์ƒˆ ๋ฉ”์‹œ์ง€๋ฅผ ์š”์ฒญํ•˜๋ฉด ์ด์ „์— ๊ทธ๋ฃน ๋‚ด์˜ ๊ตฌ๋…์ž์—๊ฒŒ ์ „๋‹ฌ๋œ ์ ์ด ์—†๋Š” ๋ฉ”์‹œ์ง€๋งŒ ์ˆ˜์‹ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  4. ๊ตฌ๋…์ž๊ฐ€ ๋ฉ”์‹œ์ง€๋ฅผ ์„ฑ๊ณต์ ์œผ๋กœ ์ฒ˜๋ฆฌํ–ˆ์Œ์„ ๋ช…์‹œ์ ์œผ๋กœ ํ™•์ธํ•˜๋Š” ๋ช…๋ น์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ช…๋ น์ด ํ˜ธ์ถœ๋  ๋•Œ๊นŒ์ง€ ์š”์ฒญ๋œ ๋ฉ”์‹œ์ง€๋Š” "๋ณด๋ฅ˜ ์ค‘" ์ƒํƒœ๋กœ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.
  5. ์†Œ๋น„์ž ๊ทธ๋ฃน ๋‚ด์—์„œ ๊ฐ ๊ฐ€์ž…์ž๋Š” ์ž์‹ ์—๊ฒŒ ์ „๋‹ฌ๋˜์—ˆ์ง€๋งŒ ์•„์ง ์ฒ˜๋ฆฌ๋˜์ง€ ์•Š์€("๋ณด๋ฅ˜ ์ค‘" ์ƒํƒœ) ๋ฉ”์‹œ์ง€ ๊ธฐ๋ก์„ ์š”์ฒญํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์–ด๋–ค ์˜๋ฏธ์—์„œ ๊ทธ๋ฃน์˜ ์ƒํƒœ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ‘œํ˜„๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

+----------------------------------------+
| consumer_group_name: mygroup          
| consumer_group_stream: somekey        
| last_delivered_id: 1292309234234-92    
|                                                           
| consumers:                                          
|    "consumer-1" with pending messages  
|       1292309234234-4                          
|       1292309234232-8                          
|    "consumer-42" with pending messages 
|       ... (and so forth)                             
+----------------------------------------+

์ด์ œ ์†Œ๋น„์ž ๊ทธ๋ฃน์˜ ์ฃผ์š” ๋ช…๋ น, ์ฆ‰ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์‚ฌํ•ญ์— ๋Œ€ํ•ด ์•Œ์•„๋ณผ ์ฐจ๋ก€์ž…๋‹ˆ๋‹ค.

  • X๊ทธ๋ฃน ๊ทธ๋ฃน์„ ์ƒ์„ฑ, ์‚ญ์ œ ๋ฐ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • XREAD๊ทธ๋ฃน ๊ทธ๋ฃน์„ ํ†ตํ•ด ์ŠคํŠธ๋ฆผ์„ ์ฝ๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • XACK - ์ด ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜๋ฉด ๊ตฌ๋…์ž๋Š” ๋ฉ”์‹œ์ง€๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์ฒ˜๋ฆฌ๋œ ๊ฒƒ์œผ๋กœ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์†Œ๋น„์ž๊ทธ๋ฃน ์ฐฝ์„ค

mystream์ด ์ด๋ฏธ ์กด์žฌํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๊ทธ๋ฃน ์ƒ์„ฑ ๋ช…๋ น์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

> XGROUP CREATE mystream mygroup $
OK

๊ทธ๋ฃน์„ ์ƒ์„ฑํ•  ๋•Œ ๊ทธ๋ฃน์ด ๋ฉ”์‹œ์ง€๋ฅผ ์ˆ˜์‹ ํ•  ์‹๋ณ„์ž๋ฅผ ์ „๋‹ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ์ƒˆ ๋ฉ”์‹œ์ง€๋ฅผ ์ˆ˜์‹ ํ•˜๋ ค๋ฉด ์œ„์˜ ์˜ˆ์™€ ๊ฐ™์ด ํŠน์ˆ˜ ์‹๋ณ„์ž $๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŠน์ˆ˜ ์‹๋ณ„์ž ๋Œ€์‹  0์„ ์ง€์ •ํ•˜๋ฉด ์Šค๋ ˆ๋“œ์˜ ๋ชจ๋“  ๋ฉ”์‹œ์ง€๋ฅผ ๊ทธ๋ฃน์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด์ œ ๊ทธ๋ฃน์ด ์ƒ์„ฑ๋˜์—ˆ์œผ๋ฏ€๋กœ ๋‹ค์Œ ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ ์ฆ‰์‹œ ๋ฉ”์‹œ์ง€ ์ฝ๊ธฐ๋ฅผ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. XREAD๊ทธ๋ฃน. ์ด ๋ช…๋ น์€ ๋‹ค์Œ๊ณผ ๋งค์šฐ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค. XREAD ์„ ํƒ์  BLOCK ์˜ต์…˜์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํ•ญ์ƒ ๋‘ ๊ฐœ์˜ ์ธ์ˆ˜, ์ฆ‰ ๊ทธ๋ฃน ์ด๋ฆ„๊ณผ ๊ตฌ๋…์ž ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜์—ฌ ์ง€์ •ํ•ด์•ผ ํ•˜๋Š” ํ•„์ˆ˜ GROUP ์˜ต์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค. COUNT ์˜ต์…˜๋„ ์ง€์›๋ฉ๋‹ˆ๋‹ค.

์Šค๋ ˆ๋“œ๋ฅผ ์ฝ๊ธฐ ์ „์— ์—ฌ๊ธฐ์— ๋ช‡ ๊ฐ€์ง€ ๋ฉ”์‹œ์ง€๋ฅผ ๋„ฃ์–ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

> XADD mystream * message apple
1526569495631-0
> XADD mystream * message orange
1526569498055-0
> XADD mystream * message strawberry
1526569506935-0
> XADD mystream * message apricot
1526569535168-0
> XADD mystream * message banana
1526569544280-0

์ด์ œ ๊ทธ๋ฃน์„ ํ†ตํ•ด ์ด ์ŠคํŠธ๋ฆผ์„ ์ฝ์–ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

> XREADGROUP GROUP mygroup Alice COUNT 1 STREAMS mystream >
1) 1) "mystream"
   2) 1) 1) 1526569495631-0
         2) 1) "message"
            2) "apple"

์œ„ ๋ช…๋ น์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ถ•์–ด์ ์œผ๋กœ ์ฝ์Šต๋‹ˆ๋‹ค.

โ€œ๋‚˜, mygroup์˜ ํšŒ์›์ธ ๊ตฌ๋…์ž Alice๋Š” ์ด์ „์— ๋ˆ„๊ตฌ์—๊ฒŒ๋„ ์ „๋‹ฌ๋œ ์ ์ด ์—†๋Š” mystream์˜ ๋ฉ”์‹œ์ง€ ํ•˜๋‚˜๋ฅผ ์ฝ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.โ€

๊ตฌ๋…์ž๋Š” ๊ทธ๋ฃน์—์„œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ๋•Œ๋งˆ๋‹ค ๊ทธ๋ฃน ๋‚ด์—์„œ ์ž์‹ ์„ ๊ณ ์œ ํ•˜๊ฒŒ ์‹๋ณ„ํ•˜๋Š” ์ด๋ฆ„์„ ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์œ„ ๋ช…๋ น์—๋Š” ํŠน์ˆ˜ ์‹๋ณ„์ž ">"๋ผ๋Š” ๋งค์šฐ ์ค‘์š”ํ•œ ์„ธ๋ถ€ ์‚ฌํ•ญ์ด ํ•˜๋‚˜ ๋” ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ํŠน์ˆ˜ ์‹๋ณ„์ž๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ํ•„ํ„ฐ๋งํ•˜์—ฌ ์ด์ „์— ์ „๋‹ฌ๋œ ์ ์ด ์—†๋Š” ๋ฉ”์‹œ์ง€๋งŒ ๋‚จ๊น๋‹ˆ๋‹ค.

๋˜ํ•œ ํŠน๋ณ„ํ•œ ๊ฒฝ์šฐ์—๋Š” 0์ด๋‚˜ ๋‹ค๋ฅธ ์œ ํšจํ•œ ์‹๋ณ„์ž์™€ ๊ฐ™์€ ์‹ค์ œ ์‹๋ณ„์ž๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ๋ช…๋ น์€ XREAD๊ทธ๋ฃน ์ง€์ •๋œ ๊ตฌ๋…์ž(Alice)์—๊ฒŒ ์ „๋‹ฌ๋˜์—ˆ์ง€๋งŒ ์•„์ง ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ ํ™•์ธ๋˜์ง€ ์•Š์€ "๋ณด๋ฅ˜ ์ค‘" ์ƒํƒœ์˜ ๋ฉ”์‹œ์ง€ ๊ธฐ๋ก์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. XACK.

์˜ต์…˜ ์—†์ด ID 0์„ ์ฆ‰์‹œ ์ง€์ •ํ•˜์—ฌ ์ด ๋™์ž‘์„ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. COUNT. ์šฐ๋ฆฌ๋Š” ๋‹จ์ˆœํžˆ ๋‹จ์ผ ๋ณด๋ฅ˜ ๋ฉ”์‹œ์ง€, ์ฆ‰ ์‚ฌ๊ณผ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค:

> XREADGROUP GROUP mygroup Alice STREAMS mystream 0
1) 1) "mystream"
   2) 1) 1) 1526569495631-0
         2) 1) "message"
            2) "apple"

๊ทธ๋Ÿฌ๋‚˜ ๋ฉ”์‹œ์ง€๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์ฒ˜๋ฆฌ๋˜์—ˆ์Œ์„ ํ™•์ธํ•˜๋ฉด ๋” ์ด์ƒ ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

> XACK mystream mygroup 1526569495631-0
(integer) 1
> XREADGROUP GROUP mygroup Alice STREAMS mystream 0
1) 1) "mystream"
   2) (empty list or set)

์ด์ œ Bob์ด ์ฝ์„ ์ฐจ๋ก€์ž…๋‹ˆ๋‹ค.

> XREADGROUP GROUP mygroup Bob COUNT 2 STREAMS mystream >
1) 1) "mystream"
   2) 1) 1) 1526569498055-0
         2) 1) "message"
            2) "orange"
      2) 1) 1526569506935-0
         2) 1) "message"
            2) "strawberry"

mygroup์˜ ํšŒ์›์ธ Bob์€ ๋‘ ๊ฐœ ์ดํ•˜์˜ ๋ฉ”์‹œ์ง€๋ฅผ ์š”์ฒญํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ช…๋ น์€ ํŠน์ˆ˜ ์‹๋ณ„์ž ">"๋กœ ์ธํ•ด ๋ฐฐ๋‹ฌ๋˜์ง€ ์•Š์€ ๋ฉ”์‹œ์ง€๋งŒ ๋ณด๊ณ ํ•ฉ๋‹ˆ๋‹ค. ๋ณด์‹œ๋‹ค์‹œํ”ผ "apple"์ด๋ผ๋Š” ๋ฉ”์‹œ์ง€๋Š” ์ด๋ฏธ Alice์—๊ฒŒ ์ „๋‹ฌ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ Bob์€ "orange"์™€ "strawberry"๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค.

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด Alice, Bob ๋ฐ ๊ทธ๋ฃน์˜ ๋‹ค๋ฅธ ๋ชจ๋“  ๊ตฌ๋…์ž๊ฐ€ ๋™์ผํ•œ ์ŠคํŠธ๋ฆผ์—์„œ ๋‹ค๋ฅธ ๋ฉ”์‹œ์ง€๋ฅผ ์ฝ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์ฒ˜๋ฆฌ๋˜์ง€ ์•Š์€ ๋ฉ”์‹œ์ง€ ๊ธฐ๋ก์„ ์ฝ๊ฑฐ๋‚˜ ๋ฉ”์‹œ์ง€๋ฅผ ์ฒ˜๋ฆฌ๋œ ๊ฒƒ์œผ๋กœ ํ‘œ์‹œํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ช…์‹ฌํ•ด์•ผ ํ•  ๋ช‡ ๊ฐ€์ง€ ์‚ฌํ•ญ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๊ตฌ๋…์ž๊ฐ€ ๋ฉ”์‹œ์ง€๋ฅผ ๋ช…๋ น์œผ๋กœ ๊ฐ„์ฃผํ•˜๋Š” ์ฆ‰์‹œ XREAD๊ทธ๋ฃน, ์ด ๋ฉ”์‹œ์ง€๋Š” "๋ณด๋ฅ˜ ์ค‘" ์ƒํƒœ๊ฐ€ ๋˜๊ณ  ํ•ด๋‹น ํŠน์ • ๊ตฌ๋…์ž์—๊ฒŒ ํ• ๋‹น๋ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๊ทธ๋ฃน ๊ฐ€์ž…์ž๋Š” ์ด ๋ฉ”์‹œ์ง€๋ฅผ ์ฝ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
  • ๊ตฌ๋…์ž๋Š” ์ฒ˜์Œ ์–ธ๊ธ‰๋  ๋•Œ ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋˜๋ฏ€๋กœ ๋ช…์‹œ์ ์œผ๋กœ ์ƒ์„ฑํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.
  • ๊ณผ XREAD๊ทธ๋ฃน ๋™์‹œ์— ์—ฌ๋Ÿฌ ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ์—์„œ ๋ฉ”์‹œ์ง€๋ฅผ ์ฝ์„ ์ˆ˜ ์žˆ์ง€๋งŒ ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋ ค๋ฉด ๋จผ์ € ๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ ์Šค๋ ˆ๋“œ์— ๋Œ€ํ•ด ๋™์ผํ•œ ์ด๋ฆ„์„ ๊ฐ€์ง„ ๊ทธ๋ฃน์„ ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. X๊ทธ๋ฃน

์žฅ์•  ํ›„ ๋ณต๊ตฌ

๊ตฌ๋…์ž๋Š” ์˜ค๋ฅ˜๋ฅผ ๋ณต๊ตฌํ•˜๊ณ  "๋ณด๋ฅ˜ ์ค‘" ์ƒํƒœ์˜ ๋ฉ”์‹œ์ง€ ๋ชฉ๋ก์„ ๋‹ค์‹œ ์ฝ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํ˜„์‹ค ์„ธ๊ณ„์—์„œ๋Š” ๊ตฌ๋…์ž๊ฐ€ ๊ถ๊ทน์ ์œผ๋กœ ์‹คํŒจํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ตฌ๋…์ž๊ฐ€ ์˜ค๋ฅ˜๋ฅผ ๋ณต๊ตฌํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ ๊ตฌ๋…์ž์˜ ์ •์ฒด๋œ ๋ฉ”์‹œ์ง€๋Š” ์–ด๋–ป๊ฒŒ ๋˜๋‚˜์š”?
Consumer Group์€ ๋ฉ”์‹œ์ง€ ์†Œ์œ ์ž๋ฅผ ๋ณ€๊ฒฝํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ์— ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๊ฐ€์žฅ ๋จผ์ € ํ•ด์•ผ ํ•  ์ผ์€ ๋ช…๋ น์„ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ™•์žฅ ์ค‘, ๊ทธ๋ฃน์—์„œ '๋ณด๋ฅ˜ ์ค‘' ์ƒํƒœ์˜ ๋ชจ๋“  ๋ฉ”์‹œ์ง€๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ํ˜•ํƒœ๋กœ ๋ช…๋ น์€ ์Šค๋ ˆ๋“œ ์ด๋ฆ„๊ณผ ๊ทธ๋ฃน ์ด๋ฆ„์ด๋ผ๋Š” ๋‘ ๊ฐœ์˜ ์ธ์ˆ˜๋งŒ ์‚ฌ์šฉํ•˜์—ฌ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค.

> XPENDING mystream mygroup
1) (integer) 2
2) 1526569498055-0
3) 1526569506935-0
4) 1) 1) "Bob"
      2) "2"

ํŒ€์€ ์ „์ฒด ๊ทธ๋ฃน๊ณผ ๊ฐ ๊ตฌ๋…์ž์— ๋Œ€ํ•ด ์ฒ˜๋ฆฌ๋˜์ง€ ์•Š์€ ๋ฉ”์‹œ์ง€ ์ˆ˜๋ฅผ ํ‘œ์‹œํ–ˆ์Šต๋‹ˆ๋‹ค. Alice๊ฐ€ ์š”์ฒญํ•œ ์œ ์ผํ•œ ๋ฉ”์‹œ์ง€๊ฐ€ ํ™•์ธ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‘ ๊ฐœ์˜ ๋ฏธํ•ด๊ฒฐ ๋ฉ”์‹œ์ง€๊ฐ€ ์žˆ๋Š” Bob๋งŒ ์žˆ์Šต๋‹ˆ๋‹ค. XACK.

๋” ๋งŽ์€ ์ธ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋” ๋งŽ์€ ์ •๋ณด๋ฅผ ์š”์ฒญํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

XPENDING {key} {groupname} [{start-id} {end-id} {count} [{consumer-name}]]
{start-id} {end-id} - ์‹๋ณ„์ž ๋ฒ”์œ„(โ€œ-โ€ ๋ฐ โ€œ+โ€ ์‚ฌ์šฉ ๊ฐ€๋Šฅ)
{count} โ€” ๋ฐฐ์†ก ์‹œ๋„ ํšŸ์ˆ˜
{์†Œ๋น„์ž ์ด๋ฆ„} - ๊ทธ๋ฃน ์ด๋ฆ„

> XPENDING mystream mygroup - + 10
1) 1) 1526569498055-0
   2) "Bob"
   3) (integer) 74170458
   4) (integer) 1
2) 1) 1526569506935-0
   2) "Bob"
   3) (integer) 74170458
   4) (integer) 1

์ด์ œ ๊ฐ ๋ฉ”์‹œ์ง€์— ๋Œ€ํ•œ ์„ธ๋ถ€ ์ •๋ณด(ID, ๊ตฌ๋…์ž ์ด๋ฆ„, ๋ฐ€๋ฆฌ์ดˆ ๋‹จ์œ„์˜ ์œ ํœด ์‹œ๊ฐ„, ๋งˆ์ง€๋ง‰์œผ๋กœ ๋ฐฐ๋‹ฌ ์‹œ๋„ ํšŸ์ˆ˜)๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. Bob์ด ๋ณด๋‚ธ ๋‘ ๊ฐœ์˜ ๋ฉ”์‹œ์ง€๊ฐ€ ์žˆ์œผ๋ฉฐ ํ•ด๋‹น ๋ฉ”์‹œ์ง€๋Š” 74170458๋ฐ€๋ฆฌ์ดˆ, ์ฆ‰ ์•ฝ 20์‹œ๊ฐ„ ๋™์•ˆ ์œ ํœด ์ƒํƒœ์˜€์Šต๋‹ˆ๋‹ค.

๋‹จ์ˆœํžˆ ๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฉ”์‹œ์ง€ ๋‚ด์šฉ์ด ๋ฌด์—‡์ธ์ง€ ํ™•์ธํ•˜๋Š” ๊ฒƒ์„ ๋ง‰์„ ์ˆ˜ ์žˆ๋Š” ์‚ฌ๋žŒ์€ ์•„๋ฌด๋„ ์—†์Šต๋‹ˆ๋‹ค. ์—‘์Šค๋ ˆ์ธ์ง€.

> XRANGE mystream 1526569498055-0 1526569498055-0
1) 1) 1526569498055-0
   2) 1) "message"
      2) "orange"

์ธ์ˆ˜์—์„œ ๋™์ผํ•œ ์‹๋ณ„์ž๋ฅผ ๋‘ ๋ฒˆ ๋ฐ˜๋ณตํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์ด์ œ ๋ช‡ ๊ฐ€์ง€ ์•„์ด๋””์–ด๋ฅผ ์–ป์—ˆ์œผ๋ฏ€๋กœ Alice๋Š” 20์‹œ๊ฐ„์˜ ๊ฐ€๋™ ์ค‘์ง€ ์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉด Bob์ด ํšŒ๋ณตํ•˜์ง€ ๋ชปํ•  ๊ฒƒ์ด๋ผ๊ณ  ํŒ๋‹จํ•˜๊ณ  ์ด์ œ Bob์„ ์œ„ํ•ด ํ•ด๋‹น ๋ฉ”์‹œ์ง€๋ฅผ ์ฟผ๋ฆฌํ•˜๊ณ  ์ฒ˜๋ฆฌ๋ฅผ ์žฌ๊ฐœํ•ด์•ผ ํ•  ๋•Œ๋ผ๊ณ  ํŒ๋‹จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด ์šฐ๋ฆฌ๋Š” ๋ช…๋ น์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค Xํด๋ ˆ์ž„:

XCLAIM {key} {group} {consumer} {min-idle-time} {ID-1} {ID-2} ... {ID-N}

์ด ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜๋ฉด ์†Œ์œ ์ž๋ฅผ {consumer}๋กœ ๋ณ€๊ฒฝํ•˜์—ฌ ์•„์ง ์ฒ˜๋ฆฌ๋˜์ง€ ์•Š์€ "์™ธ๋ถ€" ๋ฉ”์‹œ์ง€๋ฅผ ์ˆ˜์‹ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ตœ์†Œ ์œ ํœด ์‹œ๊ฐ„({min-idle-time})๋„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋‘ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋™์ผํ•œ ๋ฉ”์‹œ์ง€์˜ ์†Œ์œ ์ž๋ฅผ ๋™์‹œ์— ๋ณ€๊ฒฝํ•˜๋ ค๊ณ  ํ•˜๋Š” ์ƒํ™ฉ์„ ๋ฐฉ์ง€ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

Client 1: XCLAIM mystream mygroup Alice 3600000 1526569498055-0
Clinet 2: XCLAIM mystream mygroup Lora 3600000 1526569498055-0

์ฒซ ๋ฒˆ์งธ ๊ณ ๊ฐ์€ ๊ฐ€๋™ ์ค‘์ง€ ์‹œ๊ฐ„์„ ์žฌ์„ค์ •ํ•˜๊ณ  ๋ฐฐ์†ก ์นด์šดํ„ฐ๋ฅผ ๋Š˜๋ฆฝ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋‘ ๋ฒˆ์งธ ํด๋ผ์ด์–ธํŠธ๋Š” ์ด๋ฅผ ์š”์ฒญํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

> XCLAIM mystream mygroup Alice 3600000 1526569498055-0
1) 1) 1526569498055-0
   2) 1) "message"
      2) "orange"

์ด์ œ ๋ฉ”์‹œ์ง€๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ณ  ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” Alice๊ฐ€ ๋ฉ”์‹œ์ง€๋ฅผ ์„ฑ๊ณต์ ์œผ๋กœ ์š”์ฒญํ–ˆ์Šต๋‹ˆ๋‹ค.

์œ„์˜ ์˜ˆ์—์„œ ์„ฑ๊ณต์ ์ธ ์š”์ฒญ์€ ๋ฉ”์‹œ์ง€ ์ž์ฒด์˜ ๋‚ด์šฉ์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ฐ˜๋“œ์‹œ ๊ทธ๋Ÿด ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค. JUSTID ์˜ต์…˜์€ ๋ฉ”์‹œ์ง€ ID๋งŒ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๋ฉ”์‹œ์ง€์˜ ์„ธ๋ถ€์‚ฌํ•ญ์— ๊ด€์‹ฌ์ด ์—†๊ณ  ์‹œ์Šคํ…œ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ค๋ ค๋Š” ๊ฒฝ์šฐ์— ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

๋ฐฐ์†ก ์นด์šดํ„ฐ

์ถœ๋ ฅ์— ํ‘œ์‹œ๋˜๋Š” ์นด์šดํ„ฐ ํ™•์žฅ ์ค‘ ๊ฐ ๋ฉ”์‹œ์ง€์˜ ์ „๋‹ฌ ํšŸ์ˆ˜์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์นด์šดํ„ฐ๋Š” ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ๋ฉ”์‹œ์ง€๊ฐ€ ๋‹ค์Œ์„ ํ†ตํ•ด ์„ฑ๊ณต์ ์œผ๋กœ ์š”์ฒญ๋œ ๊ฒฝ์šฐ Xํด๋ ˆ์ž„ ๋˜๋Š” ํ†ตํ™”๊ฐ€ ์‚ฌ์šฉ๋  ๋•Œ XREAD๊ทธ๋ฃน.

์ผ๋ถ€ ๋ฉ”์‹œ์ง€๊ฐ€ ์—ฌ๋Ÿฌ ๋ฒˆ ์ „๋‹ฌ๋˜๋Š” ๊ฒƒ์€ ์ •์ƒ์ž…๋‹ˆ๋‹ค. ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฒƒ์€ ๋ชจ๋“  ๋ฉ”์‹œ์ง€๊ฐ€ ๊ฒฐ๊ตญ ์ฒ˜๋ฆฌ๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ฉ”์‹œ์ง€ ์ž์ฒด๊ฐ€ ์†์ƒ๋˜์–ด ๋ฉ”์‹œ์ง€๋ฅผ ์ฒ˜๋ฆฌํ•  ๋•Œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๊ฑฐ๋‚˜, ๋ฉ”์‹œ์ง€ ์ฒ˜๋ฆฌ๋กœ ์ธํ•ด ํ•ธ๋“ค๋Ÿฌ ์ฝ”๋“œ์— ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ๋ˆ„๊ตฌ๋„ ์ด ๋ฉ”์‹œ์ง€๋ฅผ ์ฒ˜๋ฆฌํ•˜์ง€ ๋ชปํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐฐ์†ก ์‹œ๋„ ์นด์šดํ„ฐ๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ ์ด ์นด์šดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋Ÿฌํ•œ ์ƒํ™ฉ์„ ๊ฐ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ฐฐ๋‹ฌ ํšŸ์ˆ˜๊ฐ€ ์ง€์ •ํ•œ ์ตœ๋Œ€ ์ˆ˜์— ๋„๋‹ฌํ•˜๋ฉด ํ•ด๋‹น ๋ฉ”์‹œ์ง€๋ฅผ ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ์— ๋„ฃ๊ณ  ์‹œ์Šคํ…œ ๊ด€๋ฆฌ์ž์—๊ฒŒ ์•Œ๋ฆผ์„ ๋ณด๋‚ด๋Š” ๊ฒƒ์ด ๋” ํ˜„๋ช…ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์Šค๋ ˆ๋“œ ์ƒํƒœ

ํŒ€ ์‹ ํฌ ์Šค๋ ˆ๋“œ ๋ฐ ํ•ด๋‹น ๊ทธ๋ฃน์— ๋Œ€ํ•œ ๋‹ค์–‘ํ•œ ์ •๋ณด๋ฅผ ์š”์ฒญํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๊ธฐ๋ณธ ๋ช…๋ น์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

> XINFO STREAM mystream
 1) length
 2) (integer) 13
 3) radix-tree-keys
 4) (integer) 1
 5) radix-tree-nodes
 6) (integer) 2
 7) groups
 8) (integer) 2
 9) first-entry
10) 1) 1524494395530-0
    2) 1) "a"
       2) "1"
       3) "b"
       4) "2"
11) last-entry
12) 1) 1526569544280-0
    2) 1) "message"
       2) "banana"

์œ„ ๋ช…๋ น์€ ์ง€์ •๋œ ์ŠคํŠธ๋ฆผ์— ๋Œ€ํ•œ ์ผ๋ฐ˜ ์ •๋ณด๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ์ด์ œ ์•ฝ๊ฐ„ ๋” ๋ณต์žกํ•œ ์˜ˆ๋ฅผ ๋“ค์–ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

> XINFO GROUPS mystream
1) 1) name
   2) "mygroup"
   3) consumers
   4) (integer) 2
   5) pending
   6) (integer) 2
2) 1) name
   2) "some-other-group"
   3) consumers
   4) (integer) 1
   5) pending
   6) (integer) 0

์œ„์˜ ๋ช…๋ น์€ ์ง€์ •๋œ ์Šค๋ ˆ๋“œ์˜ ๋ชจ๋“  ๊ทธ๋ฃน์— ๋Œ€ํ•œ ์ผ๋ฐ˜ ์ •๋ณด๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

> XINFO CONSUMERS mystream mygroup
1) 1) name
   2) "Alice"
   3) pending
   4) (integer) 1
   5) idle
   6) (integer) 9104628
2) 1) name
   2) "Bob"
   3) pending
   4) (integer) 1
   5) idle
   6) (integer) 83841983

์œ„ ๋ช…๋ น์€ ์ง€์ •๋œ ์ŠคํŠธ๋ฆผ ๋ฐ ๊ทธ๋ฃน์˜ ๋ชจ๋“  ๊ตฌ๋…์ž์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.
๋ช…๋ น ๊ตฌ๋ฌธ์„ ์žŠ์–ด๋ฒ„๋ฆฐ ๊ฒฝ์šฐ ๋ช…๋ น ์ž์ฒด์— ๋„์›€์„ ์š”์ฒญํ•˜์„ธ์š”.

> XINFO HELP
1) XINFO {subcommand} arg arg ... arg. Subcommands are:
2) CONSUMERS {key} {groupname}  -- Show consumer groups of group {groupname}.
3) GROUPS {key}                 -- Show the stream consumer groups.
4) STREAM {key}                 -- Show information about the stream.
5) HELP                         -- Print this help.

์ŠคํŠธ๋ฆผ ํฌ๊ธฐ ์ œํ•œ

๋งŽ์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ŠคํŠธ๋ฆผ์œผ๋กœ ์˜์›ํžˆ ์ˆ˜์ง‘ํ•˜๋Š” ๊ฒƒ์„ ์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์Šค๋ ˆ๋“œ๋‹น ํ—ˆ์šฉ๋˜๋Š” ์ตœ๋Œ€ ๋ฉ”์‹œ์ง€ ์ˆ˜๋ฅผ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์ด ์œ ์šฉํ•œ ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๊ฒฝ์šฐ์—๋Š” ์ง€์ •๋œ ์Šค๋ ˆ๋“œ ํฌ๊ธฐ์— ๋„๋‹ฌํ•˜๋ฉด ์Šค๋ ˆ๋“œ์˜ ๋ชจ๋“  ๋ฉ”์‹œ์ง€๋ฅผ ๋‹ค๋ฅธ ์˜๊ตฌ ์ €์žฅ์†Œ๋กœ ์ด๋™ํ•˜๋Š” ๊ฒƒ์ด ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋ช…๋ น์—์„œ MAXLEN ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ŠคํŠธ๋ฆผ ํฌ๊ธฐ๋ฅผ ์ œํ•œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. XADD:

> XADD mystream MAXLEN 2 * value 1
1526654998691-0
> XADD mystream MAXLEN 2 * value 2
1526654999635-0
> XADD mystream MAXLEN 2 * value 3
1526655000369-0
> XLEN mystream
(integer) 2
> XRANGE mystream - +
1) 1) 1526654999635-0
   2) 1) "value"
      2) "2"
2) 1) 1526655000369-0
   2) 1) "value"
      2) "3"

MAXLEN์„ ์‚ฌ์šฉํ•˜๋ฉด ์˜ค๋ž˜๋œ ๋ ˆ์ฝ”๋“œ๊ฐ€ ์ง€์ •๋œ ๊ธธ์ด์— ๋„๋‹ฌํ•˜๋ฉด ์ž๋™์œผ๋กœ ์‚ญ์ œ๋˜๋ฏ€๋กœ ์ŠคํŠธ๋ฆผ์˜ ํฌ๊ธฐ๊ฐ€ ์ผ์ •ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด ๊ฒฝ์šฐ ์ •๋ฆฌ๋Š” Redis ๋ฉ”๋ชจ๋ฆฌ์—์„œ ๊ฐ€์žฅ ํšจ์œจ์ ์ธ ๋ฐฉ์‹์œผ๋กœ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ƒํ™ฉ์„ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

XADD mystream MAXLEN ~ 1000 * ... entry fields here ...

์œ„ ์˜ˆ์˜ ~ ์ธ์ˆ˜๋Š” ์ŠคํŠธ๋ฆผ ๊ธธ์ด๋ฅผ ํŠน์ • ๊ฐ’์œผ๋กœ ์ œํ•œํ•  ํ•„์š”๊ฐ€ ์—†์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ด ์˜ˆ์—์„œ๋Š” 1000๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™์€ ์ˆซ์ž์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์˜ˆ: 1000, 1010 ๋˜๋Š” 1030). ์šฐ๋ฆฌ๋Š” ์ŠคํŠธ๋ฆผ์ด ์ตœ์†Œ 1000๊ฐœ์˜ ๋ ˆ์ฝ”๋“œ๋ฅผ ์ €์žฅํ•˜๋„๋ก ๋ช…์‹œ์ ์œผ๋กœ ์ง€์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” Redis ๋‚ด์—์„œ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๋ฅผ ํ›จ์”ฌ ๋” ํšจ์œจ์ ์œผ๋กœ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

ํŒ€๋„ ๋”ฐ๋กœ ์žˆ๊ณ  ์—‘์ŠคํŠธ๋ฆผ, ๋™์ผํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

> XTRIM mystream MAXLEN 10

> XTRIM mystream MAXLEN ~ 10

์˜๊ตฌ ์ €์žฅ ๋ฐ ๋ณต์ œ

Redis ์ŠคํŠธ๋ฆผ์€ ์Šฌ๋ ˆ์ด๋ธŒ ๋…ธ๋“œ์— ๋น„๋™๊ธฐ์‹์œผ๋กœ ๋ณต์ œ๋˜๋ฉฐ AOF(๋ชจ๋“  ๋ฐ์ดํ„ฐ์˜ ์Šค๋ƒ…์ƒท) ๋ฐ RDB(๋ชจ๋“  ์“ฐ๊ธฐ ์ž‘์—… ๋กœ๊ทธ)์™€ ๊ฐ™์€ ํŒŒ์ผ์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. ์†Œ๋น„์ž ๊ทธ๋ฃน ์ƒํƒœ ๋ณต์ œ๋„ ์ง€์›๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ฉ”์‹œ์ง€๊ฐ€ ๋งˆ์Šคํ„ฐ ๋…ธ๋“œ์—์„œ "๋ณด๋ฅ˜ ์ค‘" ์ƒํƒœ์ธ ๊ฒฝ์šฐ ์Šฌ๋ ˆ์ด๋ธŒ ๋…ธ๋“œ์—์„œ ์ด ๋ฉ”์‹œ์ง€๋Š” ๋™์ผํ•œ ์ƒํƒœ๋ฅผ ๊ฐ–์Šต๋‹ˆ๋‹ค.

์ŠคํŠธ๋ฆผ์—์„œ ๊ฐœ๋ณ„ ์š”์†Œ ์ œ๊ฑฐ

๋ฉ”์‹œ์ง€๋ฅผ ์‚ญ์ œํ•˜๋Š” ํŠน๋ณ„ํ•œ ๋ช…๋ น์ด ์žˆ์Šต๋‹ˆ๋‹ค XDEL. ์ด ๋ช…๋ น์€ ์Šค๋ ˆ๋“œ ์ด๋ฆ„๊ณผ ์‚ญ์ œํ•  ๋ฉ”์‹œ์ง€ ID๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

> XRANGE mystream - + COUNT 2
1) 1) 1526654999635-0
   2) 1) "value"
      2) "2"
2) 1) 1526655000369-0
   2) 1) "value"
      2) "3"
> XDEL mystream 1526654999635-0
(integer) 1
> XRANGE mystream - + COUNT 2
1) 1) 1526655000369-0
   2) 1) "value"
      2) "3"

์ด ๋ช…๋ น์„ ์‚ฌ์šฉํ•  ๋•Œ ์‹ค์ œ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์ฆ‰์‹œ ํ•ด์ œ๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์ ์„ ๊ณ ๋ คํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ธธ์ด๊ฐ€ XNUMX์ธ ์ŠคํŠธ๋ฆผ

์ŠคํŠธ๋ฆผ๊ณผ ๋‹ค๋ฅธ Redis ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์˜ ์ฐจ์ด์ ์€ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์— ๋” ์ด์ƒ ์š”์†Œ๊ฐ€ ์—†์œผ๋ฉด ๋ถ€์ž‘์šฉ์œผ๋กœ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ์ž์ฒด๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ œ๊ฑฐ๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ZREM ํ˜ธ์ถœ์ด ๋งˆ์ง€๋ง‰ ์š”์†Œ๋ฅผ ์ œ๊ฑฐํ•˜๋ฉด ์ •๋ ฌ๋œ ์„ธํŠธ๊ฐ€ ์™„์ „ํžˆ ์ œ๊ฑฐ๋ฉ๋‹ˆ๋‹ค. ๋Œ€์‹  ์Šค๋ ˆ๋“œ๋Š” ๋‚ด๋ถ€์— ์š”์†Œ๊ฐ€ ์—†์–ด๋„ ๋ฉ”๋ชจ๋ฆฌ์— ๋‚จ์•„ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฒฐ๋ก 

Redis Stream์€ ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค, ๋ฉ”์‹œ์ง€ ๋Œ€๊ธฐ์—ด, ํ†ตํ•ฉ ๋กœ๊น… ๋ฐ ๊ธฐ๋ก ์œ ์ง€ ์ฑ„ํŒ… ์‹œ์Šคํ…œ์„ ๋งŒ๋“œ๋Š” ๋ฐ ์ด์ƒ์ ์ž…๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ํ•œ๋ฒˆ ๋งํ–ˆ๋“ฏ์ด ๋‹ˆํด๋ผ์šฐ์Šค ์›Œ์Šค, ํ”„๋กœ๊ทธ๋žจ์€ ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ๋”ํ•œ ๊ฒƒ์ด๋ฉฐ Redis๋Š” ์ด๋ฏธ ๋‘ ๊ฐ€์ง€๋ฅผ ๋ชจ๋‘ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€