当前位置: 首页 > news >正文

Redis (一)消息订阅和发送测试

〇、redis 配置

1、概况

本文基于 Ubuntu20.04 云服务器配置Redis,且在本地进行 Redis 测试。

2、目录概况

在这里插入图片描述

一、配置文件

位于 /config/app.yml 中,目的用于 Redis 初始化:

redis:addr: "39.104.**.28:6379"password: "password"DB: 0poolSize: 30minIdleConn: 30

二、main 文件

package mainimport ("ChatTest/router""ChatTest/utils""github.com/gin-gonic/gin"
)func main() {utils.InitConfig()utils.InitRedis()r := gin.Default()r = router.Router()r.Run(":8000")
}

二、初始化文件

位于 /utils/system_init.go 文件中,目的用于初始化相关:

package utilsimport ("fmt""github.com/go-redis/redis/v8""github.com/spf13/viper"
)var (Red *redis.Client
)// 初始化初始化文件func InitConfig() {viper.SetConfigName("app")viper.AddConfigPath("/Users/luliang/GoLand/ChatTest/config") //带绝对路径err := viper.ReadInConfig()if err != nil {fmt.Println(err)}
}// 初始化 Redisfunc InitRedis() {Red = redis.NewClient(&redis.Options{Addr:         viper.GetString("redis.addr"),Password:     viper.GetString("redis.password"),DB:           viper.GetInt("redis.DB"),PoolSize:     viper.GetInt("redis.minIdleConn"),MinIdleConns: viper.GetInt("redis.minIdleConn"),})fmt.Println("config Redis:", viper.Get("redis"))
}

三、路由文件

路由文件位于 /router/app.go 中,目的是建立路由:

package routerimport ("ChatTest/service""github.com/gin-gonic/gin"
)func Router() *gin.Engine {r := gin.Default()r.GET("/send", service.SendMsg)r.GET("/recv", service.RecvMsg)return r
}

四、实现服务

位于/service/message.go中,是 HandlerFunc,且实现服务:

package serviceimport ("ChatTest/utils""context""github.com/gin-gonic/gin"
)func SendMsg(c *gin.Context) {cmd := utils.Red.Publish(context.Background(), "myRedis", "Hello, MyRedis0001!")if cmd != nil {c.JSON(200, gin.H{"code":    0,"message": "发送成功!",})return}c.JSON(200, gin.H{"code":    -1,"message": "发送失败!",})}func RecvMsg(c *gin.Context) {pubSub := utils.Red.Subscribe(context.Background(), "myRedis")defer pubSub.Close()ch := pubSub.Channel()for msg := range ch {c.JSON(200, gin.H{"code":    0,"message": msg.Payload,})// 根据业务逻辑决定是否终止循环并返回响应return}// 如果没有接收到消息,可以根据需要返回响应c.JSON(200, gin.H{"code":    -1,"message": "接受失败!",})
}

五、运行流程

这里面的核心就是Redis 的连接,以及在 Redis 中发布消息和订阅消息了。

1、消息的发布

cmd := utils.Red.Publish(context.Background(), "myRedis", "Hello, MyRedis0001!")

调用Publish() 函数发布一条消息,这个 Publish() 是 go-redis中封装好的方法。

2、消息的订阅

pubSub := utils.Red.Subscribe(context.Background(), "myRedis")

可以看到,go-redis 中使用消息的订阅和发布功能,可以使得消息发送和接受的过程异常简单!

全文完,感谢阅读!

http://www.lryc.cn/news/103016.html

相关文章:

  • 区间预测 | MATLAB实现QRGRU门控循环单元分位数回归多输入单输出区间预测
  • Debian 12.1 “书虫 “发布,包含 89 个错误修复和 26 个安全更新
  • hadoop部署配置
  • 文心一言 VS 讯飞星火 VS chatgpt (68)-- 算法导论6.5 7题
  • uniapp:手写签名,多张图合成一张图
  • DevExpress WPF Tree List组件,让数据可视化程度更高!(一)
  • Linux操作系统下安装python环境
  • JavaScript的宏任务和微任务
  • java的空引用null和空字符串““
  • Python+OpenCV实现自动扫雷,挑战扫雷世界记录!
  • XtarBackup 8.0.33-28 prepare 速度提升 20 倍!
  • Blazor前后端框架Known-V1.2.8
  • python模拟加密爬取诸葛
  • 安全学习DAY13_WEB应用源码获取
  • Selenium+Java环境搭建(测试系列6)
  • Shell编程学习-If条件语句
  • Android getDrawable()和getColor()
  • Android Calendar
  • C# PaddleDetection 目标检测 ( yolov3_darknet)
  • matlab多线程,parfor循环进度,matlab互斥锁
  • 建木使用进阶-创建密钥管理
  • 多模态第2篇:MMGCN代码配置
  • DHCP部署与安全详解
  • 华为数通HCIP-PIM原理与配置
  • linux 权限
  • SQL基础使用
  • 金蝶云星空任意文件读取漏洞复现(0day)
  • linux中readelf命令详解
  • Python 教程之标准库概览
  • MySQL~数据库的基本概念