1

我正在尝试将对象存储到缓存中,例如:

Dictionary<Guid, Decimal> cacheSubscribers = 
          client.Get<Dictionary<Guid, Decimal>>("ListAllSubscribers");

if (cacheSubscribers == null)
{
  cacheSubscribers = db.JK_Subscribers
                       .Where(x => x.sync)
                       .Select(x => new { x.guid, x.subscriber_id })
                       .ToDictionary(x => x.guid, x => x.subscriber_id);

  if (!client.Store(StoreMode.Set, "ListAllSubscribers", cacheSubscribers, ts))
     MessageBox.Show("Could not store ListAllSubscribers");
}

而且我总是得到client.Storefalse并且它不会添加到服务器中。

在这个语句下面的几行我也有:

IEnumerable<JK_ChallengeAnswers> challengeAnswers = client.Get<IEnumerable<JK_ChallengeAnswers>>("ListAllChallengeAnswers");
if (challengeAnswers == null)
{
    challengeAnswers = db.JK_ChallengeAnswers.Include("JK_Challenges").ToList();
    client.Store(StoreMode.Set, "ListAllChallengeAnswers", challengeAnswers, ts);
}

总是会添加到内存中...

有没有办法得到我不能存储对象的原因?

Dictionary有大约95.000 条记录,并且在我的配置中

<socketPool minPoolSize="10" 
            maxPoolSize="100" 
            connectionTimeout="00:01:00" 
            deadTimeout="00:02:00" />

PS我正在使用Couchbaselocalhost

4

2 回答 2

1

我不确定,因为代码不熟悉..所以我问:您是否要存储由 95000 条记录组成的字典?Membase 与 memcached 非常相似,所以我建议检查您可以存储的对象的大小是否有限制。我知道 memcached 是 1mb

于 2011-12-07T00:29:52.317 回答
1

您可以使用[ExecuteStore][1]方法,它返回一个IStoreOperationResult对象而不是 a bool,您可以在其中找到消息、异常等。
它并不总是有帮助,但值得一试。

编辑:为此使用 Couchbase .NET Client Library 1.1

于 2012-05-10T07:19:13.627 回答