awallef / cakephp-cache
此包的最新版本(3.4.1.4)没有可用的许可信息。
CakePHP 渲染缓存
3.4.1.4
2021-06-14 07:09 UTC
Requires
- php: >=5.5.9
- cakephp/cakephp: ^3.3
Requires (Dev)
README
此插件允许您设置规则,以便使用 app.php 中的缓存引擎/设置来缓存 Cake 的响应。然后使用 Ngnix 或 Apache 模块来服务预渲染的响应。太棒了!
安装
您可以使用 composer 将此插件安装到您的 CakePHP 应用程序中。
安装 composer 包的推荐方法是
composer require awallef/cakephp-cache:dev-master
将其加载到您的 config/boostrap.php 中
Plugin::load('Awallef/Cache');
工作原理
一个中间件使用 app.php 缓存引擎创建您想要的缓存响应。然后您有两种选择来检索
- 一个组件在您的操作调用之前检索缓存响应,但之后是认证以及您需要的任何内容。
- 您可以通过 Nginx 或任何其他二进制文件从服务器端检索缓存响应
缓存设置
通过一个配置文件,您可以让您的应用程序知道何时缓存以及何时清除缓存。在 config 文件夹中创建一个 cache.php 文件,例如
<?php
return [
'Awallef.cache.settings' => [
'default' => 'default', // default cache config to use if not set in rules...
],
'Awallef.cache.rules' => [
// cache request
[
'cache' => 'html', // default: 'default', can be a fct($request)
'skip' => false, // default: false, can be a fct($request)
'clear' => false, // default: false, can be a fct($request)
'compress' => true, // default: false, can be a fct($request)
//'key' => 'whatEver',// default is fct($request) => return $request->here()
'method' => ['GET'],
'code' => '200', // must be set or '*' !!!!!
'prefix' => '*',
'plugin' => '*',
'controller' => '*',
'action' => '*',
'extension' => '*'
],
// clear request
[
'cache' => 'html', // default: 'default'
'skip' => false, // default: false
'clear' => true, // default: false,
'key' => '*', // * => Cache::clear(false, cache) (Will clear all keys), 'whatEver' => Cache::delete('whatEver', cache), null => Cache::delete($request->here(), cache)
'method' => ['POST','PUT','DELETE'],
'code' => ['200','201','202','302'], // 302 is often triggered by cakephp in case of success crud operation...
'prefix' => '*',
'plugin' => '*',
'controller' => ['Users','Pages'],
'action' => '*',
'extension' => '*'
],
]
];
作为最后一个中间件进行缓存
在您的 src/Application.php 文件中添加中间件作为最后一个链块。这将创建或删除视图渲染作为缓存(html/json 等)
<?php
namespace App;
...
use Awallef\Cache\Middleware\ResponseCacheMiddleware;
class Application extends BaseApplication
{
public function middleware($middleware)
{
$middleware
...
// Apply Response caching
->add(ResponseCacheMiddleware::class);
return $middleware;
}
}
通过 ActionCacheComponent 获取缓存
在您的 AppController 中加载组件后进行认证!!
$this->loadComponent('Awallef/Cache.ActionCache');
// normal settings
// OR
$this->loadComponent('Awallef/Cache.ActionCache',['skip_debug' => false]);
// skip_debug default is true
// so here it means cache is deliver even if you are in debug mode....
通过 Nginx 获取缓存
首先安装 nginx redis 扩展。然后设置您的缓存配置以存储在 redis 中。您可以使用我的插件...
composer require awallef/cakephp-redis
在 app.php 中配置引擎如下
'Cache' => [
...
'redis' => [
'className' => 'Awallef/Redis.Redis',
'prefix' => 'hello.com:',
'duration' => '+24 hours',
'serialize' => true
],
...
]
配置 cache.php 如下
return [
'Awallef.cache.settings' => [
'default' => 'redis', // default cache config to use if not set in rules...
],
'Awallef.cache.rules' => [
// cache request
[
'skip' => false, // default: false, can be a fct($request)
'clear' => false, // default: false, can be a fct($request)
'compress' => true, // default: true, can be a fct($request)
//'key' => 'whatEver',// default is fct($request) => return $request->here()
'method' => ['GET'],
'code' => '200', // must be set or '*' !!!!!
'prefix' => '*',
'plugin' => '*',
'controller' => '*',
'action' => '*',
'extension' => '*'
],
]
];
也配置 Nginx
map $http_accept $hello_com_response_header {
default "text/html; charset=UTF-8";
"~*json" "application/json; charset=UTF-8";
}
server {
listen 443;
server_name hello.com;
ssl on;
...
# redis key
set $redis_key "hello.com:$request_uri";
if ($args) {
set $redis_key "hello.com:$request_uri?$args";
}
location / {
redis_pass 127.0.0.1:6379;
error_page 404 405 502 504 = @fallback;
more_set_headers "Content-Type: $hello_com_response_header";
}
#default cake handling
location @fallback {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
try_files $uri =404;
include /etc/nginx/fastcgi_params;
fastcgi_intercept_errors on;
fastcgi_pass unix:/var/run/php/php7.1-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
提示
您最好为每个服务器端检索和操作缓存组件检索使用不同的缓存设置... 否则,Nginx/服务器将不会检查您的 ACL 规则而直接提供操作缓存!
更多
即将推出