pub/sub ๋ด๋ถ ๊ตฌ์กฐ
redis pub/sub
Redis pub/sub๋ ๋ค๋ฅธ ๋ฉ์์ง ๋ธ๋ก์ปค์ ๋ฌ๋ฆฌ, ๋ฉ์์ง ์ง์์ฑ์ด ์๋ค.
์ฆ, ๋ฉ์์ง๋ฅผ ์ ์กํ๊ณ ๋ฐ๋ก ์ญ์ ๋๋๋ฐ, Redis ๋ด๋ถ์ ์ ์ฅ๋์ง ์๋๋ค.
์ค์๊ฐ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ๊ฒฝ์ฐ ์ ํฉํ์ง๋ง ๋ฉ์์ง๊ฐ ์ ์ฅ๋์ง ์๋๊ฒ์ ์ฃผ์ํด์ผ ํ๋ค.
์ง์์ฑ์ด ์ค์ํ์ง ์์ ๋ฉ์์ง๋ฅผ ์ฒ๋ฆฌํ๊ธฐ์ ์ ํฉํ๋ค.
100% ์ ์ก ๋ณด์ฅ์ด ๋์ง ์์๋ ๋๋ ๊ณณ์ ์ฌ์ฉํ๊ธฐ ์ข๋ค.
์ด๋ฒคํธ๋ฅผ ๋ฐํํ๋ publisher๋ ํน์ Channel(Topic)์ ์ด๋ฒคํธ๋ฅผ ์ ์กํ๋ค.
์ด๋ฅผ ๊ตฌ๋ ํ๋ subscriber๊ฐ ์กด์ฌํ๋๋ฐ, ํด๋น ํ ํฝ์ ๊ตฌ๋ ํ ๊ตฌ๋ ์๋ ํผ๋ธ๋ฆฌ์ ์ ์๊ด์์ด ๋ชจ๋ ์ด๋ฒคํธ๋ฅผ ์์ ํ ์ ์๋ค.
pub/sub ๋ด๋ถ ๊ตฌ์กฐ
Redis pu/sub์ Server channel/pattern ๊ตฌ์กฐ์ฒด์ Client channel/pattern ๊ตฌ์กฐ์ฒด๊ฐ ์๋ค.
channel : dict(hash table)
pattern : LinkedList
์ฑ๋๊ณผ ํจํด์ ์์ ๊ฐ์ ์๋ฃ๊ตฌ์กฐ์ ์ ์ฅ๋๋ค๊ณ ํ๋ค.
Server channel/pattern

dict ๊ตฌ์กฐ์ฒด๋ฅผ ๊ฐ๋ฅดํค๋ pubsub_channels ํ๋
dict ๊ตฌ์กฐ์ฒด๋ ์ฌ๋ฌ๊ฐ์ dictEntry๋ฅผ ๊ฐ์ง๋ค.
๊ฐ ์ํธ๋ฆฌ๋
{ Key(robj channel) : Value(list) }๋ก ๊ตฌ์ฑ๋์ด ์๊ณ , list๋ LinkedList์ด๋ค.list๋ ์ฌ๋ฌ ๊ฐ์ listNode๋ฅผ ๊ฐ์ง๋ฉด์ ๊ฐ ๋ ธ๋๋ client๋ฅผ ๊ฐ๋ฅดํจ๋ค.
publish๊ฐ ๋์ํ๊ณ message๋ฅผ ์ ์กํ๋ฉด, dict์์ ์ ๋ฌ๋ฐ์ channel(dictEntry์ key)์ ์ฐพ๋๋ค.
๊ทธ๋ฆฌ๊ณ dictEntry์ value์ธ LinkedList๋ฅผ ๋๋ฉด์ ๊ตฌ๋ ํ client์๊ฒ ๋ฉ์์ง๋ฅผ ๋ณด๋ธ๋ค.

