我对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/en/memcache.set.php#84032 我已经在所有的replace()调用上实现了回退。我不明白为什么它不会只在第一次通话时工作。为什么提供一个replace()函数,如果它取代了内容,它是否在星空中?
问题是为什么我会相信这样的软件可以做任何重要的事情 有没有办法让它更可靠?
答案 0 :(得分:7)
你使用了错误的语法。第三个参数是压缩标志。
制作一个简单的界面,如下所示。它可以帮助你:
/* 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);
}
答案 1 :(得分:5)
第三个参数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
。
至于你的set / replace问题,我无法用PHP 5.3.3上的Memcache或Memcached重现这个问题。
另外,在我看来,你应该去PECL memcached扩展名。它提供了更多功能并直接使用libmemcached
,因此它也应该更有效。