那么在thinkphp中如何用到memcache呢?
1. 查看官方手册。
所有的缓存方式都被统一使用公共的调用接口,这个接口就是Cache缓存类。 缓存类的使用很简单: $Cache = Cache::getInstance('缓存方式','缓存参数'); 例如,使用Xcache作为缓存方式,缓存有效期60秒。 $Cache = Cache::getInstance('Xcache',array('expire'=>'60')); 存取缓存数据 $Cache->set('name','ThinkPHP'); // 缓存name数据 $value = $Cache->get('name'); // 获取缓存的name数据 $Cache->rm('name'); // 删除缓存的name数据
class CacheAction extends Action{ //缓存类 function index() { $cache = Cache::getInstance('Memcache',array('expire'=>'60')); //60秒 $cache->set("name","thinkphp"); $value = $cache->get("name"); var_dump($value); if($value){ dump($value); }else{ echo "wrong"; } } }
深思过后,我恍然大悟:这丫根本没有连接memcache的ip和端口啊。
于是我又改动,如下:
class CacheAction extends Action{ //缓存类 function index() { $cache = Cache::getInstance('Memcache',array('host'=>'127.0.0.1','port'=>'11211','expire'=>60)); //加上memcache服务器IP和端口以及失效时间 $cache->set("name","thinkphp"); $value = $cache->get("name"); var_dump($value); //var_dump($cache); if($value){ dump($value); }else{ echo "wrong"; } } }浏览器输出结果,我又湿了。我擦。怎么不稳定啊。一刷新有结果,一刷新又没了,我当时无语了。打开以上代码中的
var_dump($cache);直接查看这个cache实例,看输出结果是什么,结果也是断断续续,很不稳定:
object(CacheMemcache)#4 (6) { ["connected:protected"]=> bool(true) ["handler:protected"]=> object(Memcache)#5 (1) { ["connection"]=> resource(16) of type (memcache connection) } ["prefix:protected"]=> string(2) "~@" ["options:protected"]=> array(0) { } ["type:protected"]=> string(7) "EMCACHE" ["expire:protected"]=> int(3600) }以上代码表示已经连上。继续刷新:
object(CacheMemcache)#4 (6) { ["connected:protected"]=> bool(false) ["handler:protected"]=> object(Memcache)#5 (0) { } ["prefix:protected"]=> string(2) "~@" ["options:protected"]=> array(0) { } ["type:protected"]=> string(7) "EMCACHE" ["expire:protected"]=> int(3600) }我擦。又连接失败了!
2 . 通过百度查找资料,发现这另一种方法,修改配置文件config.php文件,在配置文件中加入:
'DATA_CACHE_TYPE' => 'Memcache', //默认是file方式进行缓存的,修改为memcache 'MEMCACHE_HOST' => 'tcp://127.0.0.1:11211', //memcache服务器地址和端口,这里为本机。 'DATA_CACHE_TIME' => '10', //过期的秒数。
class CacheAction extends Action{ //缓存类 function index() { $cache = Cache::getInstance(); //修改config.php文件后,里面就不需要填参数了,直接调用,实例化。 $cache->set("name","thinkphp"); $value = $cache->get("name"); var_dump($cache); if($value){ dump($value); }else{ echo "wrong"; } } }上述结果为正确,且刷新不会错误。OK ,完美解决。thinkphp你就不能说清楚点哇。像MEMCACHE_HOST和DATA_CACHE_TIME在手册中根本就搜索不到。
3 . S( )方法。
在官方手册中,提供了一种便捷的缓存方式S( ):
S("data","123456",10); $data = S('data'); var_dump($data);
'DATA_CACHE_TYPE' => 'Memcache', //默认是file方式进行缓存的,修改为memcache 'MEMCACHE_HOST' => 'tcp://127.0.0.1:11211', //memcache服务器地址和端口,这里为本机。 'DATA_CACHE_TIME' => '10', //过期的秒数。那么就变成用memcache来存储缓存了。
那么我推荐:在config.php配置文件中设定好,用S ( )方法来存储和读取。更高效。