list๋ฅผ ๊ฐ๋ฅดํค๋ pubsub_pattern ํ๋
list์ ์ํด์๋ Node๋ค์ ๊ฐ๊ฐ์ pubsubPattern ๊ตฌ์กฐ์ฒด๋ฅผ ๊ฐ๋ฅดํจ๋ค.
pubsubPattern ๊ตฌ์กฐ์ฒด๋ ํด๋ผ์ด์ธํธ ํจํด์ ๊ฐ์ง๊ณ ์๋ค.
๋ฐ๋ผ์ publish์ ๋์์ ๋ค์๊ณผ ๊ฐ๋ค.
publish channel_name message
pubsub_chaennels์์ ๊ฐ channel์ ๊ตฌ๋ ํ client์๊ฒ ๋ฉ์์ง๋ฅผ ์ ๋ฌํ๊ณ
pubsub_patterns ํจํด์์์ ํจํด๊ณผ ์ผ์นํ๋ client์๊ฒ ๋ฉ์์ง๋ฅผ ๋ณด๋ธ๋ค.
Client channel/pattern

pubsub_channels ํ๋
ํด๋ผ์ด์ธํธ๋ ๊ตฌ๋ ํ ์ฑ๋์ ์ ์ฅํ๋ dict ๊ตฌ์กฐ์ฒด๋ฅผ ๊ฐ๋ฅดํจ๋ค.
์๋ฒ์ ๋ค๋ฅด๊ฒ dictEntry์๋ ๋ฉ์์ง์ธ Value๋ ์๊ณ ์ฑ๋์ธ Key๋ง ๊ฐ์ง๊ณ ์๋ค.
๋ฐ๋ผ์ ํด๋ผ์ด์ธํธ๋ ์ฑ๋์ ์กด์ฌ๋ง ์ถ์ ํ๊ณ ์ค์ ๋ก ๋ฉ์์ง๋ฅผ ๊ด๋ฆฌํ์ง ์๋๋ค.
Subscribe ๋ช ๋ น์ด ์ํ๋๋ฉด ํด๋ผ์ด์ธํธ ๊ตฌ์กฐ์ฒด์ ์๋ฒ ๊ตฌ์กฐ์ฒด ๋์์ ํด๋น ์ฑ๋์ด ์ ์ฅ๋๊ณ ํด๋ผ์ด์ธํธ๋ ํด๋น ์ฑ๋์ ๋ฉ์์ง๋ฅผ ์์ ํ ์ ์๊ฒ ๋๋ค.
Publish ๋ช ๋ น์ด ์ํ๋๋ฉด, ์๋ฒ๋ ํด๋น ์ฑ๋์ ๊ตฌ๋ ํ๋ ๋ชจ๋ ํด๋ผ์ด์ธํธ๋ฅผ ์ฐพ์์ ๋ฉ์์ง๋ฅผ ์ ์กํ๋ค. ์ด ๊ณผ์ ์์ ์๋ฒ ๊ตฌ์กฐ์ฒด๊ฐ ์ฌ์ฉ๋๋ค.

pubsub_patterns ํ๋
ํด๋ผ์ด์ธํธ๊ฐ pattern์ ์ ์ฅํ๋ ๊ตฌ์กฐ์ฒด๋ค.
ํด๋ผ์ด์ธํธ๊ฐ ๊ตฌ๋ ํ ํจํด์ ์ ์ฅํ๋ ๋ฆฌ์คํธ๋ฅผ ๊ฐ๋ฆฌํจ๋ค.
๋ฆฌ์คํธ์ ๊ฐ ๋ ธ๋๋ ์ง์
robj pattern๊ตฌ์กฐ์ฒด์ ์ฐ๊ฒฐํ๋ค. ๊ตฌ์กฐ์ฒด๋ ํด๋ผ์ด์ธํธ์ ํจํด์ ํฌํจํ๋๋ฐ, ํด๋ผ์ด์ธํธ๋ Redis์ ์ฐ๊ฒฐ๋ ์ฌ์ฉ์ ๋๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด๋ค.
Last updated