Memcache在长键上返回false

时间:2010-07-09 15:11:46

标签: php memcached

我在PHP版本5.2.4-2ubuntu5.10上使用Php内存缓存您可以在下面找到phpinfo的信息。

当我使用大于250个字符的密钥时,memcache在$ memcache->上返回true,在$ memcache-> get上返回false。

知道如何将其设置为正常工作(在250个字符处截断键)?

如果不是 - 在我的所有代码中覆盖memcache以记录调用并知道应该在哪里更改密钥的最简单方法是什么? 感谢

memcache support    enabled
Active persistent connections   0
Revision    $Revision: 1.86 $

Directive   Local Value Master Value
memcache.allow_failover 1   1
memcache.chunk_size 8192    8192
memcache.default_port   11211   11211
memcache.hash_function  crc32   crc32
memcache.hash_strategy  standard    standard
memcache.max_failover_attempts  20  20

2 个答案:

答案 0 :(得分:3)

最大尺寸确实为250(见here)。

你不应该截断键,因为它可以映射不同于相同值的键(md5相同,但不太可能偶然发生)。

如果要检测正在发生的情况,并且因为您正在使用OOP接口,则可以装饰memcache对象,覆盖setget(或两者)以抛出异常或者找到长密钥时出错。

只有继承(没有装饰),你可以做

class MemcacheEx extends Memcache {
    public function set($key, $var, int $flag=0, $expire=0) {
        //do something with $key
        parent::set($key, $var, $flag, $expire);
    }

    //... similar for get
}
$memcache = new MemcacheEx(); //instead of new Memcache()
//...

答案 1 :(得分:2)

获取或设置长按键并通过md5()运行它。这样你的密钥总是32个字符,你不必担心它。

类似的东西:

$memcache->set(md5('really long key'), $value);

然后得到:

$memcache->get(md5('really long key'));