## PHP四大加速緩存器opcache,apc,xcache,eAccelerator
eAccelerator,xcache,**opcache**(5.5默認 linux下安裝php時記得加上 --enable-opcache ),apc(偏數據庫緩存,分系統和用戶緩存,不推薦5.5將棄之?)是PHP緩存擴展,
memcached緩存是數據庫緩存擴展(APC比較偏向數據庫緩存的),一般兩者只有要安裝其中一個即可
注意:([詳情連接](https://www.chenweiliang.com/cwl-940.html))
實際測試中發現當Cache數量超過一定閥值的時候,APC的性能不如Memcache
opcache的性能優于其他幾個緩存器
**一般會選擇opcache+memcached|redis這個組合**
?如果儲存的量不大,tp 的file 緩存,和redis |memcached差不多。但是內存讀取肯定要快。如果存儲的值多,redis |memcached強大的i/o能力會強于 普通的文件讀寫
# [使用 OpCache 提升 PHP 5.5+ 程序性能](https://www.cnblogs.com/chunguang/p/5538093.html)(從編譯提高)
作用是將PHP代碼預編譯生成的腳本文件?`Opcode`?緩存在共享內存中供以后反復使用,從而避免了從磁盤讀取代碼再次編譯的時間消耗 省去了每次加載和解析 PHP 腳本的開銷。同時,它還應用了一些代碼優化模式,使得代碼執行更快。從而加速PHP的執行(避免重復編譯,減少 CPU 和內存開銷)

php.ini 打開 zend\_extension="D:\\phpStudy\\php\\php-7.2.14\\ext\\php\_opcache.dll"??
```
[opcache]
zend_extension = php_opcache.dll
opcache.enable = 0
opcache.memory_consumption = 128
opcache.max_accelerated_files = 10000
opcache.revalidate_freq = 60
; Required for Moodle
opcache.use_cwd = 1
opcache.validate_timestamps = 1
opcache.save_comments = 1
opcache.enable_file_override = 0
```
>[danger] 不要在編寫調試代碼中開啟opcache,否則你會體會到你的增刪改查不能即時同步的痛苦!
thinkphp的緩存:
~~~
'TMPL_CACHE_ON' => true, // 是否開啟模板編譯緩存,設為false則每次都會重新編譯
'TMPL_CACHE_TIME' => 0, // 模板緩存有效期 0 為永久,(以數字為值,單位:秒)
'DB_FIELDS_CACHE' => true, // 啟用字段緩存
'DATA_CACHE_TIME' => 0, // 數據緩存有效期 0表示永久緩存
'DATA_CACHE_TYPE' => 'File', // 數據緩存類型,支持:File|Db|Apc|Memcache|Shmop|Sqlite|Xcache|Apachenote|Eaccelerator
~~~
[靜態文件緩存 和S函數動態數據緩存](https://www.cnblogs.com/dee0912/p/5223923.html)(從數據層面提高)
[thinkphp的靜態緩存,數據緩存,快速緩存,查詢緩存](https://www.cnblogs.com/chinalorin/p/5855386.html)
*****
### [**詳細用法**](https://beltxman.com/archives/1835.html)
配置文件在目錄:application-Common-Conf-config.php里設置默認配置項
靜態文件緩存配置格式??靜態規則是用于定義要生成的靜態文件的名稱? 建議配置在application/module/Config/config.php
~~~
// 靜態緩存配置
'HTML_CACHE_ON' => true, // 開啟靜態緩存
'HTML_CACHE_TIME' => 3600, // 全局靜態緩存有效期(秒)
'HTML_PATH' => APP_PATH . 'Html/', //設置已經生成的靜態頁保存路徑(默認HTML_PATH 即./Application/Html/)
'HTML_FILE_SUFFIX' => '.html', // 設置靜態緩存文件后綴
'HTML_CACHE_RULES' => array( // 定義靜態緩存規則
//靜態規則是用于定義要生成的靜態文件的名稱
// 對商品進行緩存
// 'Product:plist' => 'Product/plist_{id}_{pid}',
// 對單個操作進行緩存
// 'Index:index' => 'Index/index',
// 對Index控制器的所有操作緩存
'Index:' => 'Index/{:action}_{id}',
// 對Download控制器的所有操作緩存
'Download:' => 'Download/{:action}_{id}',
// 對Product控制器的所有操作緩存并設置緩存過期時間為7200秒
'Product:' => array('Product/{:action}_{id}', '7200'),
'projectorSelect'=>array('{:module}/{:controller}_{:action}',86400),
'*'=>array('{$_SERVER.REQUEST_URI|md5}'),
),
~~~
啟用靜態文件后每次都會檢查訪問的url(訪問的url定義了靜態規則)是否生成了靜態文件則訪問靜態文件否則訪問view模板文件在生成
格式:
~~~
靜態地址分四種:
Return Array(
'靜態地址'=>array('靜態規則','有效期',附加規則),
'ActionName'=>array('靜態規則','靜態緩存有效期','附加規則'), //第一種 定義所有的read操作的靜態規則'read'=>array('{id}',60)
'ControllerName:'=>array('靜態規則','靜態緩存有效期','附加規則'),//第二種 定義全局的控制器靜態規則,例如定義所有的User控制器的靜態規則 'user:'=>array('User/{:action}_{id}','600')
'ControllerName:ActionName'=>array('靜態規則','靜態緩存有效期','附加規則'),//第三種 定義某個控制器的操作的靜態規則,例如,我們需要定義Blog控制器的read操作進行靜態緩存 'blog:read'=>array('{id}',0)
'*'=>array('靜態規則','靜態緩存有效期','附加規則'),//第四種 定義全局的靜態緩存規則,這個屬于特殊情況下的使用,任何模塊的操作都適用 例如:'*'=>array('{$_SERVER.REQUEST_URI|md5}'), 表示根據當前的URL進行緩存。
…更多操作的靜態規則
)
~~~
格式的例子:[詳情參考文檔](http://document.thinkphp.cn/manual_3_2.html#html_cache)
~~~
'read'=>array('{id}',60) #定義所有的read操作(方法)的靜態規則 其中,{id} 表示取$_GET['id'] 為靜態緩存文件名,第二個參數表示緩存60秒
'user:'=>array('User/{:action}_{id}','600')#定義所有的User控制器的靜態規則(全局的控制器靜態規則) {:action} 表示當前的操作名稱
'blog:read'=>array('{id}',0)#定義Blog控制器的read操作進行靜態緩存
'read'=>array('Think{id},{name}','60', 'md5') #即md5('Think'.$_GET['id']. ', '.$_GET['name']);
'empty:index'=>array('{module}_{:action}',0);#定義空控制器的靜態規則
'User:index'=>array('User/{:action}',0);#定義空操作的靜態規則
'*'=>array('{$_SERVER.REQUEST_URL|md5}')#全局靜態規則任何控制器和方法都適用
~~~
靜態文件動態生成的方法:?[方法](https://baijiahao.baidu.com/s?id=1611993886976390068&wfr=spider&for=pc)
**$this->buildHtml('靜態文件', '靜態路徑','模板文件');**
**參數一:靜態文件**,是指生成后的靜態文件名,文件保存路徑完整的就是:靜態路徑/靜態文件。例如靜態文件設置a/index.那么保存的路徑就是項
目路徑/Html/a/index.html(默認的靜態路徑在項目路徑的Html文件夾下,沒有可以自己創建)
**參數二:靜態路徑**,上面已經說明了默認的路徑,3.0中可以在入口文件里加入參數來更改靜態路徑。
define('HTML\_PATH', './');(將靜態路徑義為網站根目錄)
**參數三:模板文件**,我感覺官方這個描述是不正確的,準確的來說應該是目標模塊,就是需要生成靜態文件的模塊。格式:模塊名:操作。比如要生成Index下的a方法為靜態文件,那就是Index:a。如果為空則默認生成當前操作的靜態文件。
下面三個是等效的??:
$this->buildHtml("index",'',"");
$this->buildHtml("index",'',"Index:index");
$this->buildHtml("index",'',"index");
- 目錄結構與基礎
- 修改數據后頁面無變化
- 防跨目錄設置
- input
- 系統目錄
- 自動生成的文件以及目錄
- 類自動加載
- url生成
- 數據增刪改查
- 增加數據
- 數據更新
- 數據刪除
- 數據查詢
- 架構
- 生命周期
- 入口文件
- URL訪問規則
- 配置
- 默認慣例配置配置
- 初始應用配置
- 路由
- 域名路由
- URL生成
- 數據庫操作
- 方法列表
- 連接數據庫
- 分布式數據庫
- 查詢構造器
- 查詢數據
- 添加數據
- 更新數據
- 刪除數據
- 查詢語法
- 聚合查詢(統計)
- 時間查詢
- 高級查詢
- 視圖查詢
- 子查詢
- 輔助查詢之鏈式操作
- where
- table
- alias
- field
- order
- limit
- page
- group
- having
- join
- union
- distinct
- lock
- cache
- comment
- fetchSql
- force
- bind
- partition
- strict
- failException
- sequence(pgsql專用)
- 查詢事件
- 事務操作
- 監聽SQL
- 存儲過程
- 數據集
- 控制器
- 跳轉和重定向
- 空控制器和空操作
- 分層控制器
- Rest控制器
- 資源控制器
- 自動定位控制器
- tp3的增刪改查
- 方法注入
- 模型
- 屬性方法一覽
- 類方法詳解
- Model
- 調用model不存在的屬性
- 調用model中不存在的方法
- 調用model中不存在的靜態方法
- hasOne
- belongsTo
- hasMany {Relation}
- belongsToMany
- hasManyThrough
- morphMany
- morphOne
- morphTo
- ::hasWhere {Query}
- ::has
- relationCount
- data 【model】
- setInc {integer|true}
- setDec {integer|true}
- save {integer | false}
- saveAll {array}
- delete {integer}
- ::get 查詢單條數據 {Model}
- ::all 查詢多條數據{Model [ ]}
- ::create 新增單條數據 {Model}
- ::update 更新單條數據 {Model}
- ::destroy {integer}
- ::scope {Query}
- getAttr {mixed}
- xxx
- append
- appendRelationAttr
- hidden
- visible
- except
- readonly
- auto
- together
- allowField
- isUpdate
- validate
- toCollection
- toJson
- toArray
- 定義
- 新增
- 更新
- 查詢
- 刪除
- 聚合
- 獲取器
- 修改器
- 時間戳
- 只讀字段
- 軟刪除
- 類型轉換
- 數據完成
- 查詢范圍
- 模型分層
- 數組訪問和轉換
- JSON序列化
- 事件
- 關聯
- 一對一關聯
- 主表一對一關聯
- 從表一對一關聯(相對關聯)
- 一對多關聯
- 主表定義一對多關聯
- 從表定義一對多關聯
- 遠程一對多
- 多對多關聯
- 多態關聯
- 動態屬性
- 關聯預載入with()
- 關聯統計
- N+1查詢
- 聚合模型
- Model方法集合
- 表單驗證
- 驗證器
- 驗證規則
- 錯誤信息
- 驗證場景
- 控制器驗證
- 模型驗證
- 內置規則
- 靜態調用
- 表單令牌
- Token身份令牌
- 視圖
- 模版
- 變量輸出
- 函數輸出
- Request請求參數
- 模板注釋及原樣輸出
- 三元運算
- 內置標簽
- 模板繼承
- 模板布局
- 日志
- 日志初始化
- 日志驅動
- 日志寫入
- 獨立日志
- 日志清空
- 寫入授權
- 自定義日志
- 錯誤和調試
- 異常
- php系統異常及thinkphp5異常機制
- 異常處理
- 拋出異常
- 異常封裝
- resful
- 404頁面
- 調試模式
- Trace調試
- SQL調試
- 變量調試
- 性能調試
- 遠程調試
- 安全
- 輸入安全
- 數據庫安全
- 上傳安全
- 其它安全建議
- xss過濾
- 擴展
- 函數
- 類庫
- 行為
- 驅動
- Composer包
- Time
- 數據庫遷移工具
- Workerman
- MongoDb
- htmlpurifier XSS過濾
- 新浪SAE
- oauth2.0
- 命令行及生成文件
- 系統現成命令
- 創建類庫文件
- 生成類庫映射文件
- 生成路由緩存
- 清除緩存文件
- 生成配置緩存文件
- 生成數據表字段緩存
- 自定義命令行
- 開始
- 調用命令
- 雜項
- 助手函數
- URL重寫
- 緩存
- 緩存總結
- Session
- Cookie
- 多語言
- 分頁
- 上傳
- 驗證碼
- 圖像處理
- 文件處理
- 單元測試
- 自定義表單令牌