π¨ 2.7.3 Pub/Sub κΈ°λ₯
π κ°μ
Pub/Sub (Publish/Subscribe) λͺ¨λΈμ
λ°νμ(Publisher)κ° λ©μμ§λ₯Ό 보λ΄λ©΄,
ꡬλ
μ(Subscriber)κ° ν΄λΉ μ±λμ ν΅ν΄ λ©μμ§λ₯Ό λ°λ ꡬ쑰μ
λλ€.
Redisμ Pub/Subμ λ°μ΄ν°ν(Data Type) μ΄ μλ ν΅μ κΈ°λ₯μΌλ‘ μ 곡λ©λλ€.
λ©μμ§λ μ μ₯λμ§ μμΌλ©°, μ€μκ° μ λ¬λ§ κ°λ₯ν©λλ€.
π κΈ°λ³Έ λμ κ°λ
πΉ ꡬ쑰 κ°λ
λ°νμ (Publisher): λ©μμ§λ₯Ό 보λ΄λ 주체
ꡬλ μ (Subscriber): μ±λμ ꡬλ νμ¬ λ©μμ§λ₯Ό λ°λ 주체
μ±λ (Channel): λ©μμ§κ° μ€κ°λ κ²½λ‘
νλμ μ±λμ μ¬λ¬ λͺ
μ ꡬλ
μκ° λμμ μ°κ²°λ μ μμΌλ©°,
λ°νμκ° λ©μμ§λ₯Ό 보λ΄λ©΄ ꡬλ
μ€μΈ λͺ¨λ ꡬλ
μμκ² μ¦μ μ λ¬λ©λλ€.
π μμ ꡬ쑰
[λ°νμ] β (μ±λ1, μ±λ2, μ±λN) β [ꡬλ μ1, ꡬλ μ2, ꡬλ μ3 ...]
π¬ μμ μν©
μ±ν λ°© μμ€ν μ μλ‘ λ€λ©΄:
μ¬μ©μ A, B, Cκ° κ°κ° κ΄μ¬ μλ βμ±λβμ ꡬλ ν©λλ€.
λ°νμκ° μ±λ2μ λ©μμ§λ₯Ό λ°ννλ©΄,
μ±λ2λ₯Ό ꡬλ
μ€μΈ λͺ¨λ μ¬μ©μκ° λμμ λ©μμ§λ₯Ό λ°μ΅λλ€.
π§βπ» μ€ν μμ
1οΈβ£ ꡬλ
μ μ€ν
127.0.0.1:6379> SUBSCRIBE mychannel1 mychannel2 mychannel3
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "mychannel1"
3) (integer) 1
1) "subscribe"
2) "mychannel2"
3) (integer) 2
1) "subscribe"
2) "mychannel3"
3) (integer) 3
2οΈβ£ λ°νμ μ€ν
127.0.0.1:6379> PUBLISH mychannel2 "Hello, World!"
(integer) 1
3οΈβ£ ꡬλ
μ μͺ½ κ²°κ³Ό
1) "message"
2) "mychannel2"
3) "Hello, World!"
π§© μ£Όμ λͺ
λ Ήμ΄ μμ½
λͺ
λ Ήμ΄ μ€λͺ
μκ° λ³΅μ‘λ
PUBLISH channel message μ±λμ λ©μμ§ λ°ν O(N+M)
SUBSCRIBE channel [channel...] μ§μ μ±λ ꡬλ
O(N)
UNSUBSCRIBE [channel...] μ§μ μ±λ ꡬλ
ν΄μ O(N)
PSUBSCRIBE pattern [pattern...] ν¨ν΄ κΈ°λ° μ±λ ꡬλ
(*, ? μ§μ) O(N)
PUNSUBSCRIBE [pattern...] ν¨ν΄ ꡬλ
ν΄μ O(N+M)
βοΈ Sharded Pub/Sub κΈ°λ₯ (Redis 7.0 μ΄μ)
Redis 7.0λΆν°λ Sharded Pub/Sub κΈ°λ₯μ΄ μΆκ°λμ΄,
λ°μ΄ν° λΆμ° ꡬ쑰μμλ Pub/Subμ μ¬μ©ν μ μκ² λμμ΅λλ€.
λͺ
λ Ήμ΄ μ€λͺ
μκ° λ³΅μ‘λ
SPUBLISH shardchannel message μ€λ μ±λμ λ©μμ§ λ°ν O(N)
SSUBSCRIBE shardchannel [shardchannel...] μ€λ μ±λ ꡬλ
O(N)
SUNSUBSCRIBE [shardchannel...] μ€λ μ±λ ꡬλ
ν΄μ O(N)
β‘οΈ Sharded Pub/Subμ Redis Cluster νκ²½μμ ν΄λ¬μ€ν° λ Έλ κ° νΈλν½ λΆνλ₯Ό μ€μ΄κΈ° μν΄ μ¬μ©λ©λλ€.
π Pub/Sub μν νμΈ κ΄λ ¨ λͺ
λ Ήμ΄
λͺ
λ Ήμ΄ μ€λͺ
PUBSUB CHANNELS νμ±νλ μ±λ λͺ©λ‘ νμΈ
PUBSUB NUMSUB κ° μ±λλ³ κ΅¬λ
μ μ νμΈ
PUBSUB NUMPAT ν¨ν΄ ꡬλ
μ μ νμΈ
PUBSUB SHARDCHANNELS / SHARDNUMSUB Sharded Pub/Sub μν νμΈ
π§ λμ μ리 μμ½
λ°νμ(Publisher) β PUBLISH λͺ λ ΉμΌλ‘ λ©μμ§ λ°ν
ꡬλ μ(Subscriber) β SUBSCRIBE λλ PSUBSCRIBEλ‘ μ±λ μμ
μ¦μ μ λ¬ (λΉμ μ₯) β λ©μμ§λ Redisμ μ μ₯λμ§ μμΌλ©°, μ€μκ° μ μ‘λ§ μν
νμ₯μ± β μ¬λ¬ ν΄λΌμ΄μΈνΈκ° λμμ κ°μ μ±λμ ꡬλ ν μ μμ
β οΈ μ£Όμμ¬ν
Pub/Subμ μ μ₯νμ΄ μλ β μμ μκ° μ€νλΌμΈμ΄λ©΄ λ©μμ§λ₯Ό λμΉ©λλ€.
κ³Όκ±° λ©μμ§λ₯Ό λ€μ λ°μ μ μμ.
λ©μμ§ λ΄κ΅¬μ±μ μνλ€λ©΄ Redis Streamsλ₯Ό μ¬μ©ν΄μΌ ν¨ (Redis 5.0 μ΄μ).
Redis 7.0 μ΄νμλ Sharded Pub/SubμΌλ‘ ν΄λ¬μ€ν° νκ²½μμλ νμ₯ κ°λ₯.
π§± μ€ν μμ (볡μ μ±λ ꡬλ )
μλ₯Ό λ€μ΄ κΈ°μ μ£Όμ λ³ μ±λμ ꡬμ±ν μ μμ΅λλ€.
μ£Όμ μ±λ μ΄λ¦
Redis redis-interest
Memcached memcached-interest
MongoDB mongodb-interest
127.0.0.1:6379> SUBSCRIBE redis-interest memcached-interest mongodb-interest
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "redis-interest"
3) (integer) 1
1) "subscribe"
2) "memcached-interest"
3) (integer) 2
1) "subscribe"
2) "mongodb-interest"
3) (integer) 3
π§Ύ μμ½
νλͺ© μ€λͺ
λͺ¨λΈ Publisher β Channel β Subscriber
λ°μ΄ν° μ μ₯ β μμ (μ€μκ° λ©μμ§λ§ μ§μ)
νμ© μμ μ±ν
λ°©, μ€μκ° μλ¦Ό, μλ² κ° μ΄λ²€νΈ μ μ‘
μ£Όμ λͺ
λ Ήμ΄ PUBLISH, SUBSCRIBE, PSUBSCRIBE, UNSUBSCRIBE
νμ₯ κΈ°λ₯ Redis 7.0 μ΄μ β Sharded Pub/Sub
보μ κΈ°λ₯ μμμ λ©μμ§ νμ μ Redis Streams μ¬μ©