ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
[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 ```