本篇了解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/
。
📢📢📢欢迎大家在公众号后台留言交流学习!!!📢📢📢
原文始发于微信公众号(fairy with you):Go-Redis消息的订阅与发布
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/29667.html