Azure: Redis与Table Storage在Web缓存方面的比较

20

我们目前在Web应用程序中使用Redis作为持久缓存,但由于其内存有限和成本问题,我开始考虑是否Table存储是一个可行的选择。

我们存储的数据是相当基本的json数据,具有清晰的两个部分键,我们将在Table storage中用它们作为分区和行键,因此我希望这意味着快速查询。

我知道一个是内存中的,而另一个是外部的,所以Table storage会慢一些,但随着规模的扩大,我相信只有一个CPU从Redis缓存中提供数据,而使用Table storage则不会有这个问题,因为它取决于我们运行的Web服务器数量。

有没有人有使用Table storage的经验或者对比两者之间的差异。

我应该补充一下,我们只是非常简单地使用Redis的get/set功能,没有其他操作,当我们自己清除数据时,Redis就会腾出空间,否则就留给Redis自己在空间不足时进行清除。


我知道已经有一段时间了 - 你在这里做了什么?我正在考虑同样的举动。Redis的成本(连接和存储)使得表格存储成为一个非常合理的选择(存储帐户、表格和分区允许轻松解决任何限制问题)。 - Tony Basallo
我们选择存储表作为缓存,响应时间通常是几毫秒,足够满足我们的需求。唯一需要注意的是不能过多地调用存储,因为它在自动到期、订阅更改等方面没有缓存的正常基础。需要在代码中自己实现很多这方面的内容。你需要仔细思考如何分组、到期和陈旧的数据,否则会导致过多的存储请求。 - Simon
但最终,即使过期了,它仍是对服务的调用。我的代码仍然调用Redis以获取缓存对象,然后Redis会说“不行,已过期”,此时我就会调用底层服务,然后重新填充Redis。因此,我不明白这如何被最小化。真正的缺点是自动过期,所以您可能会使用无效的存储空间,这需要一些维护。还有发布/订阅场景-我目前没有。 (以及对于非常繁忙的站点的请求限制)。同样,这是Redis的问题,需要$$$升级到更大的服务,因此我在那里看到类似的问题。 - Tony Basallo
是的,抱歉我的意思是任何类似于自动到期和pub/sub等Redis本地方法。关于分组,我只是提到它,以便您避免我们在缓存项过于细粒度方面犯下的最初错误,这导致我们需要比实际更多的缓存请求。那时我们刚接触缓存,所以这些是显而易见的设计考虑,至少在他们职业生涯中做过一次网站缓存的任何人都应该知道 :-) - Simon
3个回答

22

这是一个相当广泛/需要征求意见的问题。但从客观的角度来看,以下是在决定要使用哪个时需要考虑的属性:

  • Table Storage是一种持久的键值存储。因此,内容不会过期。您需要负责清除数据。
  • Table Storage可扩展到500TB。
  • Redis可以在多个节点之间水平扩展(或通过Redis服务进行扩展)。相比之下,Table Storage将在一个分区上提供高达2,000次/秒的事务,在整个存储帐户上则提供高达20,000次/秒的事务。若要进行更大规模的扩展,则需要利用多个存储帐户。
  • 与VM或Redis服务相比,Table Storage的成本要低得多。
  • Redis提供了Azure Storage表格之外的功能(如发布/订阅、内容驱逐等)。
  • Table Storage和Redis Cache都可以通过端点访问,并且有许多针对API的语言特定的SDK包装器。

1
嗨,感谢回复和信息。对我来说,关键是成本降低,但如果这导致性能下降1000%,那么它就不太吸引人了。我不是在寻求意见,而是希望从任何尝试过这个或者使用过这两个的人那里获得信息,并且对它们的性能进行大致比较。我的开发可用性相当有限,因此想看看它是否至少是可行的,然后我将开始进行概念验证练习,但如果它明显行不通,我不想浪费宝贵的时间。特别是如果在使用表格作为Web缓存时我忽略了一些关键事情,谢谢。 - Simon
我真的认为这取决于你自己来进行基准测试,看哪个对你最有效。性能将根据你的应用程序、虚拟机/应用服务的大小等因素而有所不同。 - David Makogon

6
我找到了一些关于Azure Redis和Table的材料,希望可以帮到您。其中 video关于Azure Redis的介绍,并展示了Redis和Table Storage的一些比较,在视频中约在第50分钟左右。也许可以作为参考。但是详细的性能还要看您的应用程序、数据记录等情况。Table Storage的价格取决于其容量,请参考 details。它比 redis便宜得多。

嗨,这很有趣,因为他在示例中使用Redis获取分区和行键,然后转到表存储,即使是Redis+Table调用仍然非常快,因为我们将通过分区和行查询表存储,并且从不需要更复杂的查询,这使得速度不那么重要。干杯。 - Simon

1

有许多你可能关心的差异,包括价格、性能和功能集。还有数据持久性和数据一致性。

由于Redis是一个内存数据存储器,因此它非常昂贵。这是为了实现低延迟。请查看Azure的规划FAQ,了解Redis在吞吐量方面的性能。

Azure Redis planning FAQ

Redis确实有一个可选的持久性功能,如果您想要在服务器难以避免的情况下保留和恢复数据,则可以打开该功能。但它没有强一致性保证。

Azure Table Storage不是缓存解决方案。它是一种持久存储解决方案,并将数据永久保存在某种磁盘上。从历史上看(免责声明:我没有寻找最新和最伟大的性能数字),它具有更高的读写延迟。它也严格遵循键值存储模型(具有两个部分的键)。值可以具有属性,但具有许多严格的限制,例如可以存储的对象大小、属性长度等。如果您的应用程序遇到这些限制,这些限制是不灵活且痛苦的。

Redis具有更大的功能集。 它可以进行键值操作,但还具有许多其他数据结构,如集合和列表,并且许多应用程序可以从其中获得更多的灵活性。请参见“Redis简介”(redis文档)
如果您主要倾向于Azure技术,则CosmosDB可能是另一个要考虑的选择。它相当昂贵,但非常快速且功能丰富。同时也主要用于持久存储。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接