现在的位置: 首页 > 综合 > 正文

thinkphp缓存技术

2014年01月29日 ⁄ 综合 ⁄ 共 2734字 ⁄ 字号 评论关闭

thinkphp对缓存技术提供了极大的支持。memcache是我们最常用到的缓存技术。

那么在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";
		}
     }
}

上面的结果,却没有出现。输出结果为:“ bool(false)  11” ,一想,这丫根本没缓存啊,是不是memcache出了点问题,于是我重启memcache服务器,然后用原生态的PHP连接memcache,却能够输出缓存结果啊。我当时就湿了。

深思过后,我恍然大悟:这丫根本没有连接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);

结果也是正确的。但是注意的是:这种方式默认是采用file文件方式来缓存。直接这样输出也是可以得到结果的。要想采用memcache进行缓存。也一样在cofig.php加上:

'DATA_CACHE_TYPE' => 'Memcache',  //默认是file方式进行缓存的,修改为memcache
'MEMCACHE_HOST'   =>  'tcp://127.0.0.1:11211',  //memcache服务器地址和端口,这里为本机。
'DATA_CACHE_TIME' => '10',  //过期的秒数。

那么就变成用memcache来存储缓存了。

那么我推荐:在config.php配置文件中设定好,用S ( )方法来存储和读取。更高效。



抱歉!评论已关闭.