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  }