### CACHE 缓存函数
语法:`cache($options)`
不同的缓存方式所需要的参数是不同的
所有缓存方式公用配置项
| 配置项 | 说明 |
| -- | -- |
| driver | 缓存的类型 |
| expire | 默认的缓存时间 |
| prefix | 缓存前缀,区分不同控制器或方法中的同名 KEY |
| length | 队列长度,队列即允许缓存的数量 |
| zip | 是否启动缓存数据压缩存储 |
不同缓存类型的配置项说明
| 配置项 | 配置项名 | 说明 |
| -- | -- |
| file 缓存机制 | driver | file 缓存时必须设置为 file |
| file 缓存机制 | dir | 缓存存放目录 |
| memcache 缓存 | driver | memcache 缓存时必须设置为 memcache |
| memcache 缓存 | host | array(<br> //多个服务器传入设置二维数组<br> 'host'=>'127.0.0.1', //主机<br> 'port'=>11211, //端口<br> 'timeout'=>1, // 连接超时时间<br> 'weight'=>1, // 权重 ( 多台服务器时有效设置 )<br> 'pconnect'=>1, // 是否持久连接 ( 可以不用设置 )<br>) |
| Redis 缓存机制 | driver | redis 缓存时必须设置为 redis |
| Redis 缓存机制 | host | array(<br> //多个服务器传入设置二维数组<br> 'host'=>'127.0.0.1', //主机<br> 'port'=>6379, //端口<br> 'password'=>'', // 主机密码 没有密码时留空<br> 'timeout'=>1, // 连接超时时间 单位为秒<br> 'db'=>1, // 使用的数据库<br>)<br> 'pconnect'=>0, // 是否为长链接<br>) |
方法说明
| 方法 | 说明 |
| -- | -- |
| set($name,$value) | 设置缓存数据 |
| get($name) | 获得缓存数据 |
| del($name) | 删除缓存 |
| delAll($time=null) | 删除所有缓存,如果设置 $time 则删除超过此值的缓存 |
| options($name,$value=null) | 设置与获得缓存配置 |
#### 设置缓存 set
注:以下代码中的 Cache::init() 方法不传递参数时使用配置文件设置
示例 1
~~~
$cache = cache::init();
$data = array(// 要缓存的数据
'webname' => '懒人网',
'time' => time()
);
$cache->set('lanren',$data,800);
~~~
如果没有指定缓存时间,将采用配置文件中 CACHE_TIME 选项的值
示例 2
~~~
$cache = cache::init(array('dir'=>'cache','zip'=>true,'prefix'=>'took_'));
$cache->set('took',' TookPHP');// 缓存数据 KEY 为 took
echo $cache->get('took');
// 得到 KEY 为 took 的缓存内容将缓存数据放入根目录下的 cache目录,以 took_ 为缓存文件前缀,启用压缩数据
~~~
#### 删除缓存 del
例:
~~~
//删除 took 缓存数据
$cache = cache::init();
$cache->took = null;// 删除缓存数据
//或使用函数删除 took 缓存
$cache->del('took');
~~~
#### 删除所缓存 delAll
~~~
//删除所有缓存:
$cache = cache::init();
$cache->delAll();
//删除 1 小时前的缓存文件:
$cache->delAll(3600);
~~~
#### 获得与设置配置
~~~
//获得缓存配置
$cache = cache::init();
$cache->options('expire');
//设置缓存参数
$cache->options('expire',600);
echo $cache->options('expire');
~~~
#### 缓存队列
为了避免缓存过多,可以通过 delAll() 删除过期缓存,也可以使用框架中的缓存队列特性,即指定缓存的数量,以后进先出的原则删除最旧的缓存。
注:Memcache 等缓存控制本身具有 LRU 机制,所以缓存队列目前适用于 File 缓存
~~~
$cache = cache::init(array('length'=>2,'zip'=>false));
$cache->set('name','懒人网');
$cache->set('web','www.lanren.com');
$cache->set('bbs','bbs.lanren.com');
~~~
设置了 length 即队列长度为 2 所以只能缓存 2 条记录,队列采用先进先出的原则 , 所以 name 将被删除
#### 以 Memcache 操作缓存
无论是使用 Memcache 或者 Redis 操作缓存,可以通过修改配置文件的方式 ,或者调
用 cache::init() 方法时传递参数即可,示例如下:
~~~
$cache = cache::init(array(
'driver'=>'memcache',
'host'=>array('host'=>'127.0.0.1','port'=>11211))
);
$cache->set('webname','懒人网');
echo $cache->get('webname');
~~~
#### 以 Redis 操作缓存
无论是使用 Memcache 或者 Redis 操作缓存,可以通过修改配置文件的方式 ,或者调
用 cache::init() 方法时传递参数即可,示例如下:
~~~
$cache = cache::init(array(
'driver'=>'redis',
'host'=>array('host'=>'127.0.0.1','port'=>6379))
);
$cache->set('webname','懒人网');
echo $cache->get('webname');
~~~
#### S() 缓存函数
上面学习了通过 cache 类操作缓存,其实 S 方法也是通过 Cache 类操作缓存,只是提
供了一种快捷的函数调用方式。
如果使用 memcache 或 redis 进行缓存操作,请修改配置文件中的相应配置项
~~~
S($name, $value = false, $expire = null, $options = array())
~~~
| 参数 | 说明 |
| -- | -- |
| $name | 缓存名称 |
| $value | 缓存内容 |
| $expire | 缓存时间 |
| $options | 缓存对象参数如 array('dir'=>'cache','driver'=>'memcache','host'=>array('host'=>'127.0.0.1','port'=>11211,'timeout'=>1)) |
~~~
//缓存数据
S('webname','懒人网');
echo S('webname');
//删除缓存
S('webname',null)
//设置缓存驱动
S('webname','bbs.lanren.com',1440,array('dir'=>'cache','driver'=>'file','zip'
=>true));
~~~
将数据缓存到 cache 目录,以 file 文件形式缓存,启用数据压缩
#### F() 快速文件缓存
通过 F() 方法以文件形式快速对数据进行缓存
~~~
function F($name, $value = false, $path = CACHE_PATH)
~~~
| 参数 | 说明 |
| -- | -- |
| $name | 缓存名称 |
| $value | 缓存内容 |
| $path | 数据存放目录 |
~~~
//缓存数据
F('webname',array('name'=>'懒人网','url'=>'lanren.com'));
//获得数据
echo F('webname');
//删除缓存
F('webname',NULL);
~~~