Azure Redis 缓存 - 应用程序性能改进

标签 azure azure-caching azure-redis-cache

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

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

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

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

使用缓存的性能优势为零。难道是我用错了?

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

最佳答案

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

现在介绍使用 Redis 提高性能的最佳方法。

当您拥有要检索的值的 key 时,Redis 就会大放异彩。在这种情况下,它的速度非常快,并且会在单个值查找的性能上压垮 SQL 数据库。如果您正在处理读取量大的数据,您将看到总体上最大的好处。例如,如果您的应用程序有每个用户的用户首选项记录,必须针对每个请求进行检查,那么这将是在 Redis 中进行缓存的绝佳候选者。您还可以获得从数据库卸载流量并将其发送到 Redis 的好处。

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

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

关于Azure Redis 缓存 - 应用程序性能改进,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48026815/

相关文章:

azure - docker 中 Cosmos Db 模拟器的运行状况检查

azure - 选择 Azure 中 VM 的数量和大小

c# - 本地使用 azure 缓存时出现 InvalidOperationException

azure - 如何在REDIS缓存中添加全局变量

azure - 启用 Azure Redis 缓存的诊断

c# - WebJob ServiceBusTrigger 消失在哪里了?

azure - Azure 中的 System.OutOfMemoryException 但不是本地的

asp.net-mvc-3 - 为什么我收到 "A potentially dangerous Request.Form value was detected from the client"错误?

entity-framework - 序列化 Azure 缓存的 Entity Framework 对象

c# - Azure Redis 缓存 - ConnectionMultiplexer 对象池