更新時間:2022-02-15 09:22:38 來源:動力節(jié)點 瀏覽1229次
Redis 的 Pub/Sub 消息傳遞可以擴展以創(chuàng)建有趣的分布式事件。假設(shè)我們有一個存儲在散列中的結(jié)構(gòu),但我們只想在特定字段超過訂閱者定義的數(shù)值時更新它的客戶端。我們將監(jiān)聽通道模式,然后才在status處獲取哈希。在本例中,我們只對介于 5 和 9 之間的 update_status 感興趣。
> PSUBSCRIBE update_status:[5-9]
1) "psubscribe"
2) "update_status:[5-9]"
3) (整數(shù)) 1
[等待]
要更改status/error_level的值,我們將有一個子例程按順序或在MULTI/EXEC 塊中運行兩個命令。第一個命令設(shè)置級別,第二個命令發(fā)布通知,其值編碼在通道本身中。
> HSET狀態(tài) error_level 5
(integer) 1
> PUBLISH update_status:5 0
(integer) 1
當(dāng)收到消息時,我們的客戶端應(yīng)用程序切換到備用客戶端并發(fā)出HGETALL命令:
> HGETALL 狀態(tài)
1) “error_level”
2) “5”
3) “l(fā)ast_error”
4) “Crawler 返回 404”
5) “timestamp”
6) “1511467605734”
然后,我們可以使用它來更新長時間運行進程的局部變量。這可以允許同一進程的多個實例以實時方式“共享”數(shù)據(jù)。
與僅使用 Pub/Sub 相比,這種模式的好處在于,當(dāng)進程重新啟動時,它可以簡單地獲取整個狀態(tài)Redis哈希并開始偵聽。然后,這些更改將在任意數(shù)量的進程中同步。如果實例與 Redis 服務(wù)器斷開連接,作為重新連接的一部分,服務(wù)器可以獲取狀態(tài)哈希并重新開始偵聽。