pymemcached get 和 incr 方法给出完全不同的结果
我在我的Java项目中使用spymemcached 2.6rc1,我想在其中使用Long类作为可存储对象。不幸的是,当我存储例如 new Long(0) 对象时,get(...) 和 incr(...) 给出完全不同的结果 - get 给出包含 48 个值的 Long 对象,而 incr 给出 1。 请注意,48 代表 ASCII“0”符号。当我尝试直接从 memcached 获取同一键的值(例如通过使用 telnet)时,我得到了正确的结果 - 0。奇怪的是,Long 是很好的序列化类。因此,默认转码可能存在一些问题。有人可以澄清如何解决这种情况吗?
I use spymemcached 2.6rc1 in my Java project where I want to use the Long class as a storable object. Unfortunately, when I store e.g. new Long(0) object, the get(...) and incr(...) give the wholly different results - get gives Long object that contains 48 value and incr gives 1.
Please note that 48 represents the ASCII "0" symbol. When I try to get the value for the same key directly from memcached (e.g. by using telnet) I get the correct result - 0. Strange, the Long is good serialized class. So, probably, there is some problem with default transcoding. Can somebody clarify how to resolve this situation?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
不久前为此提出了一个问题(spymemcached bug 41)。 Spymemcached 的创建者 Dustin Sallings 对此问题是这样说的:
你不能混合使用 IntegerTranscoder 和 incr/decr。 incr/decr 要求数字为
编码为字符串,因为它们是与语言无关的服务器端操作。
下面是一个单元测试,演示了您要执行的操作:
请注意,您得到 49 的原因是因为十进制 49 是字符串“1”。
incr 和 decr 由于服务器端的原因给人们带来了很多困惑
语义。在较新版本的 memcached 中(例如我尚未应用的更改)
我的二进制分支), incr 和 decr 将在非数字字符串值上失败。那是,
你的第一个 incr 会抛出异常。
将来请在 Spymemcached 项目网站上提交错误。可以在 http://code.google.com/p/spymemcached 找到它。这样我们就可以更快地修复它们。
There was an issue filed for this a while back (spymemcached bug 41). Here's what Dustin Sallings, the creator of Spymemcached said about the issue:
You can't mix IntegerTranscoder and incr/decr. incr/decr require the numbers to be
encoded as strings as they are language-agnostic server-side operations.
Here's a unit test that demonstrates what you're trying to do:
Note that the reason you get 49 is because decimal 49 is the string "1".
incr and decr cause a lot of confusion for people because of the server-side
semantics. In newer version of memcached (e.g. changes I don't have applied yet in
my binary branch), incr and decr will fail on non-numeric string values. That is,
your first incr would throw an exception.
In the future please file bugs at the Spymemcached project website. It can be found at http://code.google.com/p/spymemcached. That way we can fix them sooner.