自动提示,Azure Webapp & .Net core WebAPI iMemoryCache

Auto suggest, Azure Webapp & .Net core WebAPI iMemoryCache

技术栈

我们有大约 4k 的参考数据,这些数据在自动建议查找期间使用,所以在此我想知道我是否应该在 WebApp 上缓存这些数据,或者应该始终从数据库/第 3 方获取它 API。

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

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

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

最好的方法是什么?

使用 WebApps 时不建议使用 iMemoryCache 因为它与您的应用程序实例紧密绑定,所以如果您尝试扩展您的应用程序(以防白天负载激增) 你的缓存机制将被破坏。

  • RedisCache 几乎是一个字典,键值对。
  • 它在查找时非常快,但在某些其他操作(如 GetAllKeys)中可能非常慢,因为它必须 运行 遍历整个缓存。这将使您的缓存服务器崩溃,因此需要小心处理。
  • 它不会对您的应用程序的内存消耗造成任何显着压力,您只需要有一个静态客户端。剩下的交给redis服务器处理。

如果您计划扩展您的应用程序(为您的一个 运行ning 实例提供更多 RAM 和 CPU 资源)iMemory 缓存可能没问题。

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

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

关注

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