我正在使用 redigo 創(chuàng)建 PubSub,并且連接是由 redis 池創(chuàng)建的。這是 Redis 池代碼:package mainimport ( "os" "os/signal" "syscall" "time" "github.com/gomodule/redigo/redis")type IRedis interface { Addr() string Conn() redis.Conn Set(key string, body string) error Close()}type Redis struct { addr string pool *redis.Pool}func NewRedis(addr string) *Redis { r := &Redis{ addr, &redis.Pool{ MaxIdle: 50000, IdleTimeout: 240 * time.Second, Dial: func() (redis.Conn, error) { c, err := redis.Dial("tcp", addr) if err != nil { return nil, err } return c, err }, TestOnBorrow: func(c redis.Conn, t time.Time) error { _, err := c.Do("PING") return err }, }, } r.cleanupHook() return r}func (r *Redis) cleanupHook() { c := make(chan os.Signal, 1) signal.Notify(c, os.Interrupt) signal.Notify(c, syscall.SIGTERM) signal.Notify(c, syscall.SIGKILL) go func() { <-c r.pool.Close() os.Exit(0) }()}func (r *Redis) Addr() string { return r.addr}func (r *Redis) Conn() redis.Conn { return r.pool.Get()}func (r *Redis) Set(key string, body string) error { p := r.pool.Get() defer p.Close() _, err := p.Do("SET", key, body) return err}func (r *Redis) Close() { r.pool.Close()}
1 回答

慕尼黑8549860
TA貢獻1818條經(jīng)驗 獲得超11個贊
問題出在 redis conf 中名為 client-output-buffer-limit pubsub 的參數(shù),默認值為 32mb 8mb 60,當達到限制時,redis 會關閉與 pubsub 的連接。為了解決它,我增加了價值。
- 1 回答
- 0 關注
- 174 瀏覽
添加回答
舉報
0/150
提交
取消