Hed*_*dam 5 php google-app-engine google-cloud-storage laravel laravel-4
每当我加载页面时,我都可以看到Laravel从/ storage文件夹中读取大量数据.
一般来说,动态读取和写入我们的文件系统是一个瓶颈.我们使用的是Google App Engine,我们的存储位于Google云端存储中,这意味着一次写入或读取等同于"远程"API请求.谷歌云存储速度很快,但我觉得它很慢,因为Laravel每个请求最多可以进行10-20次云存储调用.
是否可以将数据存储在Memcache而不是/ storage目录中?我相信这会给我们的系统带来更好的性能.
NB.Session和Cache都使用Memcache,但编译的视图和meta存储在文件系统中.
为了将编译后的视图存储在Memcache中,您需要替换Blade 编译器使用的存储。
首先,您需要一个扩展Illuminate\Filesystem\Filesystem 的新存储类。下面列出了BladeCompiler使用的方法- 您需要让它们使用 Memcache。
此类的草稿如下,您可能希望使其更加复杂:
class MemcacheStorage extends Illuminate\Filesystem\Filesystem {
protected $memcached;
public function __construct() {
$this->memcached = new Memcached();
$this->memcached->addServer(Config::get('view.memcached_host'), Config::get('view.memcached_port');
}
public function exists($key) {
return !empty($this->get($key));
}
public function get($key) {
$value = $this->memcached->get($key);
return $value ? $value['content'] : null;
}
public function put($key, $value) {
return $this->memcached->set($key, ['content' => $value, 'modified' => time()]);
}
public function lastModified($key) {
$value = $this->memcached->get($key);
return $value ? $value['modified'] : null;
}
}
Run Code Online (Sandbox Code Playgroud)
第二件事是在config/view.php中添加 memcache 配置:
'memcached_host' => 'localhost',
'memcached_port' => 11211
Run Code Online (Sandbox Code Playgroud)
您需要做的最后一件事是覆盖您的服务提供商之一中的blade.compiler服务,以便它使用您全新的memcached 存储:
$app->singleton('blade.compiler', function ($app) {
$cache = $app['config']['view.compiled'];
$storage = $app->make(MemcacheStorage::class);
return new BladeCompiler($storage, $cache);
});
Run Code Online (Sandbox Code Playgroud)
这应该够了吧。
如果您发现一些拼写错误或错误,但还没有机会运行它,请告诉我。
| 归档时间: |
|
| 查看次数: |
1241 次 |
| 最近记录: |