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์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์๋ ๊ทผ๋ณธ์ ์ธ ์ฐจ์ด์ ์ด ์์ต๋๋ค.
- ๊ฐ๊ฐ์ ์ ๋ฉ์์ง๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ชจ๋ ๊ตฌ๋ ์์๊ฒ ์ ๋ฌ๋ฉ๋๋ค. ์ด ๋์์ ์ ๋ฉ์์ง๋ฅผ ํ ๋ช ์ ๊ตฌ๋ ์๋ง ์ฝ๋ ์ฐจ๋จ Redis ๋ชฉ๋ก๊ณผ ๋ค๋ฆ ๋๋ค.
- Redis Pub/Sub์์๋ ๋ชจ๋ ๋ฉ์์ง๊ฐ ์ํ์ง๊ณ ์ง์๋์ง ์์ง๋ง Stream์์๋ ๋ชจ๋ ๋ฉ์์ง๊ฐ ๋ฌด๊ธฐํ ๋ณด๊ด๋ฉ๋๋ค(ํด๋ผ์ด์ธํธ๊ฐ ๋ช ์์ ์ผ๋ก ์ญ์ ๋ฅผ ์ ๋ฐํ์ง ์๋ ํ).
- 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์ ์๋น์ ๊ทธ๋ฃน์ด๋ผ๋ ๊ฐ๋
์ ์ฌ์ฉํฉ๋๋ค. ์ด ๊ฐ๋
์ ์คํธ๋ฆผ์์ ๋ฐ์ดํฐ๋ฅผ ์์ ํ์ง๋ง ์ค์ ๋ก๋ ๊ทธ๋ฃน ๋ด์ ์ฌ๋ฌ ๊ตฌ๋
์๊ฐ ์๋น์ค๋ฅผ ์ ๊ณตํ์ฌ ํน์ ๋ณด์ฅ์ ์ ๊ณตํ๋ ์์ฌ ๊ตฌ๋
์์ ์ ์ฌํฉ๋๋ค.
- ๊ฐ ๋ฉ์์ง๋ ๊ทธ๋ฃน ๋ด์ ๋ค๋ฅธ ๊ตฌ๋ ์์๊ฒ ์ ๋ฌ๋ฉ๋๋ค.
- ๊ทธ๋ฃน ๋ด์์ ๊ฐ์ ์๋ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํ๋ ๋ฌธ์์ด์ธ ์ด๋ฆ์ผ๋ก ์๋ณ๋ฉ๋๋ค. ๊ฐ์ ์๊ฐ ์ผ์์ ์ผ๋ก ๊ทธ๋ฃน์์ ํํดํ ๊ฒฝ์ฐ ๊ณ ์ ํ ์ด๋ฆ์ ์ฌ์ฉํ์ฌ ๊ทธ๋ฃน์ ๋ณต์ํ ์ ์์ต๋๋ค.
- ๋ชจ๋ ์๋น์ ๊ทธ๋ฃน์ "์ฝ์ง ์์ ์ฒซ ๋ฒ์งธ ๋ฉ์์ง" ๊ฐ๋ ์ ๋ฐ๋ฆ ๋๋ค. ๊ตฌ๋ ์๊ฐ ์ ๋ฉ์์ง๋ฅผ ์์ฒญํ๋ฉด ์ด์ ์ ๊ทธ๋ฃน ๋ด์ ๊ตฌ๋ ์์๊ฒ ์ ๋ฌ๋ ์ ์ด ์๋ ๋ฉ์์ง๋ง ์์ ํ ์ ์์ต๋๋ค.
- ๊ตฌ๋ ์๊ฐ ๋ฉ์์ง๋ฅผ ์ฑ๊ณต์ ์ผ๋ก ์ฒ๋ฆฌํ์์ ๋ช ์์ ์ผ๋ก ํ์ธํ๋ ๋ช ๋ น์ด ์์ต๋๋ค. ์ด ๋ช ๋ น์ด ํธ์ถ๋ ๋๊น์ง ์์ฒญ๋ ๋ฉ์์ง๋ "๋ณด๋ฅ ์ค" ์ํ๋ก ์ ์ง๋ฉ๋๋ค.
- ์๋น์ ๊ทธ๋ฃน ๋ด์์ ๊ฐ ๊ฐ์ ์๋ ์์ ์๊ฒ ์ ๋ฌ๋์์ง๋ง ์์ง ์ฒ๋ฆฌ๋์ง ์์("๋ณด๋ฅ ์ค" ์ํ) ๋ฉ์์ง ๊ธฐ๋ก์ ์์ฒญํ ์ ์์ต๋๋ค.
์ด๋ค ์๋ฏธ์์ ๊ทธ๋ฃน์ ์ํ๋ ๋ค์๊ณผ ๊ฐ์ด ํํ๋ ์ ์์ต๋๋ค.
+----------------------------------------+
| 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์ ๋ฉ์์ง ๋ธ๋ก์ปค, ๋ฉ์์ง ๋๊ธฐ์ด, ํตํฉ ๋ก๊น ๋ฐ ๊ธฐ๋ก ์ ์ง ์ฑํ ์์คํ ์ ๋ง๋๋ ๋ฐ ์ด์์ ์ ๋๋ค.
๋ด๊ฐ ํ๋ฒ ๋งํ๋ฏ์ด
์ถ์ฒ : habr.com