sql >> データベース >  >> NoSQL >> Redis

GoでRedis公開メッセージを受信する方法

    あなたのコードは問題ないと思います。問題は、サブスクリプションがアクティブになる前にメッセージを公開していることです。たとえば、これを試してみてください。これにより、発行者は1秒に1回メッセージを発行するゴルーチンになります。

    package main
    
    import (
        "fmt"
        "log"
        "time"
    
        "github.com/gomodule/redigo/redis"
    )
    
    func main() {
        fmt.Println("Start redis test.")
    
        c, err := redis.Dial("tcp", "localhost:6379")
        if err != nil {
            log.Println(err)
        } else {
            log.Println("No error during redis.Dial.")
        }
        // defer c.Close()
    
        /// Publisher.
        go func() {
            c, err := redis.Dial("tcp", "localhost:6379")
            if err != nil {
                panic(err)
            }
    
            count := 0
            for {
                c.Do("PUBLISH", "example",
                    fmt.Sprintf("test message %d", count))
                count++
                time.Sleep(1 * time.Second)
            }
        }()
        /// End here
    
        /// Subscriber.
        psc := redis.PubSubConn{Conn: c}
        psc.Subscribe("example")
    
        for {
            switch v := psc.Receive().(type) {
            case redis.Message:
                fmt.Printf("%s: message: %s\n", v.Channel, v.Data)
            case redis.Subscription:
                fmt.Printf("%s: %s %d\n", v.Channel, v.Kind, v.Count)
            case error:
                fmt.Println(v)
            }
    
            time.Sleep(1)
        }
        /// End here
    
    }
    

    これを実行すると、サブスクライバーが1秒に1回メッセージを受信し、次のような出力が生成されることがわかります。

    Start redis test.
    2021/08/18 19:01:29 No error during redis.Dial.
    example: subscribe 1
    example: message: test message 0
    example: message: test message 1
    example: message: test message 2
    example: message: test message 3
    example: message: test message 4
    example: message: test message 5
    



    1. Mongo DBは、任意の値を持つフィールド名で検索します

    2. RedisExpireが機能しない

    3. hSetキーでTTLを再設定します

    4. MongoDBで日付から週を取得する3つの方法