redigo设置超时时间

栏目: 数据库 · 发布时间: 6年前

如果你不传入timeout的值,那么默认0值的话,这两个set deadline的逻辑就跳过了。。。

如果不设置read/write timeout 会导致什么问题呢?假如网络有波动,执行一个 redis 命令的时候,一直没收到服务器的响应,会导致这次请求一直没有返回,晾在那。直到redis服务器设置的超时时间到了,关闭连接,然后就会读到一个EOF的错误。

单点redis的情况,如果不设置MaxActive,redis

pool的连接数是没有上限的,问题就不会暴露出来,这对我们的服务来说,影响也不大,就是在错误日志中,会多几条redis相关的EOF日志,但是这样真的没问题么?当然有问题,如果是从redis读消息,没有设置read

timeout,一直读不到,这个协程就卡在那,迟迟不给响应,对用户来说很不好。

使用集群模式,一般redis_proxy 会限制连接数,所以redis pool 就应该用MaxActive限制池子里的最大连接数,这时候如果不设置read/write timeout,问题就来了,池子里的连接会越来越少直到没有。

因此,不管那种情况,我们都应该给redis.Dial这个方法,传入三个超时时间,DialConnectTimeout, DialReadTimeout,DialWriteTimeout。

附上现在在用的 redigo的redis pool。

redis.Pool{ MaxIdle: cf.StatsRedis.MaxIdle, MaxActive: cf.StatsRedis.MaxActive, Dial: func() (redis.Conn, error) { c, err := redis.Dial("tcp", cf.StatsRedis.ProxyAddress, redis.DialConnectTimeout(time.Duration(cf.StatsRedis.ConnectTimeout) * time.Millisecond), redis.DialReadTimeout(time.Duration(cf.StatsRedis.ReadTimeout) * time.Millisecond), redis.DialWriteTimeout(time.Duration(cf.StatsRedis.WriteTimeout) * time.Millisecond)) if err != nil { l4g.Error(err) return nil, err } return c, nil }, // Use the TestOnBorrow function to check the health of an idle connection // before the connection is returned to the application. TestOnBorrow: func(c redis.Conn, t time.Time) error { if time.Since(t) < time.Minute { return nil } _, err := c.Do("PING") return err }, IdleTimeout: 300 * time.Second, // If Wait is true and the pool is at the MaxActive limit, // then Get() waits for a connection to be returned to the pool before returning Wait: true, },

之前一直以为redis.Dial这个方法会有默认的超时时间,结果事实证明它没有啊。。

写代码一定不能用“以为”。

选自: http://www.yourmoonlight.com/golang/2017/01/15/%E5%88%86%E4%BA%AB%E4%BD%BF%E7%94%A8redigo%E8%BF%9E%E5%88%B0redis-proxy%E8%B8%A9%E5%88%B0%E7%9A%84%E5%9D%91


以上所述就是小编给大家介绍的《redigo设置超时时间》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Persuasive Technology

Persuasive Technology

B.J. Fogg / Morgan Kaufmann / 2002-12 / USD 39.95

Can computers change what you think and do? Can they motivate you to stop smoking, persuade you to buy insurance, or convince you to join the Army? "Yes, they can," says Dr. B.J. Fogg, directo......一起来看看 《Persuasive Technology》 这本书的介绍吧!

MD5 加密
MD5 加密

MD5 加密工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具