11

如何确定为什么 Enyim 从以下调用返回 false:

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

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

那么我怎样才能确定是什么导致了错误呢?

4

4 回答 4

1

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

于 2013-10-06T05:28:02.713 回答
0

一种可能性是您的密钥可能包含非法字符。通常,非常低端的 ASCII 字符会导致这种情况——我相信 0x30 及更高版本肯定是安全的,0x20 及更高版本也可能是安全的。参考ASCII 字符图表,您可以看到 0x00 到 0x1F 主要是特殊字符。0x20 到 0x2F 是“普通”字符,但在一些参考资料中我看到提到它们也可以用作控制字符。

这个问题给我带来了一些问题;我通过构建一个高度唯一的密钥来解决它,几乎不考虑长度,然后生成密钥的 MD5 校验和。MD5 和保证了最小的密钥冲突风险、安全的字符以及比实际密钥更短的长度。

于 2011-10-26T23:20:11.320 回答
0

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

1) 检查密钥是否 <= 250 个字符并且包含有效字符 2) 检查长度是否< 1mb。我们检查字符串和字节[]的长度。

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

于 2011-12-19T20:49:30.147 回答
0

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

于 2011-12-05T19:36:19.100 回答