首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Httpruntime缓存键不唯一?

Httpruntime缓存键不唯一?
EN

Stack Overflow用户
提问于 2009-09-14 11:48:06
回答 2查看 1.6K关注 0票数 3

虽然我已经指定了一个唯一的键,但似乎下面的代码将为5个请求返回一个值,然后为下一对请求返回另一个值,然后恢复到原始请求中保存的值,并继续执行,直到有10个不同对象都存储在同一个键下。然后,它几乎是随机的,它将从缓存中返回这些值中的哪一个。

代码语言:javascript
复制
string strDateTime = string.Empty;
string cachename = "datetimeexample";
object cachedobject = HttpRuntime.Cache.Get(cachename);
if (cachedobject != null)
    strDateTime = (string)cachedobject;
else
{
    strDateTime = DateTime.Now.ToString();
    HttpRuntime.Cache.Insert(cachename, strDateTime, null, DateTime.MaxValue, TimeSpan.FromDays(10), CacheItemPriority.NotRemovable, null);
}
Response.Write(strDateTime +"        keys:"+ HttpRuntime.Cache.Count);

非常困惑,这是因为线程还是什么原因?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-06-04 20:46:18

忽略服务器场和负载平衡的可能性,此行为可能由作为web-garden运行的应用程序池引起。引用MSDN的相关章节:

因为网络花园允许使用多个进程,所以每个进程都有自己的应用程序状态、进程内会话状态、缓存和静态数据的副本。Web花园不应该用于所有应用程序,特别是当它们需要维护状态时。在决定网络花园模式是否合适之前,请确保对应用程序的性能进行基准测试。

这将使它看起来好像缓存正在为同一个键存储多个值,从而有效地在缓存中具有重复的条目。

要在IIS7中解决此问题,请打开应用程序池的高级设置,并将最大工作进程数设置为1。对于IIS6,请参阅MSDN article (带有漂亮的屏幕截图)。

尽管晚了8个月,我还是回答了这个问题,因为我在发现this decent article on web-garden gotchas之前很久就找到了它。希望这个答案能为未来的搜索者节省大量时间。:)

票数 2
EN

Stack Overflow用户

发布于 2009-09-14 11:52:40

您的cachekey始终是'datetimeexample',因此,您将始终在缓存中有一个对象;并且您将始终收到该对象。

我不太确定您在这里试图实现什么,就我而言,它的行为完全按照它应该做的方式进行。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1421070

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档