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

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.lqws.cn/news/77239.html

相关文章:

  • 6.2本日总结
  • leetcode90.子集II:排序与同层去重的回溯优化策略
  • Python 在金融中的应用- Part 1
  • Pytorch知识点2
  • dify应用探索
  • 【Go语言】Ebiten游戏库开发者文档 (v2.8.8)
  • 字节跳动开源图标库:2000+图标一键换肤的魔法
  • 神经网络中的梯度消失与梯度爆炸
  • 代码随想录60期day54
  • 牛客周赛 Round 94
  • 聚类分析 | MATLAB实现基于SOM自组织特征映射聚类可视化
  • 数据结构之排序
  • 对抗攻击 Adversarial Attack
  • 实现按天更新vintage并热力图可视化
  • 【QT控件】QWidget 常用核心属性介绍 -- 万字详解
  • Python中sys模块详解
  • spring-boot接入websocket教程以及常见问题解决
  • 基于 51 单片机的智能饮水机控制系统设计与实现
  • 模块二:C++核心能力进阶(5篇) 篇一:《STL源码剖析:vector扩容策略与迭代器失效》
  • 达芬奇(DaVinci Resolve)下载安装教程
  • B树和B+树
  • MySQL DDL操作全解析:从入门到精通,包含索引视图分区表等全操作解析
  • 正则表达式在Java中的应用(补充)
  • Java垃圾回收机制详解:从原理到实践
  • new语法
  • 基于Python学习《Head First设计模式》第四章 工厂模式+抽象工厂
  • 《汇编语言》第13章 int指令——实验13 编写、应用中断例程
  • leetcode93.复原IP地址:回溯算法中段控制与前导零处理的深度解析
  • Spring Boot 3.X 下Redis缓存的尝试(一):初步尝试
  • Oracle授权操作