【问题标题】:How to share Azure Redis Cache between environments?如何在环境之间共享 Azure Redis 缓存?
【发布时间】:2015-09-12 07:43:57
【问题描述】:

我们希望节省几美元,并在开发、测试、QA 甚至生产之间共享我们的 1GB 专用 Azure Redis 缓存。

有没有比在所有键前面加上“Dev_[key]”、“Test_[key]”等环境字符串更好的方法。

我们正在使用适用于 .NET 的 StackExchange Redis 客户端。

PS:我们尝试使用便宜的 250GB(共享基础架构),但性能非常缓慢。读取操作在 600-800 毫秒之间保持一致......没有任何负载(对于 ~300KB 对象)。升级到专用 1GB 服务将其更改为 30-40 毫秒。在此处查看更多信息:StackExchange.Redis with Azure Redis is unusably slow or throws timeout errors

【问题讨论】:

    标签: azure redis


    【解决方案1】:

    一种方法是use multiple Redis databases。我假设这在您的环境中可用:)

    与为密钥添加前缀相比的一些优势可能是:

    • 数据单独保存,您可以flushdb在测试中,不要接触生产数据
    • 键更小,占用内存更少

    主要的disadvantage 不会利用多核,就像您在同一台服务器上运行多个 Redis 实例一样。在这种情况下显然不是问题。另请注意,此功能并未像其中一个答案所暗示的那样被弃用。

    我看到人们抱怨的另一件事是数据库被编号,它们没有有意义的名称。有些人在数据库 0 中创建一个散列,将每个数字映射到一个名称。

    【讨论】:

    • 我已经结合 DatabaseId 和 WithKeyPrefix 扩展方法来实现它。我使用 DatabaseID 作为环境,然后使用 WithKeyPrefix (github.com/StackExchange/StackExchange.Redis/blob/master/…) 作为模式版本。因此,当在类上部署具有新属性的新程序集时,旧缓存会自动失效。
    【解决方案2】:

    还有一个省钱的方法:为每个环境使用单独的 Redis 缓存机器 - 这样密钥就不会出现问题,但在不使用它们时停止它们,例如在周末和晚上。您可能有超过 50% 的时间没有使用它们。我认为使用一些 PowerShell 脚本来启动和停止它们会很容易,我们正在使用 AWS,在这里它是可能的。

    现在从我看到的 Azure 中的 Redis 持久性未启用,但他们开始处理它http://feedback.azure.com/forums/169382-cache/status/191763 - 在停止然后开始加载它之前做一个 RDB 快照会很好。因此,如果您需要保存一些值并在启动时重新加载它们,您应该手动执行(使用您自己的服务)。

    【讨论】:

    • 在 Azure Redis 中是平台即服务 (PaaS),因此当我们配置“服务器”时,您只需获得一个类似 (myredisdb.redis.cache.windows.net) 的 URI 和一个密码。你能做的不多了。我们可以取消配置它,但您无法启动/停止 AFAIK。此外,为 10 多个环境管理这个也很麻烦。
    • 这就是你所需要的 URI。我不是要安装你自己的 Redis 来启动和停止,而是根据需要启动和停止你的服务。从 Azure Redis 获得的 URI 只需在 DNS 或 Azure DNS 中修改(如果您正在使用它)。例如,当您为测试环境启动 Redis 时,您应该有一个 dns 条目 - 带有 test-redis.your-domain.com 的 CNAME,您只需使用新的 Azure Redis URI 更新它。是的,它可能会稍微复杂一些,但您可以实现很多自动化。
    • 但这并不能解决我的问题,即在环境之间共享同一个 Redis Cache 实例。我仍然需要为它们在环境之间不冲突的键添加前缀。或者我不明白什么......我很确定这不是这里的“解决方案”。
    • 你是对的,它并不能解决你使用同一个 redis 实例的问题。我建议了另一件事,因为我认为您的真正问题是节省一些钱,而我实际上建议的是一些自动缩放解决方案,因为这就是云的全部意义所在。
    • 我正在努力省钱。但我的建议在 Azure 中不起作用的原因是它是“平台即服务”。您没有可以启动和停止的服务器。您提供一个缓存实例并获得一个全局唯一端点/uri……您不知道它是 Linux 还是 Windows。配置一个新实例需要 5-10 分钟,并且您不能保证端点/uri 不会被其他人占用。此外,您每次/密码时间都会获得新的自动生成的密钥。所以这个解决方案很慢,它需要大量的 Azure 特定代码。最后你会得到更大的账单:)
    猜你喜欢
    • 1970-01-01
    • 2014-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多