【问题标题】:Can memcached keys contain spaces?memcached 键可以包含空格吗?
【发布时间】:2011-04-29 00:59:51
【问题描述】:

我似乎对带有空格的 memcached 键有问题,但我无法确定具体是什么。

【问题讨论】:

  • @Ethan,那里的结果是在谈论与 memcached 通信的特定 Python 库,而不是 memcached 本身。
  • @Ethan 我确实做了那个搜索。基本上有一篇关于它的博客文章没有太多细节,而且大多数时候带空格的 memcache 键对我有用。希望从有帮助的 SO 社区获得更多信息。

标签: php memcached


【解决方案1】:

更明确的答案(达斯汀提到,但未提及):

按键

memcached 存储的数据是在密钥的帮助下识别的。关键 是一个文本字符串,应该唯一地标识客户端的数据 对存储和检索它感兴趣的人。目前, 密钥的长度限制设置为 250 个字符(当然,通常 客户不需要使用这么长的密钥);密钥不得包括 控制字符或空格。

来源:protocol.txt (Specific Version)

【讨论】:

【解决方案2】:

没有。 Memcached 键不能包含空格。

【讨论】:

  • 一些引用、证明或推理会很好
  • 我在核心服务器的那部分工作,并且编写了许多客户端和其他服务器。原始的protocol.txt 非常清楚地列出了密钥格式。
  • 了解当键中有空格时会发生什么可能会有所帮助。它是否简单地处理任何 get/set 操作?
【解决方案3】:

Memcached 客户端似乎不会为了提高性能而验证密钥。

我通常做的是创建一个名为createWellFormedKey($key)的方法,并将返回的结果传递给memcached客户端的set()get()方法。

我不使用 md5 和 sha1 散列,除非 base64 版本超过 250 个字符。这是因为 md5 和 sha1 在性能方面更昂贵。

示例 PHP 代码如下所示:

/**
 * Generates a well formed key using the following algorithm:
 * 1. base64_encode the key first to make sure all characters are valid
 * 2. Check length of result, less than 250 then return it
 * 3. Length of result more than 250 then create a key that is md5($validKey).sha1($validKey).strlen($validKey)
 */
private function createWellFormedKey($key) {
    // Get rid of all spaces, control characters, etc using base64
    $validKey = base64_encode($key);

    $validKeyLength = strlen($validKey);
    // 250 is the maximum memcached can handle
    if (strlen($validKey) < 250) {
        return $validKey;
    }

    $validKey = md5($validKey).sha1($validKey).$validKeyLength;
    return $validKey;
}

【讨论】:

    【解决方案4】:

    目前我正在使用 PHP 来玩 memcached,恕我直言,可以通过使用 md5 和 sha1(或任何其他)等哈希算法轻松解决所描述的问题。

    我正在使用 md5-hash、sha1-hash 和 sha256 + 给定密钥的长度的组合。 显然这种方法可以简化为两个hash-methods + key的长度,所以你可以很容易地避免使用空格或其他不应该在key中的字符。

    在我看来,避免了哈希冲突,因为两种哈希算法发生冲突的可能性几乎为 0。通过在密钥中额外使用密钥长度,冲突问题为 0。

    【讨论】:

      【解决方案5】:

      使用 memcached binary 协议的应用程序可以使用包含空格的键,但仍有 250 字节的长度限制。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-09
        • 1970-01-01
        • 1970-01-01
        • 2011-01-07
        相关资源
        最近更新 更多