[英]Why is memcache php extension (or memcached) so unreliable?
我对memcached感到失望。 使用它远非易事。
一个例子:
$memcache = new Memcache;
$memcache->connect('127.0.0.1', 11211) or die ("Could not connect");
$memcache->set('id', $array, 120);
我将其设置为大约一个小时前-仍然存在! 手册说可以使用“从当前时间开始的秒数”作为参数。 那么为什么到期被忽略?
令我感到困扰的另一件事是,有时没有编写值。 这几乎都是随机的。 “ argyleblanket”在php手册中提到了遇到这些问题的方法: http ://www.php.net/manual/zh/memcache.set.php#84032我也已在所有replace()调用上实现了该后备功能。 我不明白为什么它不能在第一次通话中起作用。 如果替换内容不行,为什么还要提供replace()函数呢?
问题是,为什么我会相信这样的软件可以做任何重要的事情,有没有办法使它更可靠?
您使用的语法错误。 第三个参数是压缩标志。
创建一个简单的界面,如下所示。 它可以帮助您:
/* defines params */
define('MEMCACHED', 1);
define('CACHE_DEFAULT_EXPIRE', 3600);
if(MEMCACHED) if(! class_exists('memcached')) die('memcache not loaded');
/* Cache */
if(MEMCACHED) {
global $memcache;
$memcache = new Memcache();
$memcache->connect('127.0.0.1', 11211);
}
function cacheSet($key, $var, $expire=NULL) {
if(!MEMCACHED) return 0;
global $memcache;
if(!$expire) $expire = CACHE_DEFAULT_EXPIRE;
$key = md5($key);
return $memcache->set($key, $var, false, $expire);
}
function cacheGet($key) {
if(!MEMCACHED) return 0;
global $memcache;
$key = md5($key);
return $memcache->get($key);
}
第三个参数是Memcache::set
是$ flag ,而不是$ expire 。 $ expire是第四个:
$memcache = new Memcache;
// add server, etc.
$memcache->set('foo', 'bar', 0, 5); // 5 seconds expiry
var_dump($memcache->get('foo')); // bar
sleep(6);
var_dump($memcache->get('foo')); // false
您使用的语法适用于Memcached
类,而不适用于Memcache
。
至于您的设置/替换问题,我无法在PHP 5.3.3上使用Memcache或Memcached重现此问题。
另外,我认为您应该使用PECL memcached扩展。 它提供了更多功能并直接使用libmemcached
,因此它也应该更高效。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.