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

Go整合Redis2.0发布订阅

Go整合Redis2.0发布订阅


Redis

goredis-cli --version
redis-cli 5.0.14.1 (git:ec77f72d)

Go

go get github.com/go-redis/redis/v8
package redisimport ("MyKindom-Server-v2.0/com/xzm/core/config/yaml""MyKindom-Server-v2.0/com/xzm/core/config/yaml/pojo""context""fmt""github.com/go-redis/redis/v8""time"
)// RDB
var RDB *redis.Client
var globalConfig = yaml.GlobalConfig// initRedis 初始化Redis连接
func initRedis(config pojo.RedisConfig) error {RDB = redis.NewClient(&redis.Options{Addr:     config.Address,//Redis地址:localhost:6379Password: config.Password,//密码:123456DB:       config.DbIndex,//索引 :0})ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)defer cancel()// 测试连接if err := RDB.Ping(ctx).Err(); err != nil {return fmt.Errorf("连接Redis失败: %v", err)}return nil
}func init() {initRedis(globalConfig.Redis)
}


package mainimport ("context""fmt""MyKindom-Server-v2.0/com/xzm/core/dadabase/redis"
)/*** @Author: XuZhiMing* @Date: 2024/7/18 17:04* @Description: 测试redis发布订阅*/
func main() {backgroundCtx := context.Background()channelName := "new"go subscribeChannel(backgroundCtx, channelName)for {var message stringfmt.Print("请输入消息: ")fmt.Scanln(&message)err := publishMessage(backgroundCtx, channelName, message)if err != nil {fmt.Println("发布消息失败:", err)}}// 保持程序运行,以便订阅者可以接收到消息select {}}// 订阅指定频道
func subscribeChannel(ctx context.Context, channel string) {pubsub := redis.RDB.Subscribe(ctx, channel)defer pubsub.Close()fmt.Printf("已订阅频道 [%s]\n", channel)// 监听消息ch := pubsub.Channel()for msg := range ch {fmt.Printf("[收到] 频道: %s | 内容: %s\n", msg.Channel, msg.Payload)}
}// 发布消息到指定频道
func publishMessage(ctx context.Context, channel, message string) error {err := redis.RDB.Publish(ctx, channel, message).Err()if err != nil {return err}fmt.Printf("[发布] 频道: %s | 内容: %s\n", channel, message)return nil
}
http://www.lryc.cn/news/2397138.html

相关文章:

  • 电子电气架构 --- 如何应对未来区域式电子电气(E/E)架构的挑战?
  • 鸿蒙OS基于UniApp的区块链钱包开发实践:打造支持鸿蒙生态的Web3应用#三方框架 #Uniapp
  • 易学探索助手-个人记录(十二)
  • Windows 账号管理与安全指南
  • Python窗体编程技术详解
  • 思维链提示:激发大语言模型推理能力的突破性方法
  • NVMe协议简介之AXI总线更新
  • 设计模式——责任链设计模式(行为型)
  • 基于Android的医院陪诊预约系统
  • 基于Spring Boot 电商书城平台系统设计与实现(源码+文档+部署讲解)
  • 【金融基础学习】债券回购方式
  • 第五十九节:性能优化-GPU加速 (CUDA 模块)
  • 单元测试-概述入门
  • ⚡ Hyperlane —— 比 Rocket 更快的 Rust Web 框架!
  • 《AI Agent项目开发实战》DeepSeek R1模型蒸馏入门实战
  • Ubuntu 24.04 LTS Chrome 中文输入法(搜狗等)失效?一行命令解决
  • 字节golang后端二面
  • 计算机网络物理层基础练习
  • vscode + cmake + ninja+ gcc 搭建MCU开发环境
  • 三种经典算法优化无线传感器网络(WSN)覆盖(SSA-WSN、PSO-WSN、GWO-WSN),MATLAB代码实现
  • JVM 核心组件深度解析:堆、方法区、执行引擎与本地方法接口
  • OpenCV4.4.0下载及初步配置(Win11)
  • 【iOS(swift)笔记-13】App版本不升级时本地数据库sqlite更新逻辑一
  • Flink CDC将MySQL数据同步到数据湖
  • 使用Mathematica观察多形式根的分布随参数的变化
  • 【C++高级主题】转换与多个基类
  • C++.双指针算法(1.1目录修正)
  • 『uniapp』添加桌面长按快捷操作 shortcuts(详细图文注释)
  • 【LLM vs Agent】从语言模型到智能体,人工智能迈出的关键一步
  • 【看到哪里写到哪里】C的指针-3(函数指针)