package main import ( "encoding/base64" "flag" "fmt" "github.com/gin-gonic/gin" "github.com/gomodule/redigo/redis" "log" "math/rand" "net/http" "time" ) type Response struct { Code int Message string LongUrl string ShortUrl string } type redisPoolConf struct { maxIdle int maxActive int maxIdleTimeout int host string password string db int handleTimeout int } const letterBytes = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" const ( letterIdxBits = 6 // 6 bits to represent a letter index letterIdxMask = 1<= 0; { if remain == 0 { cache, remain = rand.Int63(), letterIdxMax } if idx := int(cache & letterIdxMask); idx < len(letterBytes) { b[i] = letterBytes[idx] i-- } cache >>= letterIdxBits remain-- } return string(b) } func initRedisPool() { // 建立连接池 redisPool = &redis.Pool{ MaxIdle: redisPoolConfig.maxIdle, MaxActive: redisPoolConfig.maxActive, IdleTimeout: time.Duration(redisPoolConfig.maxIdleTimeout) * time.Second, Wait: true, Dial: func() (redis.Conn, error) { con, err := redis.Dial("tcp", redisPoolConfig.host, redis.DialPassword(redisPoolConfig.password), redis.DialDatabase(redisPoolConfig.db), redis.DialConnectTimeout(time.Duration(redisPoolConfig.handleTimeout)*time.Second), redis.DialReadTimeout(time.Duration(redisPoolConfig.handleTimeout)*time.Second), redis.DialWriteTimeout(time.Duration(redisPoolConfig.handleTimeout)*time.Second)) if err != nil { return nil, err } return con, nil }, } }