目 录CONTENT

文章目录
Go

Go Redis发布订阅

过客
2025-11-17 / 0 评论 / 0 点赞 / 20 阅读 / 0 字

连接到 Redis 服务器

连接到 Redis 服务器示例,更多配置参数,请参照 redis.Options:

import "github.com/redis/go-redis/v9"

rdb := redis.NewClient(&redis.Options{
	Addr:	  "localhost:6379",
	Password: "", // 没有密码,默认值
	DB:		  0,  // 默认DB 0
})

同时也支持另外一种常见的连接字符串:

opt, err := redis.ParseURL("redis://<user>:<pass>@localhost:6379/<db>")
if err != nil {
	panic(err)
}

rdb := redis.NewClient(opt)

发布/订阅

go-redis 支持发布+订阅消息,当出现网络等异常时,会自动重新连接服务器。

注意:PubSub 会长时间持有连接池的一个网络连接。

发布一条消息:

err := rdb.Publish(ctx, "mychannel1", "payload").Err()
if err != nil {
panic(err)
}

订阅一个 Channel

Subscribe 方法并不会返回错误,如果存在错误,在读取消息时返回,使用完毕后,记得关闭它

pubsub := rdb.Subscribe(ctx, "mychannel1")

// 使用完毕,记得关闭
defer pubsub.Close()

读取消息

for {
	msg, err := pubsub.ReceiveMessage(ctx)
	if err != nil {
		panic(err)
	}

	fmt.Println(msg.Channel, msg.Payload)
}
  • 也可以直接操作 go chan 一样读取消息:
ch := pubsub.Channel()

for msg := range ch {
	fmt.Println(msg.Channel, msg.Payload)
}
0
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin

评论区