我在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
答案 0 :(得分:3)
最大尺寸确实为250(见here)。
你不应该截断键,因为它可以映射不同于相同值的键(md5相同,但不太可能偶然发生)。
如果要检测正在发生的情况,并且因为您正在使用OOP接口,则可以装饰memcache对象,覆盖set
或get
(或两者)以抛出异常或者找到长密钥时出错。
只有继承(没有装饰),你可以做
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'));