为了账号安全,请及时绑定邮箱和手机立即绑定

Redis 在 docker 容器中失去连接

Redis 在 docker 容器中失去连接

Go
DIEA 2023-05-08 17:41:35
我正在使用 redigo 创建 PubSub,并且连接是由 redis 池创建的。这是 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条经验 获得超11个赞

问题出在 redis conf 中名为 client-output-buffer-limit pubsub 的参数,默认值为 32mb 8mb 60,当达到限制时,redis 会关闭与 pubsub 的连接。为了解决它,我增加了价值。



查看完整回答
反对 回复 2023-05-08
  • 1 回答
  • 0 关注
  • 139 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信