azure - Redis 锁应该在单独的实例上运行吗?

标签 azure redis stackexchange.redis redlock.net

我们正在使用:

  • Azure 上的标准 Redis
  • StackExchange.Redis
  • RedLock.net

我们的网站在过去一两年里有了显着增长,根据 Cloudflare 的数据,现在每月服务约 250,000,000 个未缓存请求。

我们偶尔会看到数百个突发异常,这些异常与 RedLock 无法获取锁有关,因为它处于冲突 状态。

我们的 Redis 缓存通常:

  • 以 10% 的服务器负载运行(我相信这与 CPU 相关)
  • 但运行内存使用率接近 100%

我的问题是:

  • 是否建议使用完全不同的 Redis 服务器来进行锁定?
  • 在 Redis 服务器中使用 100% 内存是否会导致创建锁时出现问题?

最佳答案

当您查看缓存性能指标时,故障是否与 100% 内存使用率一致?如果是这样,我敢打赌这就是罪魁祸首。

当 Redis 达到 100% 内存时,可能会发生页面错误,从而减慢请求速度。 See here获取该过程的描述。我可以想象,当内存压力达到 100% 并且请求被延迟时,Redlock.net 获取锁的 5 毫秒时间限制将到期。

我会启动第二个 Redis 服务器来进行锁定,看看它是否可以缓解问题,或者扩展现有的缓存。看看您是否仍然遇到该问题。扩展可能是最简单的实验,无需更改代码。

关于azure - Redis 锁应该在单独的实例上运行吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60674218/

相关文章:

.net - 创建 Azure ALM 友好的开发和部署环境的首选实践是什么?

python - 如何迭代 azure.core.paging.ItemPaged?

database - 使用扇出写入方法根据隐私设置(PostgreSQL、Redis)更新 Feed

memory - Redis 需要多少空闲内存才能运行?

node.js - 错误 : ERR wrong number of arguments for 'set' command

asp.net-mvc-4 - MVC 项目中的 Azure Redis 缓存

使用 flushdb 的 Redis 键空间通知

azure - 配置 Azure 负载均衡器和 NAT 规则

c# - 服务器无法验证请求

.net - ASP.NET Core - 将加密 key 存储到 Redis