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')。