如何确定Enyim memcache在存储项目时返回false的原因?

时间:2011-10-26 19:02:53

标签: c# .net memcached enyim

如何确定以下呼叫中为什么Enyim返回false:

cache.Store(Enyim.Caching.Memcached.StoreMode.Set, key, value);

其他项目存储得很好,因此连接到服务器似乎不是问题。该对象似乎不大于1 MB。

那么如何确定导致错误的原因呢?

4 个答案:

答案 0 :(得分:1)

要检查的另一件事是您存储的整个对象图是[Serializable]。如果不是,则Enyim将抛出序列化异常,这将告诉您哪种类型需要标记为可序列化。按照https://github.com/enyim/EnyimMemcached/wiki/Configure-Logging上的说明启用日志记录。

答案 1 :(得分:0)

一种可能性是您的密钥可能包含非法字符。通常,ASCII字符的非常低端可能会导致这种情况 - 我相信0x30及以上肯定是安全的,并且可能还有0x20和更高。重新调整ASCII character chart可以看到0x00到0x1F主要是特殊字符。 0x20到0x2F是“普通”字符,但在一些参考资料中我已经看到它们也可以用作控制字符。

这个问题给我带来了一些问题;我通过构建一个非常独特的密钥来解决它,很少考虑长度,然后生成密钥的MD5校验和。 MD5总和可确保最小的密钥冲突风险,安全字符以及比实际密钥更短的长度。

答案 2 :(得分:0)

Memcached默认将对象的大小限制在1MB以下。检查memcached服务器上的配置。限制是可配置的,但不建议更改,因为它会影响服务器本身的整体性能。

答案 3 :(得分:0)

我们完全包装了Enyim客户端,以创建执行正确连接池的静态方法。我们在包装器代码中做了两件事:

1)检查密钥是&lt; = 250个字符并包含有效字符 2)检查长度是否<1。 1MB。我们检查字符串和byte []上的长度。

我们还要求增强请求。 它是:http://www.couchbase.org/issues/browse/NCBC-10