Redis实例经常使用Go-lang Client Redigo丢失缓存

I'm developing an api for blog or online publishing website to develop a recommendation engine for their content. Since my api returns same json for same url request, I decided to use Redis as a cache for high traffic websites by passing the url as key and json as value. I am developing this api in go-lang recently and have been using redigo to talk to our Redis instance. The way I decided to architect my system is to check the url of the query sent by the client (blog) and search for it in redis. If however, the url response in not cached I do a 301 redirect to another api that applied the logic to generate the json response for that particular url and also set the redis cache. However, while I'm testing if my Redis is working properly, I realised that it is missing cache far too often than what I would like. It's definitely caching the json response mapped to the url as confirmed by doing a simple GET in Redis-cli but after 3-4 hits I could see Redis missing cache again. I'm still very new to go-lang and caching world so I'm not sure if I'm missing something in my implementation. Also, I would like to know under what circumstances can Redis instance miss caches ? It can't be timeout because Redis docs says "By default recent versions of Redis don't close the connection with the client if the client is idle for many seconds: the connection will remain open forever." so I'm not sure what exactly is happening with my setup. Relevant part of my code is below:

package main

import (
    "flag"
    "fmt"
    "github.com/garyburd/redigo/redis"
    "log"
    "net/http"
    "time"
)

var (
    port          int
    folder        string
    pool          *redis.Pool
    redisServer   = flag.String("redisServer", "redisip:22121", "")
    redisPassword = flag.String("redisPassword", "", "")
)

func init() {
    flag.IntVar(&port, "port", 80, "HTTP Server Port")
    flag.StringVar(&folder, "folder", "www", "Serve this folder")
}

func newPool(server, password string) *redis.Pool {
    return &redis.Pool{
        MaxIdle:     3,
        MaxActive:   25000,
        IdleTimeout: 30 * 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
        },
    }
}

func main() {
    flag.Parse()
    pool = newPool(*redisServer, *redisPassword)
    httpAddr := fmt.Sprintf(":%v", port)
    log.Printf("Listening to %v", httpAddr)
    http.HandleFunc("/api", api)

    http.Handle("/static/", http.StripPrefix("/static/", http.FileServer(http.Dir(folder))))
    log.Fatal(http.ListenAndServe(httpAddr, nil))

}

func api(w http.ResponseWriter, r *http.Request) {
    link := r.URL.Query().Get("url")
    fmt.Println(link)
    heading := r.URL.Query().Get("heading")
    conn := pool.Get()
    reply, err := redis.String(conn.Do("GET", link))
    defer conn.Close()
    if err != nil {
        fmt.Println("Error for link %v:%v", heading, err)
        http.Redirect(w, r, "json-producing-api", 301)
    }
    fmt.Fprint(w, reply)

}

I must also mention here that in the above code, my redis instance is actually a twemproxy client built by twitter which proxies three different redis client running behind on three different ports. Everything seemed to worked normal yesterday and I did a successful load test for 5k concurrent reuquests. However, when I checked the log today some queries were being missed by redis and were being redirected to my json-producing-api and I could see redigo:nil error. I'm totally confused as to what exactly is going wrong? Any help will be greatly appreciated.

EDIT: As per discussions below, I'm detailing the code that I use to set the data in Redis

func SetIntoRedis(key string, value string) bool {
    // returns true if successfully set, returns false in case of an error
    conn := pool.Get()
    _, err := conn.Do("SET", key, value)
    if err != nil {

        log.Printf("Error Setting %v : %v", key, err)
        return false
    }
    return true
}

Configuration of my twemproxy client

leaf:
  listen: 0.0.0.0:22121
  hash: fnv1a_64
  distribution: ketama
  redis: true
  auto_eject_hosts: true
  server_retry_timeout: 3000
  server_failure_limit: 3
  servers:
   - 127.0.0.1:6379:1
   - 127.0.0.1:6380:1
   - 127.0.0.1:6381:1