Redis 在并发访问期间执行简单命令的时间过长

Redis taking too much time to execute simple commands during concurrent access

问题背景

大家好,我在golang gin中做了一个项目,使用"github.com/go-redis/redis/v7"

在里面集成了redis Clusterclient

P.S。我使用的Redis是托管在AWS

上的redis集群

我使用的redis命令只有redis.Getredis.Set

现在我做了一个 API 并在其中使用了缓存,当我在本地 运行 时,响应时间约为 200 到 300 毫秒,这非常棒 (感谢Redis)

主要问题

现在,当我开始对大约 100 个并发用户的同一个 API 进行负载测试时,响应时间显着增加(大约 4 秒)。我使用 span 来监控代码的不同部分所花费的时间,我得到了这个

从主要获取,从次要获取用于redis.Get命令

设置主要设置次要用于redis.Set

这两个命令都需要大约 1 秒的时间来执行,这是不可接受的,

can anyone please tell me some way, so that I can tackle this problem and reduce the time for the redis commands to execute

好的,我已经以某种方式解决了这个问题。 首先,我将我的 golang redis 客户端库从 go-redis/v7 更新为 go-redis/v8。它取得了显着的改进。我会建议大家也这样做。

但我仍然为响应时间过长而苦恼,所以我的下一步是更改 Redis 基础设施。早些时候我使用的是一个只有 1 个分片的 redis 集群,但现在我已经转移到另一个有 4 个分片的 redis ..

它产生了巨大的变化,我的响应从 1200 毫秒变为 180 毫秒。请注意,当我对 100 个并发用户进行负载测试时,这些响应时间即将到来,平均约为 130rps

所以简而言之,升级你的 redis 客户端,升级你的 redis 基础设施