自动建议,Azure Webapp和.Net核心WebAPI iMemoryCache

时间:2020-07-07 11:36:58

标签: azure caching .net-core azure-web-app-service webapi

技术栈

  • Azure WebApp
  • .Net core 2.1 WebApi

我们有大约4k的参考数据,这些数据在自动建议查找过程中使用,因此我想知道我应该将这些数据缓存在WebApp上还是应该始终从数据库/第三方API获取。

我知道我可以使用RedisCache解决此问题,但是我想知道Azure WebApp在缓存方面的工作原理,它将带来内存压力吗?什么时候?是的,那么扩大规模是唯一的解决方案吗?

我们正在使用.net Core中的IMemoryCache来存储参考数据,并且该参考数据每天都会过期,或者在Azure WebApp重新启动时会过期(因此,第一个用户将延迟直到将所有数据存储到缓存中为止)。

数据大小在500KB-1MB之间,有时会达到3MB +。

什么是最好的方法?

1 个答案:

答案 0 :(得分:1)

在使用WebApp时不建议使用iMemoryCache ,因为它与应用程序实例紧密绑定,因此,如果您尝试扩展应用程序(在一天中负载激增的情况下),则缓存机制将坏了。

  • RedisCache几乎是一个字典,键值对。
  • 查找速度非常快,但是在诸如GetAllKeys之类的其他操作中,当它必须遍历整个缓存时,它可能会非常慢。这将使您的缓存服务器崩溃,因此需要小心处理。
  • 这不会对您的应用程序的内存消耗造成任何重大压力,您只需要拥有一个静态客户端即可。其余的由redis服务器处理。

如果您打算扩展应用程序(为一个正在运行的实例提供更多的RAM和CPU资源),iMemory缓存可能就可以了。

如果计划扩展(创建应用程序的多个实例),强烈建议所有无状态应用程序使用,那么RedisCache(或任何其他分布式缓存)是您需要缓存机制的一种方法。 / p>

值和密钥的最大大小为512MB,因此在值数据大小方面,您是安全的。

注意

请确保使用官方documentation中建议的连接多路复用器,因为它会在丢失时自动重新建立连接。以前是一个错误,当Redis缓存服务器要进行维护时,您的呼叫将重定向到故障转移实例,但连接失败,因此您需要重新启动应用程序。

相关问题