memcached 键可以包含空格吗?
我似乎对带有空格的 memcached 键有问题,尽管我无法准确指出是什么。
I seem to have problems with memcached keys that have spaces, though I can't pinpoint exactly what.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
更明确的答案(达斯汀提到,但没有引用):
来源:protocol.txt (具体版本)
A more explicit answer (referred to by Dustin, but not referenced):
Source: protocol.txt (Specific Version)
不可以。Memcached 键不能包含空格。
No. Memcached keys cannot contain spaces.
Memcached 客户端似乎不会为了性能而验证密钥。
我通常做的是创建一个名为
createWellFormedKey($key)
的方法,并将返回的结果传递给set()
和get()
方法memcached 客户端的。我不使用 md5 和 sha1 哈希,除非 base64 版本超过 250 个字符。这是因为 md5 和 sha1 的操作性能成本更高。
示例 PHP 代码如下所示:
Memcached clients seem not to validate keys in favor of performance.
What I usually do is create a method named
createWellFormedKey($key)
and pass the returned result to theset()
andget()
methods of the memcached client.I do not use md5 and sha1 hashing unless the base64 version exceeds 250 characters. This is because md5 and sha1 are more expensive operations performance wise.
A sample PHP code looks like this:
目前,我正在使用 PHP 来使用 memcached,恕我直言,可以通过使用 md5 和 sha1(或任何其他)等哈希算法轻松解决所描述的问题。
我使用 md5 哈希、sha1 哈希和 sha256 + 给定密钥长度的组合。
显然,这种方法可以减少为两个哈希方法+密钥长度,因此您可以轻松避免使用空格或其他不应出现在密钥中的字符。
在我看来,可以避免哈希碰撞,因为两种哈希算法发生冲突的机会几乎为 0。通过在密钥中额外使用密钥长度,冲突问题为 0。
At the moment I'm playing around with memcached with PHP and the Problem described IMHO can be easily solved by using hash algorithms like md5 and sha1 (or any other).
I'm using a combination of a md5-hash, sha1-hash and sha256 + the length of the key given.
Obviously this method can be reduced to two hash-methods + length of the key, so you can easily avoid using space or other characters that should not be in the key.
In my opinion the hash-collions are avoided because the chance that both hash algorithms have a collision is nearly 0. By additionally using the key length in the key the problem of a collision is 0.
使用 memcached binary 协议的应用程序可以使用包含空格的键,但仍然有 250 字节的长度限制。
Applications using the memcached binary protocol can use whitespace-containing keys, though there is still a 250-byte length limit.