Go使用Redis 发布和订阅消息

2023-11-05

发布消息

在Go中,Redis客户端库可以提供一个Publish方法来实现消息的发布。不同的Redis客户端库可能有不同的API和方法命名,此处以 v8 为例, v8 版本以下不需要context, 下面是一个示例使用go-redis库进行Publish操作的示例代码:

package main

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

func main() {
	// 建立Redis连接
	ctx := context.Background()
	client := redis.NewClient(&redis.Options{
		Addr:     "localhost:6379",
		Password: "", // 如果有密码,需要设置
		DB:       0,  // 使用默认数据库
	})

	// 发布消息
	channel := "my_channel"
	message := "Hello, Redis!"
	result := client.Publish(ctx, channel, message)
	if result.Err() != nil {
		fmt.Println("Failed to publish message:", result.Err())
		return
	}

	// 获取发布消息的结果
	fmt.Println("Publish result:", result.Val())
}

在这个示例中,我们使用go-redis库来建立与Redis服务器的连接。通过redis.NewClient函数提供Redis服务器的地址和其他连接参数。然后,我们使用client.Publish方法执行Redis的PUBLISH命令,将消息发布到指定的频道中。最后,我们打印出发布消息的结果。

订阅消息

在Go中,Redis客户端库可以提供Subscribe方法来接收发布的消息。以下是使用go-redis库进行Subscribe操作的示例代码:

package main

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

func main() {
	// 建立Redis连接
	ctx := context.Background()
	client := redis.NewClient(&redis.Options{
		Addr:     "localhost:6379",
		Password: "", // 如果有密码,需要设置
		DB:       0,  // 使用默认数据库
	})

	// 订阅频道
	channel := "my_channel"
	pubsub := client.Subscribe(ctx, channel)
	defer pubsub.Close()

	// 接收消息
	for {
		msg, err := pubsub.ReceiveMessage(ctx)
		if err != nil {
			fmt.Println("Failed to receive message:", err)
			break
		}

		fmt.Println("Received message:", msg.Payload)
	}
}

