thinkphp缓存技术 .

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

thinkphp对缓存技术提供了极大的支持。

memcache是我们最常用到的缓存技术。

那么在thinkphp中如何用到memcache呢?
1. 查看官方手册。

[php]view plaincopyprint?
1. 所有的缓存方式都被统一使用公共的调用接口,这个接口就是Cache缓存类。

2.
3. 缓存类的使用很简单:
4.
5. $Cache = Cache::getInstance('缓存方式','缓存参数');
6.
7. 例如,使用Xcache作为缓存方式,缓存有效期60秒。

8.
9. $Cache = Cache::getInstance('Xcache',array('expire'=>'60'));
10.
11. 存取缓存数据
12.
13. $Cache->set('name','ThinkPHP'); // 缓存name数据
14.
15. $value = $Cache->get('name'); // 获取缓存的name数据
16.
17. $Cache->rm('name'); // 删除缓存的name数据
以上是官方手册。

我们按照以上方法进行连接。

[php]view plaincopyprint?
1. c lass CacheAction extends Action{
2. //缓存类
3. function index() {
4.
5. $cache = Cache::getInstance('Memcache',array('expire'=>'60')); //60

6. $cache->set("name","thinkphp");
7. $value = $cache->get("name");
8. var_dump($value);
9.
10. if($value){
11. dump($value);
12. }else{
13.
14. echo "wrong";
15. }
16. }
17. }
上面的结果,却没有出现。

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

我当时就湿了。

深思过后,我恍然大悟:这丫根本没有连接memcache的ip和端口啊。

于是我又改动,如下:
[php]view plaincopyprint?
1. c lass CacheAction extends Action{
2. //缓存类
3. function index() {
4.
5. $cache = Cache::getInstance('Memcache',array('host'=>'127.0.0.1','po
rt'=>'11211','expire'=>60)); //加上memcache服务器IP和端口以及失效时间
6. $cache->set("name","thinkphp");
7. $value = $cache->get("name");
8. var_dump($value);
9. //var_dump($cache);
10. if($value){
11. dump($value);
12. }else{
13. echo "wrong";
14. }
15.
16. }
17.
18. }
浏览器输出结果,我又湿了。

我擦。

怎么不稳定啊。

一刷新有结果,一刷新又没了,我当时无语了。

打开以上代码中的
[php]view plaincopyprint?
1. v ar_dump($cache);
直接查看这个cache实例,看输出结果是什么,结果也是断断续续,很不稳定:
[php]view plaincopyprint?
1. o bject(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:prote
cted"]=> array(0) { } ["type:protected"]=> string(7) "EMCACHE" ["expire:protect
ed"]=> int(3600) }
以上代码表示已经连上。

继续刷新:
[php]view plaincopyprint?
1. o bject(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文件,在配置文件中加入:
[php]view plaincopyprint?
1.
2. 'DATA_CACHE_TYPE' => 'Memcache', //默认是file方式进行缓存的,修改为
memcache
3. 'MEMCACHE_HOST' => 'tcp://127.0.0.1:11211', //memcache服务器地址和端
口,这里为本机。

4. 'DATA_CACHE_TIME' => '10', //过期的秒数。

通过以上方法连接服务器后,再用代码进行处理,发现可以用了。

[php]view plaincopyprint?
1. c lass CacheAction extends Action{
2. //缓存类
3. function index() {
4.
5. $cache = Cache::getInstance(); //修改config.php文件后,里面就不需
要填参数了,直接调用,实例化。

6. $cache->set("name","thinkphp");
7. $value = $cache->get("name");
8. var_dump($cache);
9. if($value){
10. dump($value);
11. }else{
12.
13. echo "wrong";
14. }
15.
16. }
17. }
上述结果为正确,且刷新不会错误。

OK ,完美解决。

thinkphp你就不能说清楚点哇。

像MEMCACHE_HOST和DATA_CACHE_TIME在手册中根本就搜索不到。

3 . S( )方法。

在官方手册中,提供了一种便捷的缓存方式S( ):
[php]view plaincopyprint?
1. S("data","123456",10);
2. $data = S('data');
3. v ar_dump($data);
结果也是正确的。

但是注意的是:这种方式默认是采用file文件方式来缓存。

直接这样输出也是可以得到结果的。

要想采用memcache进行缓存。

也一样在cofig.php加上:[php]view plaincopyprint?
1. 'DATA_CACHE_TYPE' => 'Memcache', //默认是file方式进行缓存的,修改为
memcache
2. 'MEMCACHE_HOST' => 'tcp://127.0.0.1:11211', //memcache服务器地址和端
口,这里为本机。

3. 'DATA_CACHE_TIME' => '10', //过期的秒数。

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

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

更高效。

相关文档
最新文档