Go Redis PubSub 发布订阅

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)
}