redis - 为什么会出现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 超时。这是因为没有潜艇还是慢潜艇?请帮助我。谢谢!
解决方案
100 毫秒超时非常激进
go-redis 中的默认超时时间是 3 秒,给定一个大样本(如您所说的运行几分钟),一些发布命令可能需要超过 100 毫秒的时间并不是不可想象的。这取决于您的服务器特性以及您是否有其他客户端使用同一服务器。
我建议您使用 redis-benchmark 实用程序来了解您从 redis 实例获得的性能,看看您的超时与发布命令的 P99 往返时间有多接近
推荐阅读
- javascript - 除非我重新加载,否则无法提交表单
- angular - Angular 5中带有图像的选择框
- node.js - 使用 nodejs 和车把
- triggers - 如何在 JIRA 上接收来自 Bitbucket 的钩子并处理此钩子数据?
- android - 如何以 RectangleF 为边界裁剪位图
- java - 如何为liferay定义'java.lang.ClassNotFoundException:com.mysql.cj.jdbc.Driver'
- c++ - 显示输出和输入的函数问题
- reactjs - Material UI TextField 自定义
- c# - CefSharp Chromium 页面加载永远不会完成
- c# - 使用 ClassData 自动测试 TFS/xUnit 仅使用第一个断言