我在这个问题上苦苦挣扎了一段时间。 我正在使用sftp适配器连接到另一台服务器,在该服务器上我经常读写文件。
为创建缩略图,我使用具有laravel Horizon的后台作业从远程sftp服务器检索pdf内容,然后生成jpg并放置在本地文件系统中。
对于第一次设置,我需要制作约150k的缩略图。 当我在地平线上使用大量进程时,远程服务器无法处理此数量的连接。
此刻(非最佳时间)(10秒〜* 150k〜),我必须限制为最多2个进程。
我想缓存连接,因为我知道这是可能的,并且可能解决了我的问题,但无法使其正常工作:(
我能找到的唯一参考/教程/示例/文档是
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));
});
我收到错误消息:不支持驱动程序[]。
这里有人可以帮助我吗?
答案 0 :(得分:1)
似乎有必要调整您的配置:
在您的 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的缓存)反映出来。可用的'store'
驱动程序可在 config / cache.php 中找到。
(如果您使用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'
。