在这个示例中,我们使用go-redis库来建立与Redis服务器的连接。通过redis.NewClient函数提供Redis服务器的地址和其他连接参数。然后,我们使用client.Subscribe方法订阅指定的频道。通过pubsub.ReceiveMessage方法来接收发布到频道的消息。我们使用一个循环来持续监听消息,直到发生错误。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Go使用Redis 发布和订阅消息 的相关文章

  • 如何读取大型平面文件

    我有一个平面文件 其中包含 339276 行文本 大小为 62 1 MB 我试图读入所有行 根据我所拥有的某些条件解析它们 然后将它们插入数据库 我最初尝试使用 bufio Scan 循环和 bufio Text 来获取该行 但缓冲区空间不
  • 为什么 gmail API 以纯文本形式发送 html 电子邮件?

    我正在尝试使用 gmail API 发送 html 电子邮件 但由于某些原因 它会随机以纯文本 文本形式发送电子邮件 谷歌似乎改变了我设置的内容类型标头 这有什么理由吗 电子邮件内容始终完全相同 正如我测试的那样 API 仍处于实验阶段吗
  • 错误:标准包中非标准导入“gopkg.in/yaml.v2”

    我正在尝试从以下位置导入 go yamlhttps github com go yaml yaml https github com go yaml yaml 并且我发现了一个 Google 没有提供帮助的错误 I ran go get g
  • 实现具有更广泛方法签名的接口

    在Go中 是否有一种方法可以使用方法来实现接口 其中实现中相应方法的返回类型 比 预期返回类型 更宽 这很难解释 所以这里有一个例子 在 Go Playground 中运行以下示例代码时出现此错误 prog go 36 14 cannot
  • 如何将所有GET请求查询参数放入Go中的结构体中?

    你好 我想将 get 查询参数转换为 Go 中的结构 例如我有这样的结构 type Filter struct Offset int64 json offset Limit int64 json limit SortBy string js
  • GoLang 中的 HTML 部分

    我刚刚开始使用 Go 我想用它创建一个网络应用程序 我现在尝试的是以handlebarsjs 式的方式使用模板 我想将页眉和页脚从主页中取出 以便可以将它们注入到每个网页上 我当前的设置应该是解析主页 页眉和页脚 HTML 文件并缓存它们
  • Golang 结构体初始化

    有一个像这样的简单结构 type Event struct Id int Name string 这两种初始化方法有什么区别呢 e1 Event Id 1 Name event 1 e2 Event Id 2 Name event 2 为什
  • Go 编译器有窗口化设置选项吗?

    我正在使用 Go 6g 编译 GTK 应用程序 我想知道是否有编译器 链接器选项使其成为 Windows 可执行文件而不是控制台可执行文件 MinGW 有一个 mwindows 选项来实现此目的 目前我必须使用十六进制编辑器手动更改 PE
  • Facebook服务器端登录、CORS

    我正在实现一个带有 FB 服务器端登录的网站 简化步骤如下 一个简单的按钮触发 JS 脚本 该脚本调用我的后端 APIhttps localhost fblogin function sendFbLoginData get https lo
  • 在 Spring 4 中干掉通用的 RedisTemplate

    我读到你可以拥有 Autowired从 Spring 4 开始泛型 这太棒了 我有一个摘要RedisService我想参加的课程 Autowired一个通用的 RestTemplate 如下所示 public abstract class
  • 测试 gRPC 服务

    我想测试用 Go 编写的 gRPC 服务 我使用的示例是 Hello World 服务器示例grpc go 仓库 https github com grpc grpc go blob master examples helloworld g
  • Spring Redis 排序键

    我在 Redis Spring Data Redis 中有以下键 localhost gt Keys 1 id 1 Name C5796 Site DRG1 2 id 2 Name CX1XE Site DG1 3 id 3 Name C5
  • json.Unmarshal json字符串到对象是空结果[重复]

    这个问题在这里已经有答案了 我有一个非常简单的程序 如下所示 package main import encoding json fmt type RunCommand struct level string json level call
  • “http:多个response.WriteHeader调用”有什么不好的影响?

    尽管我发现 http 多个响应 WriteHeader 调用 例外 但我的服务器表现良好 此异常不会导致我的服务器出现恐慌或行为异常 我进行了很多搜索 但只找到了如何解决这个问题 没有文档描述异常的不良影响 有人可以帮我找出为什么 http
  • 所有可能的 GOOS 价值?

    如果我做对了 GOOS在编译源代码时确定 为了更好地支持多个操作系统 我感兴趣的是GOOS可能 当然 Go 是开源的 所以它可能有无限的可能性 所以我真正想要的是一个 通用列表 已知值为 windows linux darwin or fr
  • 超出 Redis 连接/缓冲区大小限制

    在对我们的应用程序服务器进行压力测试时 我们从 Redis 中得到以下异常 ServiceStack Redis RedisException 无法连接到 redis host 6379 处的 redis 实例 gt System Net
  • 对嵌套结构使用自定义解组时,GoLang 结构无法正确解组

    我们需要对嵌套在多个其他结构中的结构使用自定义解组器 而这些结构不需要自定义解组器 我们有很多类似的结构B下面定义的结构 类似于嵌套A 代码的输出是true false 0 预期的true false 2 有任何想法吗 Go 游乐场示例he
  • 结构体到磁盘的高效 Go 序列化

    我的任务是将 C 代码替换为 Go 而且我对 Go API 还很陌生 我正在使用 gob 将数百个键 值条目编码到磁盘页面 但 gob 编码有太多不需要的膨胀 package main import bytes encoding gob f
  • 将文件传递给活动作业/后台作业

    我通过标准文件输入接收请求参数中的文件 def create file params file upload Upload create file file filename img png end 但是 对于大型上传 我想在后台作业中执行
  • 仅导出嵌入结构实现的方法子集

    是否可以仅导出嵌入结构实现的方法的子集 这是一种与减少代码复制和粘贴非常不同的方法吗 还有更惯用的方法吗 type A struct func a A Hello fmt Println Hello func a A World fmt P

