4

我在这个问题上挣扎了一段时间。我正在使用 sftp 适配器连接到我经常读/写文件的另一台服务器。

对于缩略图创建,我使用 laravel Horizo​​n 的后台作业从远程 sftp 服务器检索 pdf 内容,然后生成 jpg 并放置在本地文件系统中。

对于第一次设置,我需要制作大约 150k 的缩略图。当我在 Horizo​​n 中使用大量进程时,远程服务器无法处理这个数量的连接。

我现在必须限制最多 2 个进程(10 秒~ * 150k~)不是最佳的。

我想缓存连接,因为我知道这是可能的并且可能解决了我的问题,但无法让它工作:(

我能找到的唯一参考/教程/示例/文档是

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));
});

我收到错误:不支持驱动程序 []。

这里有没有人可以在这方面进一步帮助我?

4

1 回答 1

2

似乎有必要调整您的配置:

在您的config/filesystems.php文件中,为您的存储添加一个“缓存”键:

'default' => [
    'driver' => 'sftp-cached',

    // ...

    'cache' => [
        'store' => 'apc',
        'expire' => 600,
        'prefix' => 'laravel',
    ],
],

此示例基于官方文档(https://laravel.com/docs/5.6/filesystem#caching),但没有很好地描述此处如何使用“存储”键(memcached示例在哪里),你会需要将驱动程序的实现更改为new Memcached($memcached);(使用要注入的实例)。

在您的情况下,由于sftp-cached驱动程序实现$store = new Memory();,缓存配置必须反映这一点'store' => 'apc'(这是基于 RAM 的缓存)。在config/cache.php中可以找到可用'store'的驱动程序。

(如果您使用 APC 并收到错误消息Call to undefined function Illuminate\Cache\apc_fetch(),则必须安装此 PHP 扩展,参见例如http://php.net/manual/en/apcu.installation.php

最后,我认为config/filesystems.php中的 'prefix' 键必须设置为与config/cache.php中的缓存键前缀相同('prefix' => 'cache'默认情况下)。

于 2018-07-21T16:32:58.067 回答