Redigo简单实现Redis订阅发布

var wg sync.WaitGroup
func Subscribe (){
	defer wg.Done()
	
	conn,err := Redis.Dail("tcp","127.0.0.1;6379")
	if err!= nil{
		fmt.Println("Redis.Dail err:",err)
		return
	}
	defer conn.Close()
	
	//实例化一个redigo中的PubSubConn结构体
	c := Redis.PubSubConn{
		Conn: conn,
	}
	//订阅一个频道
	err = c.Subscribe("channel1")
	if err != nil{
		fmt.Println("Subscribe err:",err)
		return
	}
	//接收redis服务器返回的数据
	//循环接收
	for {
		//Receive()返回的是空接口interface{}的类型,所以需要断言
		switch v := c.Receive().(type){
		//Redis.Message结构体
		//type Message struct {
    	//	Channel string
   		//	Pattern string
    	//	Data    []byte
	    //}
		case Redis.Message :
			fmt.Printf("channel:%s,\tdata:%S\n",v.Channel,string(v.Data))

		//订阅或者取消订阅
		case Redis.Subscription:
		fmt.Printf("Channel:%s\tCount:%d \tKind:%s\n",n.Channel,n.Count,n.Kind)
		}
	}
}

func main(){
	//重新创建一个链接
	//不能在订阅的连接上
	conn,err := Redis.Dail("tcp","127.0.0.1;6379")
	if err!= nil{
		fmt.Println("Redis.Dail err:",err)
		return
	}
	defer conn.Close()
	//起一个协程
	wg.Add(1)
	go Subscribe()
	conn.Do("publish","channel1","hello")
	wg.Wait()

}

Redis.Message结构体:
Channel:发起频道
Data:数据,[]byte类型
Pattern:匹配模式(如果有)

Redis.Subscription结构体:
Kind:种类,共有 “subscribe”, “unsubscribe”, “psubscribe” or “punsubscribe”

Channel:频道
Count:订阅数量

注意:不能调用Subscribe()里面的conn进行发布信息,需要另起一个conn来进行发布。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值