2014-01-22 30 views
0

没有得到我的代码如下插入一些数据缓存C#System.Web.HttpRuntime.Cache在ORDER

Cache.Insert("Key" + 1, "1", null, System.Web.Caching.Cache.NoAbsoluteExpiration, TimeSpan.FromSeconds(600)); 
Cache.Insert("Key" + 2, "2", null, System.Web.Caching.Cache.NoAbsoluteExpiration, TimeSpan.FromSeconds(600)); 
Cache.Insert("Key" + 3, "3", null, System.Web.Caching.Cache.NoAbsoluteExpiration, TimeSpan.FromSeconds(600)); 

插入到高速缓存后,我会在另一个页面抢我的数据,问题是我面对是无法取回插入顺序中的数据,例如我插入1,2和3,当我从缓存中抓取我没有得到我的预期结果,这是1,2和3.事实上,它是返回缓存中随机顺序为3,1和2。我知道我可以抓住所有缓存并重新创建我自己的字典库,以便订购它,但这不是一个好的解决方案,它可能会浪费处理时间,因此我认为这不是一个好的解决方案。

如何获取我的广告订单的订单中的缓存。

我当前的代码如下

IDictionaryEnumerator CacheEnum = Cache.GetEnumerator(); 
while (CacheEnum.MoveNext()) 
{ 
    try 
    { 
     string[] Data = CacheEnum.Value.ToString(); 

    } 
    catch (Exception ex) 
    { 
     string exx = ex.Message; 
    } 
} 
+1

如果你依赖于缓存中数据的顺序,那么你使用缓存的方式根本上是有缺陷的。 –

回答

0

如果您需要确保这种类型的顺序我反而缓存的数值数组下单缓存键。而不是每个密钥的缓存条目。

通过这种方式,您可以确保在检索到所有内容时都正确排序。

var myList = new List<string>(){"Val1","Val2"}; 

Cache.Insert("myValues", myList.OrderBy(v => v), null, System.Web.Caching.Cache.NoAbsoluteExpiration, TimeSpan.FromSeconds(600)); 
+0

谢谢,但我的数据不会一次发生,Val2会在val1之后发生。 –

+0

您可以在列表放入缓存之前对列表进行排序,甚至可以随时添加 – TGH