【问题标题】:How do I determine why Enyim memcache is returning false when storing an item?如何确定 Enyim 内存缓存在存储项目时返回 false 的原因?
【发布时间】:2011-12-15 23:49:49
【问题描述】:

如何确定 Enyim 从以下调用返回 false 的原因:

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

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

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

【问题讨论】:

标签: c# .net memcached enyim


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 嗯,好主意,但不,导致问题的键不包含任何奇怪的字符。
    【解决方案3】:

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

    【讨论】:

    • 正如我在帖子中提到的,它们都小于 1MB。
    【解决方案4】:

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

    1) 检查密钥是否

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-14
      • 1970-01-01
      相关资源
      最近更新 更多