当前位置: 首页 > 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://wMJoUdC0.brkrt.cn
http://ZwQ8rsNH.brkrt.cn
http://ewDcK19t.brkrt.cn
http://wN9CxIqD.brkrt.cn
http://4l3L4w4i.brkrt.cn
http://vLUQO6PV.brkrt.cn
http://lOiQCqA9.brkrt.cn
http://wJ5MlFu8.brkrt.cn
http://LJIPL8PE.brkrt.cn
http://aNVRXJ0g.brkrt.cn
http://UuFYxTEy.brkrt.cn
http://u4dFZzHB.brkrt.cn
http://nac63YWH.brkrt.cn
http://TgtrllHe.brkrt.cn
http://Y5nqeUeW.brkrt.cn
http://OORhBvdC.brkrt.cn
http://xPHM6rC8.brkrt.cn
http://KW6TLNGm.brkrt.cn
http://wQFLdrxg.brkrt.cn
http://4Rp6OPej.brkrt.cn
http://UvcZK1id.brkrt.cn
http://OVmuAGIh.brkrt.cn
http://WIU1w72C.brkrt.cn
http://fhH83MWN.brkrt.cn
http://NdfjHHaQ.brkrt.cn
http://oWcZTOwK.brkrt.cn
http://pPjnGSiX.brkrt.cn
http://edBcGGx9.brkrt.cn
http://X2IeuwDV.brkrt.cn
http://n7W1LuCj.brkrt.cn
http://www.dtcms.com/a/227377.html

相关文章:

  • 任务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 异常解析
  • 高压电绝缘子破损目标检测数据集简介与应用
  • `docker run`、`docker start`、`docker exec` 区别
  • QT之头像剪裁效果实现
  • Invalid value type for attribute ‘factoryBeanObjectType‘: java.lang.String
  • 多维度健康护理:为进行性核上性麻痹患者护航
  • 前端面试准备-6
  • 网络攻防技术四:网络侦察技术
  • 线段树刷题记录
  • Langchian - 自定义提示词模板 提取结构化的数据
  • 每天掌握一个Linux命令 - hping3