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.Get
和redis.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 基础设施
问题背景
大家好,我在golang gin中做了一个项目,使用"github.com/go-redis/redis/v7"
在里面集成了redis ClusterclientP.S。我使用的Redis是托管在AWS
上的redis集群我使用的redis命令只有redis.Get
和redis.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 基础设施