猿问

去Redis加载

我正在尝试将 2 亿个密钥加载到 redis 中,通常在大约 3100 万个密钥时开始出现错误并且不得不停止。我正在使用 golang 和 redis 库“github.com/garyburd/redigo/redis”


我设置了一个连接池:


func newPool(server string) *redis.Pool {

    return &redis.Pool{

        MaxIdle: 3,

        MaxActive: 10,

        IdleTimeout: 240 * time.Second,

        Dial: func () (redis.Conn, error) {

            c, err := redis.Dial("tcp", server)

            if err != nil {

                return nil, err

            }

            return c, err

        },

        TestOnBorrow: func(c redis.Conn, t time.Time) error {

            _, err := c.Do("PING")

            return err

        },

    }

}

然后我尝试使用这个函数用值填充 redis:


func RedisServerBatchLoadKeys(rtbExchange string, keys []string){

  redisLock.Lock()

  defer redisLock.Unlock()

  retry := 0

  for {

    conn := GetConnOrPanic(rtbExchange)

    defer conn.Close()

    conn.Send("MULTI")

    for _, key := range keys {

      conn.Send("SET", key, maxCount)

      conn.Send("EXPIRE", key, numSecondsExpire)

    }

    _, err := conn.Do("EXEC")

    if err == nil {

      break

    } else if !(err == io.EOF) {

      CheckRedisError(err, rtbExchange, "Could not load batch")

    } else {

      retry ++

    }

    if retry >= 10 {

      CheckRedisError(err, rtbExchange, "Could not load batch - 10 retries")

    }

  }

}

我收到了很多错误,例如:


读取 tcp 10.249.15.194:6379:由对等方重置连接

拨打 tcp 10.249.15.194:6379:连接被拒绝

redis#RedisError : EOF

我是在做一些根本错误的事情还是我必须添加更多错误检查(除了我添加的 EOF)。


谢谢,


九州编程
浏览 167回答 1
1回答
随时随地看视频慕课网APP

相关分类

Go
我要回答