Go-Redis 消息的訂閱與發佈

本篇瞭解 Redis 的消息訂閱,以及用 Go 實現消息訂閱功能。

Redis 訂閱

[root@iZwz9d74mj3se01z97vymxZ ~]# redis-cli -p 6379
127.0.0.1:6379> SUBSCRIBE chatroom
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "chatroom"
3) (integer) 1
[root@iZwz9d74mj3se01z97vymxZ ~]# redis-cli -p 6379
127.0.0.1:6379> PUBLISH chatroom 'hello' // 向‘chatroom’頻道中推送‘hello’消息
(integer) 1
[root@iZwz9d74mj3se01z97vymxZ ~]# redis-cli -p 6379
127.0.0.1:6379> SUBSCRIBE chatroom // 訂閱‘chatroom’頻道
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "chatroom"
3) (integer) 1
1) "message"
2) "chatroom"
3) "hello" // 收到來自‘chatroom’頻道的‘hello’消息

由上三步命令行可見 Redis 消息訂閱(讀者)、發佈訂閱消息(博主)和接收訂閱消息(讀者)是如此便捷。下面我們使用 go 語言集成 redis 環境模擬上述實驗。

Go 集成 Redis

Go 集成 Redis 使用的是 go-redis 模塊。模塊開源包源碼地址:https://github.com/go-redis/redis。模塊官網:https://redis.uptrace.dev/

直接上代碼:

package main

import (
 "context"
 "fmt"
 "github.com/go-redis/redis/v8"
)

var ctx = context.Background()

// 建立Redis連接
var rdb = redis.NewClient(&redis.Options{
 Addr:     "17.0.0.1:6379",
 Password: "", // no password set
 DB:       0,  // use default DB
})

func main(){
 fmt.Println("################")
 fmt.Println("#####Hi!########")
 fmt.Println("################")

 // 訂閱bin這個channel
 sub := rdb.Subscribe(ctx, "bin")

    // 本地redis客戶端命令行模擬發佈訂閱消息
    
 // sub.Channel() 返回go channel,可以循環讀取redis服務器發過來的消息
 for msg := range sub.Channel() {
  // 打印收到的消息
  fmt.Println("當前消息由", msg.Channel, "信道發送:", msg.Payload)
 }

}

效果展示

上圖可見在本地 Redis 端發送的訂閱在程序端成功接收。

代碼打包

修改連接爲服務器端連接(修改地址和暴露端口)。執行go build main.go進行 windows 下打包,執行打包的 exe 文件。遠程 redis 端發佈頻道消息,驗證效果:

至此 redis 訂閱功能完成,利用 Go 語言打包成可執行文件,本地運行。如果這裏雙向都加上訂閱和發佈訂閱邏輯那會是個什麼效果呢?

資源鏈接

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/b5W7hmsiApbvKBHvEtT3iA