gpt4 book ai didi

c# - 一起使用 InProc 和 Azure AppFabric 缓存

转载 作者:行者123 更新时间:2023-11-30 14:37:09 27 4
gpt4 key购买 nike

首先介绍一下背景。我目前有一个由 Windows Azure 托管的网站,具有多个实例,并且 AppFabric 作为我唯一的缓存提供程序。

一切都很顺利,直到今天早上我的流量激增。在实例过载并停止响应后,一旦新实例启动,一切都会恢复正常。

但是,我开始收到来自 AppFabric 的消息,称我受到限制,因为在给定的时间内请求太多。这很公平,但这确实让事情变得很糟糕。

为了避免将来出现这些消息,我计划实现一个生命周期非常短的 InProc 缓存。所以它首先检查InProc,如果没有就去AppFabric,如果没有就去DB。

 ObjectCache cache = MemoryCache.Default;

CacheItemPolicy policy = new CacheItemPolicy();
policy.AbsoluteExpiration = DateTimeOffset.Now.AddMinutes(5);

我的问题是

  • 这是处理这种情况的最佳方法吗?
  • 这会干扰 AppFabric 缓存吗?
  • 有什么我忽略的问题吗?

更新我只是想说我选择了上面的方法并且效果很好。我仅将它用于一般数据存储,而不是 session 状态。由于没有服务器关联性,具有 session 状态的 MemoryCache 在 Azure 上无法很好地工作(正如下面 David 提到的)。

2012 年 3 月 16 日更新在意识到这一点后,我还在大多数页面上禁用了 SessionState。我的大多数页面都不需要它,因此这会迅速减少我在重负载下对缓存的调用。我还禁用了大多数页面的 ViewState,只是为了稍微加快页面加载时间。

最佳答案

您是否使用缓存来提供 SessionState 存储或应用程序的常规数据存储,或两者兼而有之?这并不完全清楚,因为 InProc 通常指的是 SessionState,但您的示例代码看起来不像 SessionState。

假设您存储的数据可以在本地安全缓存,那么我建议您研究 AppFabric 本地缓存。它基本上可以满足您的需求,并且不需要编写任何单独的代码(我认为......)。

否则,按照您的概述使用 MemoryCache 是一个可行的方案。我已经在我的应用程序中完成了此操作,您只需要小心避免缓存不一致问题即可。

根据您的应用程序,您可能还希望通过将数据存储在 HttpContext.Items 集合中来实现每个请求缓存。当代码的不同部分可能在单个请求期间请求相同的数据时,这非常有用。

关于c# - 一起使用 InProc 和 Azure AppFabric 缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9613146/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com