func DialTimeout(network, address string, connectTimeout, readTimeout, writeTimeout time.Duration) (Conn, error) {
	netDialer := net.Dialer{Timeout: connectTimeout}
	dialer := xDialer{
		NetDial:      netDialer.Dial,
		ReadTimeout:  readTimeout,
		WriteTimeout: writeTimeout,
	}
	return dialer.Dial(network, address)
}
DialTimeout acts like Dial but takes timeouts for establishing the
connection to the server, writing a command and reading a reply.
package redis
import (
	"bufio"
	"bytes"
	"errors"
	"fmt"
	"io"
	"net"
	"strconv"
	"sync"
	"time"
)
type conn struct {
	mu      sync.Mutex
	pending int
	err     error
	conn    net.Conn
	readTimeout time.Duration
	br          *bufio.Reader
	writeTimeout time.Duration
	bw           *bufio.Writer
	lenScratch [32]byte
	numScratch [40]byte
}
func Dial(network, address string) (Conn, error) {
	dialer := xDialer{}
	return dialer.Dial(network, address)
}