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/
。
-
goland 新建項目。
-
go mod init go-chat。
-
go mod tidy。
直接上代碼:
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 語言打包成可執行文件,本地運行。如果這裏雙向都加上訂閱和發佈訂閱邏輯那會是個什麼效果呢?
資源鏈接
-
redis 官網在線教程:
https://try.redis.io/
。 -
redis 官網命令指南:
https://redis.io/commands
-
go-redis 模塊開源地址:
https://github.com/go-redis/redis
。 -
go-redis 官網:
https://redis.uptrace.dev/
。
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/b5W7hmsiApbvKBHvEtT3iA