我正在尝试将 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)。谢谢,
1 回答
- 1 回答
- 0 关注
- 166 浏览
添加回答
举报
0/150
提交
取消