当前位置: 首页 > 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
}

相关文章:

  • 任务25:绘制全局时间线(TimeLine)
  • 方法重写与方法重载详解
  • RK3568+LINUX + CODESYS带授权+实时系统,同时开自己的视觉应用
  • 自主设计一个DDS信号发生器
  • 零基础开始的网工之路第十七天------计算机网络知识
  • Python_day43
  • 二叉树的层序遍历与完全二叉树判断
  • Linux_T(Sticky Bit)粘滞位详解
  • linux——文件系统
  • 04powerbi-度量值-筛选引擎CALCULATE()
  • 如何在 Windows 11 Home 版上下载和安装 Hyper-V
  • STM32CubeDAC及DMA配置
  • CTF:网络安全的实战演练场
  • deepseek原理和项目实战笔记2 -- deepseek核心架构
  • 【C++高级主题】转换与多个基类
  • 函数组件和类组件
  • uni-id-pages login-by-google实现
  • NVMe协议简介之AXI总线更新
  • YOLO机械臂丨使用unity搭建仿真环境,YOLO算法识别,Moveit2控制
  • Error creating bean with name *.PageHelperAutoConfiguration 异常解析
  • 手机免费代理ip/重庆的seo服务公司
  • 如何自建淘宝客网站/竞价推广开户
  • 沈阳网站托管公司/摘抄一则新闻
  • 天津宇昊建设集团有限公司网站/做推广公司
  • 个人简历网页html代码/小小课堂seo自学网
  • 什么网站加盟代理做的专业/seo优化报告