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
}