我对memcached很失望.使用它并非易事.
一个例子:
$memcache = new Memcache;
$memcache->connect('127.0.0.1', 11211) or die ("Could not connect");
$memcache->set('id', $array, 120);
Run Code Online (Sandbox Code Playgroud)
我在大约一个小时前设置了它 - 它仍然存在!手册说可以使用"从当前时间开始的秒数"作为参数.那么为什么忽略到期?
另一件让我感到困惑的事情是,有时候不会写出价值观.这一切都是随机的."argyleblanket"提到在php手册中遇到这些问题:http://www.php.net/manual/en/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);
}
Run Code Online (Sandbox Code Playgroud)
第三个参数Memcache::set是$标志,而不是$到期.$ 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
Run Code Online (Sandbox Code Playgroud)
您使用的语法是针对Memcached类,而不是Memcache.
至于你的set/replace问题,我无法用PHP 5.3.3上的Memcache或Memcached重现这个问题.
此外,在我看来,你应该去PECL memcached扩展.它libmemcached直接提供更多功能和用途,因此它也应该更有效.