【问题标题】:Azure Redis Cache - Application Performance ImprovementAzure Redis 缓存 - 应用程序性能改进
【发布时间】:2017-12-29 18:27:17
【问题描述】:

我有一个场景,我想知道我是否以正确的方式使用 Azure Redis 缓存,因为我绝对看不到任何性能。

网络应用程序允许客户创建、读取和更新记录,并假设这些记录是客户记录。 Azure 中有一个 SQL 数据库,有近 60.000 条客户记录,我们假设我们的示例有一个表,其中包含客户详细信息、姓名、电子邮件、地址等。

你们将如何构建这个 Web 应用程序以提高性能,因为直接查询数据库比将所有记录缓存起来要快得多。我目前使用缓存做了什么:

  • 对于每次读取,包括过滤器(搜索、排序等),我都会从 Redis 缓存中获取数据,将其反序列化为 List<T>,然后查询、过滤、搜索等并返回结果。
  • 为了更新,我更新了 sql db 中的记录,从 db 中获取所有记录作为 List<T> 并将其存储到缓存中。
  • 创建和删除与上述更新相同。

使用缓存获得零性能优势。我用错了吗?

我认为序列化大量数据并将其存储到缓存是一个坏主意。有什么想法可以让它变得更好吗?

【问题讨论】:

    标签: azure azure-caching azure-redis-cache


    【解决方案1】:

    虽然我没有在 Redis 中对跨键的搜索进行基准测试,但您可以预期 O(N) 的搜索时间,因为 Redis 必须检查每个键以查看它是否满足查询。具有涵盖您的查询的索引的数据库将能够在比 O(N) 时间更短的时间内进行搜索,因为它不必查看每条记录。我认为对于大型数据集,数据库可以更好地进行搜索,因为它不必查看每条记录。

    现在了解使用 Redis 提高性能的最佳方法。

    当您拥有要检索的值的键时,Redis 会大放异彩。在这种情况下它的速度非常快,并且会在单值查找中破坏 SQL DB 的性能。如果您使用读取量大的数据,您将看到总体上最大的好处。例如,如果您的应用程序有每个用户的用户偏好记录,必须在每个请求上进行检查,那么这将是 Redis 中缓存的理想选择。您还可以从数据库中卸载流量并将其发送到 Redis。

    查看Cache Aside Pattern 以获得更深入的解释。

    使用 Redis 的另一个问题是:确保您正在重用 ConnectionMultiplexor,而不是根据请求不断尝试重新连接到 Redis 缓存实例。这很慢,实际上每个缓存有一个最大连接限制。

    【讨论】:

    • 感谢您的澄清。我认为我的问题是我没有单独添加到缓存每条记录并通过 id 获取它,而是一个包含 60000 个项目的List<Record>。我将此列表序列化为 JSON 并将整个 JSON 存储在一个键下的缓存中,例如 AllRecords,此键的值是具有 60000 条记录的 JSON。我认为这是一个不好的方法。当然,我可以将所有记录一一存储,并且 Redis 缓存中的键可以与 SQL 数据库中的键相同,但是 Redis 缓存中没有像 Query All Items 这样的功能...
    • 除非我将所有键存储在 Azure 中的一个键下,然后基于这些键,我可以从缓存中获取所有记录,但我仍然认为这是一个不好的方法
    猜你喜欢
    • 1970-01-01
    • 2012-10-03
    • 1970-01-01
    • 2017-08-01
    • 1970-01-01
    • 2021-09-16
    • 1970-01-01
    • 2013-05-11
    相关资源
    最近更新 更多