Laravel 文件系统 sftp 缓存适配器
Laravel filesystem sftp cached adapter
我为这个问题苦苦挣扎了一段时间。
我正在使用 sftp 适配器连接到我 read/write 文件很多的另一台服务器。
对于缩略图创建,我使用 laravel horizon 的后台作业从远程 sftp 服务器检索 pdf 内容,然后生成 jpg 文件并放入本地文件系统。
对于第一次设置,我需要制作大约 150k 的缩略图。
当我在 horizon 中使用大量进程时,远程服务器无法处理这个数量的连接。
我现在必须限制最多 2 个进程(10 秒~ * 150k~)不是最优的。
我想缓存连接,因为我知道这是可能的并且可能会解决我的问题,但无法让它工作:(
我能找到的唯一 reference/tutorial/example/docs 是
https://medium.com/@poweredlocal/caching-s3-metadata-requests-in-laravel-bb2b651f18f3
https://flysystem.thephpleague.com/docs/advanced/caching/
当我像这样使用示例中的代码时:
Storage::extend('sftp-cached', function ($app, $config) {
$adapter = $app['filesystem']->createSftpAdapter($config);
$store = new Memory();
return new Filesystem(new CachedAdapter($adapter->getDriver()->getAdapter(), $store));
});
我收到错误消息:不支持驱动程序 []。
这里有人可以进一步帮助我吗?
看来有必要调整您的配置:
在您的 config/filesystems.php 文件中,将 'caching' 密钥添加到您的存储:
'default' => [
'driver' => 'sftp-cached',
// ...
'cache' => [
'store' => 'apc',
'expire' => 600,
'prefix' => 'laravel',
],
],
这个例子是基于官方文档(https://laravel.com/docs/5.6/filesystem#caching),但是这里没有很好地描述'store'键是如何使用的(其中memcached
是例子),并且您需要将驱动程序的实现更改为 new Memcached($memcached);
(使用要注入的实例)。
在你的情况下,由于 sftp-cached 驱动程序实现 $store = new Memory();
,缓存配置必须用 'store' => 'apc'
反映这一点(这是基于 RAM 的缓存).可用的 'store'
驱动程序位于 config/cache.php.
(如果您使用 APC 并收到错误消息 Call to undefined function Illuminate\Cache\apc_fetch()
,则必须安装此 PHP 扩展,例如参见 [=19=])
最后,我认为 config/filesystems.php 中的 'prefix' 键必须设置为与缓存键前缀相同config/cache.php(默认为 'prefix' => 'cache'
)。
我为这个问题苦苦挣扎了一段时间。 我正在使用 sftp 适配器连接到我 read/write 文件很多的另一台服务器。
对于缩略图创建,我使用 laravel horizon 的后台作业从远程 sftp 服务器检索 pdf 内容,然后生成 jpg 文件并放入本地文件系统。
对于第一次设置,我需要制作大约 150k 的缩略图。 当我在 horizon 中使用大量进程时,远程服务器无法处理这个数量的连接。
我现在必须限制最多 2 个进程(10 秒~ * 150k~)不是最优的。
我想缓存连接,因为我知道这是可能的并且可能会解决我的问题,但无法让它工作:(
我能找到的唯一 reference/tutorial/example/docs 是
https://medium.com/@poweredlocal/caching-s3-metadata-requests-in-laravel-bb2b651f18f3 https://flysystem.thephpleague.com/docs/advanced/caching/
当我像这样使用示例中的代码时:
Storage::extend('sftp-cached', function ($app, $config) {
$adapter = $app['filesystem']->createSftpAdapter($config);
$store = new Memory();
return new Filesystem(new CachedAdapter($adapter->getDriver()->getAdapter(), $store));
});
我收到错误消息:不支持驱动程序 []。
这里有人可以进一步帮助我吗?
看来有必要调整您的配置:
在您的 config/filesystems.php 文件中,将 'caching' 密钥添加到您的存储:
'default' => [
'driver' => 'sftp-cached',
// ...
'cache' => [
'store' => 'apc',
'expire' => 600,
'prefix' => 'laravel',
],
],
这个例子是基于官方文档(https://laravel.com/docs/5.6/filesystem#caching),但是这里没有很好地描述'store'键是如何使用的(其中memcached
是例子),并且您需要将驱动程序的实现更改为 new Memcached($memcached);
(使用要注入的实例)。
在你的情况下,由于 sftp-cached 驱动程序实现 $store = new Memory();
,缓存配置必须用 'store' => 'apc'
反映这一点(这是基于 RAM 的缓存).可用的 'store'
驱动程序位于 config/cache.php.
(如果您使用 APC 并收到错误消息 Call to undefined function Illuminate\Cache\apc_fetch()
,则必须安装此 PHP 扩展,例如参见 [=19=])
最后,我认为 config/filesystems.php 中的 'prefix' 键必须设置为与缓存键前缀相同config/cache.php(默认为 'prefix' => 'cache'
)。