随机推荐

  • IDEA下导入maven项目时Maven Project处未能显示jar包正常解决办法

    IDEA下导入多级maven项目时未能显示正常解决办法 1 Ctrl Alt Shift S 打开Project Structrue 2 左边点击 Modules 切换到Modules选项卡 3 此时你如果发现现在已经加载所有工程中并没有你
  • IPSEC流程例子及两个阶段的协商过程详细介绍

    IPSEC VPN两个阶段的协商过程详细介绍 IPSec体系结构模型图 我们来看一个完整的IPSec体系结构模型图 以便更好地理解IPSec体系结构 IPSec流程图 SAKMP IKE第一阶段称为ISAKMP IKE的管理连接阶段 使用双
  • docker中镜像和容器的批量操作

    1 批量删除镜像 docker rmi docker images grep 条件 awk print 3 docker images 所展示的列表 第三列为镜像id 根据镜像id做删除操作 2 批量删除容器 docker rm f doc
  • 华为OD机试 - 最长广播响应(Java)

    题目描述 某通信网络中有N个网络结点 用1到N进行标识 网络中的结点互联互通 且结点之间的消息传递有时延 相连结点的时延均为一个时间单位 现给定网络结点的连接关系link i u v 其中u和v表示网络结点 当指定一个结点向其他结点进行广播
  • 因果推断(四)——后门调整、前门调整、逆概率加权

    在因果推断 三 中 我们介绍了干预的相关概念 在本文中 我们对一些方法进行介绍 这些方法可用于利用干预分析变量之间的因果关系 在因果推断 三 中 我们得出了调整公式 如上式 假设PA为A节点的所有父节点的集合 则上 式可以修改为 其中b为P
  • 架构与思维:系统容量设计

    背景 单位每年都会举行运动会 有一个2000m长跑的项目 大约每年报名人员为男选手40人 女选手20人 只有一条橡胶跑道 一次比赛10人齐跑 所以至少需要6场比赛 2000米的完成时间要求是20分钟 超过20分钟不计数 所以比赛耗时我们计算
  • Multi-Scale Convolutional Neural Networks for Time Series Classification

    keywords 时间序列处理 深度学习 keras 针对现有时间序列分类方法的特征提取与分类过程分离 且无法提取存在于不同时间尺度序列的不同特征的问题 作者提出MCNN模型 对于单一时间序列输入 进行降采样和滑动平均等变化 产生多组长度不
  • 双向dc-dc变换器原理

    buck电路原理 电容用于平滑电压 由于电容电压不能突变 所以再接一个电感 二极管的作用是给电感提供续流作用 boost电路原理 由于直接升压难以实现 理想情况下输入输出功率相同 可以通过减小输出电流来实现提高输出电压 双向dc dc变换器
  • Open3D 格网法计算点云的占地面积

    目录 一 算法原理 二 代码实现 三 结果展示 四 测试数据 一 算法原理 该方法主要用于粗略统计机载点云的占地面积 方法原理是将点云沿 X O Y XOY XOY面划分成格网 统计有点的格网面积来近似表示点云占地面积 二 代码实现
  • Android 加载高清巨图,无需剪裁压缩

    LargeImage Android 加载大图 可以高清显示10000 10000像素的图片 可以滑动 放大缩小具有PhotoView的效果 普通图片也可以用它展示 Gradle compile com shizhefei LargeIma
  • ospf协议域内SPF算法计算生成树的理解

    在阅读华为IERS文档后的有关SPF的理解 有些详细原理细节省略 图片来自华为文档 计算域内生成树使用Dijkstra算法计算最短路径 使用如下的拓扑图 OSPF的LSA有七种类型 SPF算法计算最小生成树使用一类Router LSA和二类
  • Spark编程基础-RDD

    目录 1 何为RDD 2 RDD的五大特性 3 RDD常用算子 3 1 Transformation算子 1 map 2 flatMap 3 reduceByKey 4 mapValues 5 groupBy 6 filter 7 dist
  • CentOS7 上安装 Postgresql

    1 选择安装包 在postgresql的官方即可找到源码文件目录 地址如下 postgresql的官网地址 根据项目需求选择对应的版本进行安装 具体如下图所示 2 安装 解压安装包 首先进入源码包所在的目录进行解压 root admin n
  • 【http】get/post 获取请求参数

    1 只对 get 请求获取 Url 后面的参数 使用 HttpServletRequest的 getQueryString 方法 String getQueryString 2 无论是 get 还是 post 请求 获取参数 使用 Serv
  • Java使用Selenium实现自动化测试以及全功能爬虫

    1 你听没听说过Selenium 1 1 自动化测试 提到Selenium 便离不开自动化测试 自动化测试 就是把手工进行的测试过程 转变成机器自动执行的测试过程 自动化测试有如下优点 对程序的回归测试更方便 这可能是自动化测试最主要的任务
  • 安科瑞能源物联网以能源供应、能源管理、设备管理、能耗分析的能源流向为主线-安科瑞黄安南

    摘要 随着科学技术的发展 我国的物联网技术有了很大进展 为了提升电力抄表服务的稳定性 保障电力抄表数据的可靠性 本文提出并实现了基于物联网的智能电力抄表服务平台 结合云计算 大数据等技术 提供电力集抄 能耗管理 电气安全 预付费 智能运维等
  • 【IDEA】启动项目错误:Error:java: System Java Compiler was not found in classpath

    1 概述 今天 IDEA启动项目错误 Error java System Java Compiler was not found in classpath 找了如下方案 Settings gt java compiler gt 将javac
  • 【安装教程】Anaconda软件安装教程

    安装Anaconda 下载64位的版本 下载地址 Free Download Anaconda 点击Windows徽标后 页面会往下滚动 选择64位的安装包 安装步骤截图 第一步 点击 Next 点击 I Agree 选择 All User
  • 时间的计算方法 (根据两个时间段判断是否为年,月)

    1 根据两个时间段判断是否为一年 格式 20230206 20240205 校验年 格式 20230206 20240205 public Boolean checkYear Date date1 Date date2 SimpleDate
  • Go使用Redis 发布和订阅消息

    发布消息 在Go中 Redis客户端库可以提供一个Publish方法来实现消息的发布 不同的Redis客户端库可能有不同的API和方法命名 此处以 v8 为例 v8 版本以下不需要context 下面是一个示例使用go redis库进行Pu