redis 使用Pub/Sub 报错,我已经用了两个Client了?

ERR only (P)SUBSCRIBE / (P)UNSUBSCRIBE / QUIT allowed in this context

这是log中错误信息

我用了go-redis这个库

package cache

import (
    "github.com/go-redis/redis"
)

var (
    Client   *redis.Client
    Addr     string
    Password string
    DBNum    int
)

func Init(addr, password string, dbNum int) {
    Client = redis.NewClient(&redis.Options{
        Addr:     addr,
        Password: password,
        DB:       dbNum,
    })

    _, err := Client.Ping().Result()
    if err != nil {
        panic(err.Error())
    }
    Addr = addr
    Password = password
    DBNum = dbNum
}

func NewClient() *redis.Client {
    client := redis.NewClient(&redis.Options{
        Addr:     Addr,
        Password: Password,
        DB:       DBNum,
    })
    _, err := client.Ping().Result()
    if err != nil {
        log.Error("create subscription client failed " + err.Error())
        return nil
    } else {
        return client
    }
}

Client是平常的操作Client
订阅的Client是用的NewClient()

阅读 9.4k
1 个回答

pub 和sub 应该使用不同的client
文档里面说的有
https://redis.io/topics/pubsub

The commands that are allowed in the context of a subscribed client are SUBSCRIBE, PSUBSCRIBE, UNSUBSCRIBE, PUNSUBSCRIBE, PING and QUIT.
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题