首页 > 解决方案 > 为什么会出现redis pub read io timeout?

问题描述

我是使用redis的新手。我遇到了io-timeout问题。像这样的代码:

func main()  {
    client := redis.NewClient(&redis.Options{
        Addr:     "localhost:6379",
        Password: "", // no password set
        DB:       0,  // use enter code heredefault DB
        WriteTimeout: time.Millisecond * 100,
        ReadTimeout: time.Millisecond * 100,
        PoolSize: 20,
    })

    for {
        _, err := client.Publish("ch", strings.Repeat(strconv.Itoa(rand.Int()), 10)).Result()
        if err != nil {
            fmt.Println(err)
        }
    }
}

几分钟后,会出现超时问题。像这样:读取 tcp [::1]:54099->[::1]:6379: i/o 超时。这是因为没有潜艇还是慢潜艇?请帮助我。谢谢!

标签: redis

解决方案


100 毫秒超时非常激进

go-redis 中的默认超时时间是 3 秒,给定一个大样本(如您所说的运行几分钟),一些发布命令可能需要超过 100 毫秒的时间并不是不可想象的。这取决于您的服务器特性以及您是否有其他客户端使用同一服务器。

我建议您使用 redis-benchmark 实用程序来了解您从 redis 实例获得的性能,看看您的超时与发布命令的 P99 往返时间有多接近

https://redis.io/topics/benchmarks


推荐阅读