Go整合Redis2.0发布订阅的实现

Written by

in

文章目录
  • goredis-cli –version redis-cli 5.0.14.1 (git:ec77f72d)
  • go get github.com/go-redis/redis/v8 package redis import ( “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:6379 Password: config.Password,//密码:123456 DB: 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 main import ( “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 string fmt.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 | 内容: %sn”, 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 | 内容: %sn”, channel, message) return nil } 到此这篇关于Go整合Redis2.0发布订阅的实现的文章就介绍到这了,更多相关Go Redis发布订阅内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客! 您可能感兴趣的文章: 探索Golang Redis实现发布订阅功能实例 go+redis实现消息队列发布与订阅的详细过程
  • 目录
    • Redis
    • Go

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

    go get github.com/go-redis/redis/v8
    
    package redis
    
    import (
        "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:6379
            Password: config.Password,//密码:123456
            DB:       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 main
    
    import (
        "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 string
            fmt.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 | 内容: %sn", 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 | 内容: %sn", channel, message)
        return nil
    }
    
    

    到此这篇关于Go整合Redis2.0发布订阅的实现的文章就介绍到这了,更多相关Go Redis发布订阅内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客!

    您可能感兴趣的文章:

    • 探索Golang Redis实现发布订阅功能实例
    • go+redis实现消息队列发布与订阅的详细过程

    站内搜索