[TOC]
##1)静态缓存
保存在磁盘上的静态文件,用PHP生成数据放入静态文件中,以此减轻数据库的压力
###**1)PHP静态文件缓存类**
```php
<?php
class File {
private $_dir; // 默认路径
const EXT = '.txt'; // 文件后缀名
public function __construct() {
// dirname() 当前文件目录
$this->_dir = dirname(__FILE__) . '/files/'; //默认路径为当前文件下的files下
}
/**
* [cacheData description]
* @Author ZJC
* @DateTime 2017-02-15T10:31:38+0800
* @param [type] $key [缓存文件文件名]
* @param string $value [缓存数据]
* @param string $path [缓存路径]
* @return [type] [description]
*/
public function cacheData($key, $value = '', $path = '') {
$filename = $this->_dir . $path .$key . self::EXT;
if ($value !== '') { // 将value值写入缓存
if(is_null($value)) {
return @unlink($filename);
}
// 判断是否存在文件目录,如果不存在,则创建
$dir = dirname($filename);
if (!is_dir($dir)) {
mkdir($dir, 0777);
}
// file_put_contents:将一个字符串写入文件
// int file_put_contents ( string $filename , mixed $data [, int $flags = 0 [, resource $context ]] )
// $data部分最好为字符串形式,因为不支持多维数组;(序列化,JSON都可以)
return file_put_contents($filename, json_encode($value)); // c成功返回字节数,失败返回FALSE
}
if(!is_file($filename)) { // 显示缓存
return FALSE;
} else {
return json_decode(file_get_contents($filename), true);
}
}
}
```
###**2)调用方法**
```php
<?php
require_once('./file.php');
$data = array(
'id' => 1,
'name' => 'singwa',
'type' => array(4,5,6),
'test' => array(1,45,67=>array(123, 'test')),
);
$file = new File();
// 写入缓存
if($file->cacheData('index_mk_cache', $data)) {
// var_dump($file->cacheData('index_mk_cache'));exit;
echo "success";
} else {
echo "error";
}
// 查看缓存
if($file->cacheData('index_mk_cache')) {
var_dump($file->cacheData('index_mk_cache'));exit;
echo "success";
} else {
echo "error";
}
// 删除缓存
if($file->cacheData('index_mk_cache', null)) {
echo "success";
} else {
echo "error";
}
```
##2)Memcache和Redis缓存技术
教程地址:https://linux.cn/article-6719-1.html 、http://www.imooc.com/qadetail/119389
本人文章:http://www.kancloud.cn/visionz/redis-memcache/274193
```
Memcache,Redis都需要安装才能使用;
1. Memcache和Redis都是用来管理数据的(一种缓存服务)
2. 他们数据都是存放在内存里的(获取速度快)
3. Redis可以定期将数据备份到磁盘(持久化)
4. Memcache只是简单的key/value缓存
5. Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,hash等数据结构的存储
```
###**如何操作数据**
命令包括以下:
```
1. 开启redis客户端
2. 设置缓存值 - set index-mk-cache 数据
3. 获取缓存数据 - get index-mk-cache
4. 设置过期时间 - setex key 10 'cache'
5. 删除缓存 - del key
```
**php操作Redis**
```php
1. 按照phpredis扩展
2. php链接redis服务-connect(127.0.0.1, 6379)
3. set 设置缓存
4. get 获取缓存
```
*设置 redis 缓存,文件地址:/var/www/app/setCache.php*
```
$redis = new Redis();
$redis->connect('192.168.2.110', 6379);
// 设置缓存
// $redis->set('vision', 123);
// 设置定期缓存,15秒失效
$redis->setex('vision2', 15, 'heoolshdfksjfl');
```
*获取 redis 缓存,文件地址:/var/www/app/getCache.php*
```
$redis = new Redis();
$redis->connect('192.168.2.110', 6379);
var_dump($redis->get('vision2'));
```
**php操作Memcache**
```
1. 安装memcache扩展
2. 链接服务-connect('memcache_host', 11211);
3. set 设置缓存
4. get 获取缓存
```
*设置和获取 memcache 与 redis 相似,文件地址:/var/www/app/memcache.php*
```
$memcache_obj = new Memcache;
/* connect to memcached server */
$memcache_obj->connect('127.0.0.1', 11211);
/*
设置'var_key'对应值,使用即时压缩
失效时间为50秒
*/
$memcache_obj->set('var_key', 'some really big variable', MEMCACHE_COMPRESSED, 20);
echo $memcache_obj->get('var_key');
```
##3)定时任务
学习要点
```
1. 掌握如何设置定时任务常用命令
2. 掌握如何定时运行PHP程序
```
定时任务命令
```
1. 定时任务服务提供crontab命令来设定服务
2. crontab -e // 编辑某个用户的cron服务
3. crontab -l // 列出某个用户cron服务的详细内容
4. crontab -r // 删除某个用户的cron服务
```
crontab格式
```
分 小时 日 月 星期 命令
* * * * * *
0-59 0-23 1-31 1-12 0-6 command
注:"*"代表取值范围内的数组
"/"代表每、比如每分钟等
*/1 * * * * /usr/bin/php /var/www/html/test.php
```