golang使用redis发布订阅

依赖:github.com/gomodule/redigo/redis

redis发布订阅常用函数:

  • Subscribe - 订阅channel
  • PSubscribe - 订阅channel支持通配符匹配
  • Publish - 将信息发送到指定的channel。
  • PubSubChannels - 查询活跃的channel
  • PubSubNumSub - 查询指定的channel有多少个订阅者

首先需要实例化一个redis连接

import redigoRedis "github.com/gomodule/redigo/redis"func main() {client, err := redigoRedis.Dial("tcp","localhost:6379",redigoRedis.DialPassword(""),redigoRedis.DialDatabase(0))if err != nil {return}
}

封装一个订阅者循环消费的代码

psc := redigoRedis.PubSubConn{Conn: client}
go func() {for {switch n := psc.Receive().(type) {case error:log.Println("redis sub receive error:", n)returncase redigoRedis.Message:log.Println("redis sub receive message:", n.Channel, string(n.Data))}}
}()

订阅(测试订阅:test_channel)

psc := redigoRedis.PubSubConn{Conn: client}
err = psc.Subscribe(redigoRedis.Args{}.AddFlat("test_channel")...)
if err != nil {log.Printf("redis sub channel[%s] error:%s", "test_channel", err)
}

取消订阅

psc := redigoRedis.PubSubConn{Conn: client}
err = psc.Unsubscribe(redigoRedis.Args{}.AddFlat("test_channel")...)
if err != nil {log.Printf("redis unsub channel[%s] error:%s", "test_channel", err)
}

完整代码如下

package mainimport (redigoRedis "github.com/gomodule/redigo/redis""log""time"
)func main() {//初始化连接client, err := redigoRedis.Dial("tcp", "localhost:6379",redigoRedis.DialPassword(""),redigoRedis.DialDatabase(0))if err != nil {return}defer client.Close()//构造订阅者连接psc := redigoRedis.PubSubConn{Conn: client}go func() {for {switch n := psc.Receive().(type) {case error:log.Println("redis sub receive error:", n)returncase redigoRedis.Message:log.Println("redis sub receive message:", n.Channel, string(n.Data))}}}()//订阅test_channelerr = psc.Subscribe(redigoRedis.Args{}.AddFlat("test_channel")...)if err != nil {log.Printf("redis sub channel[%s] error:%s", "test_channel", err)}//取消订阅test_channelerr = psc.Unsubscribe(redigoRedis.Args{}.AddFlat("test_channel")...)if err != nil {log.Printf("redis unsub channel[%s] error:%s", "test_channel", err)}time.Sleep(time.Hour)
}

使用客户端连接redis,用publish命令测试效果

客户端执行如下命令:

订阅收到的消息如下:


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部