github.com/qiuhoude/go-web@v0.0.0-20220223060959-ab545e78f20d/prepare/04_database/demo3_redis/pubsub/main.go (about) 1 package main 2 3 import ( 4 "fmt" 5 "github.com/garyburd/redigo/redis" 6 "time" 7 ) 8 9 const ( 10 address = "192.168.1.151:6379" 11 channelName = "testChannel1" 12 ) 13 14 // 订阅 15 func Subs() { 16 conn, err := redis.Dial("tcp", address) 17 if err != nil { 18 fmt.Println("connect redis error :", err) 19 return 20 } 21 fmt.Println("Subs connect success ...") 22 defer conn.Close() 23 24 psc := redis.PubSubConn{Conn: conn} 25 psc.Subscribe(channelName) //订阅频道 26 27 for { 28 switch v := psc.Receive().(type) { 29 case redis.Message: 30 fmt.Printf("%s: message: %s\n", v.Channel, v.Data) 31 case redis.Subscription: 32 fmt.Printf("Subscription -> %s: %s %d\n", v.Channel, v.Kind, v.Count) 33 case error: 34 fmt.Println(v) 35 return 36 } 37 } 38 } 39 40 func Push(msg string) { 41 conn, err := redis.Dial("tcp", address) 42 if err != nil { 43 fmt.Println("connect redis error :", err) 44 return 45 } 46 fmt.Println("Push connect success ...") 47 defer conn.Close() 48 49 if reply, err := conn.Do("PUBLISH", channelName, msg); err != nil { 50 fmt.Println("pub err: ", err) 51 } else { 52 fmt.Printf("reply:%v \n", reply) 53 } 54 55 } 56 57 func main() { 58 go Subs() 59 go Push("lala lu lala") 60 time.Sleep(time.Second * 3) 61 }