thinkphp3.1 缓存配置设置读取
以下黄字是我用的代码:
//设置缓存名为zgg,内容为zongguagua,有效时间60秒
cache('zgg',"zongguagua",60);
//读取缓存
if(cache('zgg')){
echo cache('zgg');
}else{
echo '已经失效';
}
另一种写法
//设置缓存类型为File,有效时间60秒,缓存类型有很多比如什么xcacha什么的,似乎还要装插件,现在用的不需要
cache(array('type'=>'File','expire'=>60));
cache('zgg',"zongguagua");
//读取缓存
if(cache('zgg')){
echo cache('zgg');
}else{
echo '已经失效';
}
下面是摘抄的内容
在项目中,合理的使用缓存对性能有较大的帮助。ThinkPHP提供了方便的缓存方式,包括数据缓存、静态缓存和查询缓存等,支持包括文件方式、APC、Db、Memcache、Shmop、Sqlite、Redis、Eaccelerator和Xcache在内的动态数据缓存类型,以及可定制的静态缓存规则,并提供了快捷方法进行存取操作。
数据缓存
在ThinkPHP中进行缓存操作,一般情况下并不需要直接操作缓存类,因为系统内置对缓存操作进行了封装,3.1版本推荐的数据缓存方法是cache方法,基本的用法是:
(3.1.2版本cache方法已经并入S方法,所以cache方法不再建议使用,直接使用S方法即可,和下文描述的cache方法用法一致)
1 缓存初始化
- cache(array('type'=>'xcache','expire'=>60));
缓存初始化可以支持的参数根据不同的缓存方式有所区别,常用的参数是:
| expire | 缓存有效期(时间为秒) |
| prefix | 缓存标识前缀 |
| type | 缓存类型 |
核心版本只有File缓存方式的支持,其他的缓存方式支持需要下载单独的缓存驱动,并放入系统目录的Extend/Driver/Cache/下面,否则会出现不支持缓存类型的错误提示。
有些缓存方式会有一些自身特殊的参数,例如Memcache缓存,还需要配置其他的参数:
- cache(array('type'=>'memcache','host'=>'192.168.1.10','port'=>'11211','prefix'=>'think','expire'=>60));
对于全局的缓存方式,一般我们建议添加prefix(缓存前缀)参数用以区分不同的应用,以免混淆。
2 缓存设置
- cache('a',$value);
会按照缓存初始化时候的参数进行缓存数据,也可以在缓存设置的时候改变参数,例如:
- cache('a',$value,300);// 缓存数据300秒
甚至改变之前的缓存方式或者更多的参数:
- cache('a',$value,array('type'=>'file','expire'=>300));// 采用文件方式缓存数据300秒
如果你在缓存设置的时候采用上面的数组方式传入参数的话,会影响到后面的缓存存取。
3 缓存读取
- $value = cache('a');
缓存读取的是前面缓存设置的值,这个值会受缓存初始化或者缓存设置的时候传入的参数影响。
如果缓存标识不存在或者已经过期,则返回false,否则返回缓存值。
4 缓存删除
- cache('a',null);
删除缓存标识为name的缓存数据。
如果要切换缓存方式,可以再次进行缓存初始化操作或者使用下面的方式:
- $cache = cache(array('type'=>'xcache','prefix'=>'think','expire'=>600));
- $cache->name = 'value'; // 设置缓存
- $value = $cache->name; // 获取缓存
- unset($cache->name); // 删除缓存
如果你设置了缓存前缀的话,对应的缓存操作只是对应该缓存前缀标识的,不会影响其他的缓存。
数据缓存可以支持缓存队列,简单的说就是可以限制缓存的数量,只需要在初始化的时候指定length参数:
- cache(array('type'=>'xcache','length'=>100,'expire'=>60));
设置了length参数后,系统只会缓存最近的100条缓存数据。
快速缓存
如果你仅仅是希望用文件的方式缓存一些简单的数据,并且没有有效期的概念,那么系统还提供了一个快速缓存方法F可以用来更快的操作。
快速缓存Data数据,默认保存在DATA_PATH目录下面
- F('data',$Data);
快速缓存Data数据,保存到指定的目录
- F('data',$Data,TEMP_PATH);
获取缓存数据
- $Data = F('data');
删除缓存数据
- F('data',NULL);
F方法支持自动创建缓存子目录,在DATA_PATH目录下面缓存data数据,如果User子目录不存在,则自动创建:
- F('User/data',$Data);
3.1.2版本开始F方法支持使用通配符批量删除功能,使用如下:
- F('User/*',NULL);
表示删除DATA_PATH.'User/'目录下面的数据缓存。
系统内置的数据字段信息缓存就是用了快速缓存机制。
查询缓存
对于及时性要求不高的数据查询,我们可以使用查询缓存功能来提高性能,而且无需自己使用缓存方法进行缓存和获取。
查询缓存功能支持所有的数据库,并且支持所有的缓存方式和有效期。
在使用查询缓存的时候,只需要调用Model类的cache方法,例如:
- $Model->cache(true)->select();
如果使用了cache(true) ,则在查询的同时会根据当前的查询SQL生成查询缓存,默认情况下缓存方式采用DATA_CACHE_TYPE参数设置的缓存方式(系统默认值为File表示采用文件方式缓存),缓存有效期是DATA_CACHE_TIME 参数设置的时间,也可以单独制定查询缓存的缓存方式和有效期:
- $Model->cache(true,60,'xcache')->select();
表示当前查询缓存的缓存方式为xcache,并且缓存有效期为60秒。
同样的查询,如果没有使用cache方法,则不会获取或者生成任何缓存,即便是之前调用过Cache方法。
查询缓存只是供内部调用,如果希望查询缓存开放给其他程序调用,可以指定查询缓存的Key,例如:
- $Model->cache('cache_name',60)->select();
则可以在外部通过S方法直接获取查询缓存的内容,
- $value = S('cache_name');
除了select方法之外,查询缓存还支持find和getField方法,以及他们的衍生方法(包括统计查询和动态查询方法)。具体应用的时候可以根据需要选择缓存方式和缓存有效期。
静态缓存
要使用静态缓存功能,需要开启HTML_CACHE_ON 参数,并且使用HTML_CACHE_RULES配置参数设置静态缓存规则文件 。
静态规则的定义方式如下:
- 'HTML_CACHE_ON'=>true, // 开启静态缓存
- 'HTML_FILE_SUFFIX' => '.shtml', // 设置静态缓存后缀为.shtml
- 'HTML_CACHE_RULES'=> array(
- 'ActionName(小写)' => array('静态规则', '静态缓存有效期', '附加规则'),
- 'ModuleName(小写)' => array('静态规则', '静态缓存有效期', '附加规则'),
- 'ModuleName(小写):ActionName(小写)' => array('静态规则', '静态缓存有效期', '附加规则'),
- '*' => array('静态规则', '静态缓存有效期', '附加规则'),
- //…更多操作的静态规则
- )
静态缓存文件的根目录在HTML_PATH 定义的路径下面,并且只有定义了静态规则的操作才会进行静态缓存。
第一种是定义全局的操作静态规则,例如定义所有的read操作的静态规则为:
- 'read'=>array('{id}','60')
其中,{id} 表示取$_GET['id'] 为静态缓存文件名,第二个参数表示缓存60秒
第二种是定义全局的模块静态规则,例如定义所有的User模块的静态规则为:
- 'user:'=>array('User/{:action}_{id}','600')
其中,{:action} 表示当前的操作名称
第三种是定义某个模块的操作的静态规则,例如,我们需要定义Blog模块的read操作进行静态缓存
- 'blog:read'=>array('{id}',0)
有个别特殊的规则,例如空模块和空操作的静态规则的定义,可以使用下面的方式:
- 'empty:index'=>array('{:module}_{:action}',0) // 定义空模块的静态规则
- 'User:_empty'=>array('User/{:action}',0) // 定义空操作的静态规则
第四种方式是定义全局的静态缓存规则,这个属于特殊情况下的使用,任何模块的操作都适用,例如
- '*'=>array('{$_SERVER.REQUEST_URI|md5}'),
根据当前的URL进行缓存
静态规则是用于定义要生成的静态文件的名称,静态规则的定义要确保不会冲突,写法可以包括以下情况:
1、使用系统变量 包括 _GET _REQUEST _SERVER _SESSION _COOKIE
格式:
{$_×××|function}
例如:
- {$_GET.name}
- {$_SERVER. REQUEST_URI|md5}
2、使用框架特定的变量
例如:{:app}、{:group} 、{:module} 和{:action} 分别表示当前项目名、分组名、模块名和操作名。
3、使用_GET变量
{var|function} 也就是说 {id} 其实等效于 {$_GET.id}
4、直接使用函数
{|function} 例如:
- {|time}
5、支持混合定义,例如我们可以定义一个静态规则为:
- '{id},{name|md5}'
在{}之外的字符作为字符串对待,如果包含有”/”,会自动创建目录。
例如,定义下面的静态规则:
- {:module}/{:action}_{id}
则会在静态目录下面创建模块名称的子目录,然后写入操作名_id.shtml 文件。
静态有效时间 单位为秒。如果不定义,则会获取配置参数HTML_CACHE_TIME 的设置值,如果定义为0则表示永久缓存。
附加规则通常用于对静态规则进行函数运算,例如
- 'read'=>array('Think{id},{name}','60', 'md5')
翻译后的静态规则是 md5('Think'.$_GET['id']. ', '.$_GET['name']);
和静态缓存相关的配置参数包括:
- HTML_CACHE_ON 是否开启静态缓存功能
- HTML_FILE_SUFFIX 静态文件后缀 惯例配置的值是 .html
- HTML_CACHE_TIME 默认的静态缓存有效期 默认60秒 可以在静态规则定义覆盖
总结
要善于利用ThinkPHP的缓存功能,更重要的是区分什么时候用何种缓存方式更加有效。缓存也不是万能的,没有缓存是万万不能的^_^
thinkphp3.1 缓存配置设置读取的更多相关文章
- uni-app同步缓存值 设置 读取 删除
A页面 <view class="go-to-tab" @tap="gotologin"> 去login页面 </view> msg : ...
- thinkphp3.2开启静态缓存与缓存规则设置
网站的静态缓存对大访问量有很好的缓解作用,尤其对网站的大并发,可有效的缓解数据库的压力.在thinkphp中实现静态缓存很简单,thinkphp都已经封装好了直接调用即可. 静态缓存 首先设置 H ...
- 从零开始学 Java - Spring 集成 Memcached 缓存配置(二)
Memcached 客户端选择 上一篇文章 从零开始学 Java - Spring 集成 Memcached 缓存配置(一)中我们讲到这篇要谈客户端的选择,在 Java 中一般常用的有三个: Memc ...
- nginx缓存配置的操作记录梳理
web缓存位于内容源Web服务器和客户端之间,当用户访问一个URL时,Web缓存服务器会去后端Web源服务器取回要输出的内容,然后,当下一个请求到来时,如果访问的是相同的URL,Web缓存服务器直接输 ...
- Hibernate缓存配置
一级缓存 Hibernate的一级缓存是由Session提供的,因此它只存在于Session的生命周期中,当程序调用save(),update(),saveorupdate()等方法 及调用查询接口l ...
- Hibernate二级缓存简述及基于Spring4,Hibernate5,Ehcache3的二级缓存配置
Hibernate L2缓存 缓存的分类 L2缓存工作原理 放入二级缓存的数据 Ehcache 依赖 ehcache.xml 常用的memoryStoreEvictionPolicy(缓存算法) eh ...
- Hibernate 二级缓存配置
详见:https://www.cnblogs.com/Junsept/p/7324981.html Hibernate的cache管理: Cache就是缓存,它往往是提高系统性能的最重要手段,对数据起 ...
- centos LAMP第二部分apache配置 下载discuz!配置第一个虚拟主机 安装Discuz! 用户认证 配置域名跳转 配置apache的访问日志 配置静态文件缓存 配置防盗链 访问控制 apache rewrite 配置开机启动apache tcpdump 第二十节课
centos LAMP第二部分apache配置 下载discuz!配置第一个虚拟主机 安装Discuz! 用户认证 配置域名跳转 配置apache的访问日志 配置静态文件缓存 配置防盗链 ...
- nginx缓存配置及开启gzip压缩
阅读目录 一:nginx缓存配置 二:nginx开启gzip 回到顶部 一:nginx缓存配置 在前一篇文章,我们理解过http缓存相关的知识点, 请看这篇文章. 今天我们来学习下使用nginx服务来 ...
随机推荐
- 如何创建Hiren的BootCD USB磁盘 -- 制作U盘启动盘
如何创建Hiren的BootCD USB磁盘 原文 https://www.wintips.org/how-to-create-hirens-bootcd-usb-disk/ 本文基本是谷歌翻译 H ...
- 轻松学习Linux之Shell预定义变量
本文出自 "李晨光原创技术博客" 博客,谢绝转载!
- JS/CSS 各种操作信息提示效果
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- vuex-store模块化配置
一.目录结构: src -> js -> modules 1. 在modules下新建文件夹,文件夹名称按模块功能命名 如: modules ---- home -> homeMod ...
- NOI2018归程(Kruskal重构树)
题目描述 本题的故事发生在魔力之都,在这里我们将为你介绍一些必要的设定. 魔力之都可以抽象成一个 n 个节点.m 条边的无向连通图(节点的编号从 1 至 n). 我们依次用 l,a 描述一条边的长度. ...
- 开发板Ping不通虚拟机和主机
Ubuntu 16.04 win7 笔记本连接学校的无线网 开发板S3c2440与笔记本仅通过COM连接 问题描述: 设置了桥接,主机与虚拟机IP在同一网段后,主机与虚拟机可以Ping,但是 ...
- ShopEx 中规格属性添加时,自己主动计算其相应的销售价格,同一时候注意模板中的变量间的计算
在ShopEx中,添加产品的规格时,如颜色.尺寸.是否送货等配置信息,默认情况下,这些内容是须要手动计算的,若仅仅有几个属性值还easy计算,假设每个属性值比較多,通过手动计算将是一个灰常巨大的工作量 ...
- jfreechart,pdf生成组件iText,jasper report报表组件及POI操作excel等在企业软件开发中常遇到的第三方应用
熟悉WEB Service ,Ajax,DWR,JQuery,iBatis等技术,熟练TOMCAT,IIS,JBoss,WebLogic等服务器 图表组件JFreeChart PDF组件-iText的 ...
- Oracle学习总结(9)—— Oracle 常用的基本操作
创建用户,相当于在sqlServer中创建一个数据库 create user 用户名 identified by 密码 修改用户密码 alter user 用户名 identified by 新 ...
- crm翻译导航栏
在crm里面怎样翻译导航栏? 过程例如以下: 1 先新建一个解决方式.把网站地图加进去 2: 然后把这个解决方式到出来来,解压文件: 3:编辑第二个文件: watermark/2/text/aHR0c ...