Недостающие миллисекунды в коде Go, выполняющем операцию redis - PullRequest
0 голосов
/ 14 мая 2018

Ниже приведен пример фрагмента для получения значения из Redis.Я передаю 3 команды redis и получаю значения.Проблема здесь в «пропущенных миллисекундах».Время, затрачиваемое конвейером Redis, значительно меньше (менее 5 мс), но общее время, необходимое для выполнения операции Get, составляет более 10 мс.Не уверенный, какая операция занимает время, проблема не в маршале, так как я измерил длину (байты) и время.Буду признателен за любую оказанную помощь.

Request / Second = 300, работает на 3 больших экземплярах AWS с мощным экземпляром Redis 25 ГБ.Использование 10 подключений по умолчанию.

func Get(params...) <-chan CacheResult {
    start := time.Now()
    var res CacheResult
    defer func() {
            resCh <- res
    }()

    type timers struct {
        total     time.Duration
        pipeline  time.Duration
        unmarshal time.Duration
    }
t := timers{}

    startPipeTime := time.Now()
    // pipe line commands
    pipe := c.client.Pipeline()
    // 3 commands pipelined (HGET, HEGT, GET)
    if _, res.Err = pipe.Exec(); res.Err != nil && res.Err != redis.Nil {
                    return resCh
    }
    sinceStartPipeTime := time.Since(startPipeTime)

// get query values like below for HGET & GET
if val, res.Err = cachedValue.Bytes(); res.Err != nil {
    return resCh
}

// Unmarshal the query value
startUnmarshalTime := time.Now()
var cv common.CacheValue
if res.Err = json.Unmarshal(val, &cv); res.Err != nil {
    return resCh
}
sinceStartUnmarshalTime := time.Since(startUnmarshalTime)
t.unmarshal = sinceStartUnmarshalTime

endTime := time.Since(start)
xlog.Infof("Timings total:%s, "+
        "pipeline(redis):%s, unmarshaling(%vB):%s", t.total, t.pipeline, len(val), t.unmarshal)
return resCh

}

1 Ответ

0 голосов
/ 14 мая 2018

Время выполнения команды redis включает:

  1. Предварительная обработка сервера приложений
  2. Время прохождения сигнала между сервером приложений и сервером Redis
  3. Время обработки сервера Redis

В нормальном режиме (2) занимает самое значительное время.

...