我正在使用 github.com/go-redis/redis/v8 包以及以下客户端配置
rClient := redis.NewClient(&redis.Options{
Addr: strAddr,
Password: "",
DB: db,
TLSConfig: &tls.Config{},
})
我观察到从 Redis 获取值时存在一些延迟。我检查了 Amazon ElastiCache (Redis OSS) 指标,get 的命令延迟以微秒为单位,但是我的应用程序接收值的延迟要高得多(300 毫秒到 6 秒)。
我想了解如何确定 poolsize 等选项的正确值。
另外,这里提到了。
By default, the pool size is 10 connections per every available CPU as reported by runtime.GOMAXPROCS. In most cases, that is more than enough and tweaking it rarely helps.
任何人都可以帮助我理解为什么这对于大多数情况来说已经足够了。
OSS的redis指标也显示5分钟内平均当前连接数为4.5K。我应该如何确定池大小和其他配置以减少接收值的延迟。
5分钟内平均当前连接值为4.5K
这是非常高的连接数。
每个 CPU 10 个连接就足够了,因为 Redis 是单线程的,除非您正在使用大型集群或大型复制组,否则超过 80 个连接不会有任何好处。
如果这是您每 5 分钟看到的连接量,除非您有很多实例运行您的应用程序(实际上很多),否则您的应用程序中的连接或逻辑可能存在问题,导致客户端重新连接或失败,并且重新创建。您的整个应用程序也可能会上下波动。
我认为您的问题不是池大小,请尝试调试您的应用程序行为。
请随意分享有关应用程序、运行应用程序的实例数量和大小、Elasticache 详细信息(例如节点和副本数量、实例类型、CPU 和内存利用率、命令类型和数据大小以及代码片段)的更多详细信息,我会尽力提供更多见解。