虽然我已经指定了一个唯一的键,但似乎下面的代码将为5个请求返回一个值,然后为下一对请求返回另一个值,然后恢复到原始请求中保存的值,并继续执行,直到有10个不同对象都存储在同一个键下。然后,它几乎是随机的,它将从缓存中返回这些值中的哪一个。
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);非常困惑,这是因为线程还是什么原因?
发布于 2010-06-04 20:46:18
忽略服务器场和负载平衡的可能性,此行为可能由作为web-garden运行的应用程序池引起。引用MSDN的相关章节:
因为网络花园允许使用多个进程,所以每个进程都有自己的应用程序状态、进程内会话状态、缓存和静态数据的副本。Web花园不应该用于所有应用程序,特别是当它们需要维护状态时。在决定网络花园模式是否合适之前,请确保对应用程序的性能进行基准测试。
这将使它看起来好像缓存正在为同一个键存储多个值,从而有效地在缓存中具有重复的条目。
要在IIS7中解决此问题,请打开应用程序池的高级设置,并将最大工作进程数设置为1。对于IIS6,请参阅MSDN article (带有漂亮的屏幕截图)。
尽管晚了8个月,我还是回答了这个问题,因为我在发现this decent article on web-garden gotchas之前很久就找到了它。希望这个答案能为未来的搜索者节省大量时间。:)
发布于 2009-09-14 11:52:40
您的cachekey始终是'datetimeexample',因此,您将始终在缓存中有一个对象;并且您将始终收到该对象。
我不太确定您在这里试图实现什么,就我而言,它的行为完全按照它应该做的方式进行。
https://stackoverflow.com/questions/1421070
复制相似问题