Simple get request to Redis through Golang Redigo takes ~ 40ms. At the same time executing the same get request through redis-cli takes ~ 0.040 ms. So how can I improve the performance?

I tried commenting defer connection close() and changing MaxIdle and MaxActive settings of Redigo without any success.


package redis

import (


var (
    Pool *redis.Pool

func init() {
    Pool = newPool(os.Getenv("REDIS_HOST"), os.Getenv("REDIS_PASSWORD"))

func newPool(server string, password string) *redis.Pool {

    return &redis.Pool{

        MaxIdle:     100,
        MaxActive:   200,
        IdleTimeout: 240 * time.Second,

        Dial: func() (redis.Conn, error) {
            c, err := redis.Dial("tcp", server)
            if err != nil {
                return nil, err
            if password != "" {
                if _, err := c.Do("AUTH", password); err != nil {
                    return nil, err
            return c, err

        TestOnBorrow: func(c redis.Conn, t time.Time) error {
            _, err := c.Do("PING")
            return err

func cleanupHook() {
    c := make(chan os.Signal, 1)
    signal.Notify(c, os.Interrupt)
    signal.Notify(c, syscall.SIGTERM)
    signal.Notify(c, syscall.SIGKILL)
    go func() {

// Get - gets redis key
func Get(key string) ([]byte, error) {
    defer debug.TimeExecutionMeasure(time.Now())
    fmt.Println("GET1", key, time.Now())
    conn := Pool.Get()
    fmt.Println("GET2", key, time.Now())
    // defer conn.Close()

    fmt.Println("GET3", key, time.Now())
    var data []byte
    data, err := redis.Bytes(conn.Do("GET", key))
    if err != nil {
        return data, fmt.Errorf("error getting key %s: %v", key, err)
    fmt.Println("GET4", key, time.Now())
    return data, err

So the ~20ms takes Pool.Get() and another ~20ms takes redis.Bytes.


MULTI -> TIME -> GET key -> TIME -> EXEC

I get that this comparison with redis-cli is not correct, because we don't account time to establishing connection in redis-cli. But at least the Get operation itself should be fast. Why it takes 20ms ?