1
0
mirror of https://github.com/redis/go-redis.git synced 2025-07-31 05:04:23 +03:00

Add auto-retry and MaxRetries option. Fixes #84.

This commit is contained in:
Vladimir Mihailenco
2015-05-10 15:33:04 +03:00
parent 2507be6cd2
commit 8c67e00efc
9 changed files with 134 additions and 50 deletions

16
conn.go
View File

@ -7,14 +7,18 @@ import (
"gopkg.in/bufio.v1"
)
var (
zeroTime = time.Time{}
)
type conn struct {
netcn net.Conn
rd *bufio.Reader
buf []byte
usedAt time.Time
readTimeout time.Duration
writeTimeout time.Duration
ReadTimeout time.Duration
WriteTimeout time.Duration
}
func newConnDialer(opt *options) func() (*conn, error) {
@ -70,8 +74,8 @@ func (cn *conn) writeCmds(cmds ...Cmder) error {
}
func (cn *conn) Read(b []byte) (int, error) {
if cn.readTimeout != 0 {
cn.netcn.SetReadDeadline(time.Now().Add(cn.readTimeout))
if cn.ReadTimeout != 0 {
cn.netcn.SetReadDeadline(time.Now().Add(cn.ReadTimeout))
} else {
cn.netcn.SetReadDeadline(zeroTime)
}
@ -79,8 +83,8 @@ func (cn *conn) Read(b []byte) (int, error) {
}
func (cn *conn) Write(b []byte) (int, error) {
if cn.writeTimeout != 0 {
cn.netcn.SetWriteDeadline(time.Now().Add(cn.writeTimeout))
if cn.WriteTimeout != 0 {
cn.netcn.SetWriteDeadline(time.Now().Add(cn.WriteTimeout))
} else {
cn.netcn.SetWriteDeadline(zeroTime)
}