pyaesone17 / s3-reducer
一个小巧、简洁但有效的Laravel库,通过调用自定义资产函数,可以大幅减少您的S3账单。
Requires
- php: ~5.6|~7.0
- illuminate/support: ~5.1
Requires (Dev)
- phpunit/phpunit: >=5.4.3
- squizlabs/php_codesniffer: ^2.3
This package is not auto-updated.
Last update: 2024-09-21 10:15:52 UTC
README
小巧、简洁但有效的Laravel库,通过调用自定义资产函数,可以大幅减少您的S3账单。这很有趣吗?让我们尝试并检查您的月度账单。你一定会想请我啤酒。
理论
我发现我必须收费。但是只有4美元用于上传和删除请求。因此,如果我能减少读取请求的数量,我只需每月支付约6美元。于是这个库就产生了。
库设计
这是责任链的概念。当你使用s3_reducer时
<img src="{{ s3_reducer($img->path) }}"/>
像这样,库会首先检查本地文件系统。如果库在本地存在,它将使用本地缓存提供服务。如果库在本地服务器上找不到,它将从S3服务器下载资产并存储在本地服务器上。然后,它将为用户提供服务。因此,你只有在没有本地缓存文件时才需要为S3付费。
为什么不只用本地文件系统
你可能会说,为什么不用本地文件系统来缓存S3资产,因为库在本地存储图像。但是,如果你的服务器崩溃,你的重要资产将永远丢失。而且你的VPS服务器存储空间有限,同时你可以在S3上上传无限的内容。
你的本地存储空间不会满吗?你说库从S3下载并从本地服务器提供服务吗?
不,你可以通过运行cron作业在特定时间清除这些缓存。你的服务器不会因为存储空间而满。每天、每周还是每月?这完全取决于你的配置。
结构
如果你的项目适用于以下任何一项,那么目录结构应遵循行业最佳实践,并命名为以下。
config/
src/
tests/
安装
通过Composer
$ composer require pyaesone17/s3-reducer
如果你使用的是以下版本低于5.4的Laravel,你必须像这样注册服务提供者。
'providers' => [ Pyaesone17\S3ReducerS3\ReducerServiceProvider::class ]
使用方法
我建议在上传到S3服务器时使用唯一的图像路径。因为该库将创建类似S3存储桶的文件夹。
$ php artisan storage:link
<img src="{{ s3_reducer($img->path) }}"/>
清除缓存
如果你为每个图像上传使用唯一的路径风格,你不必清除资产的缓存。要清除本地缓存图像,甚至可以使用此功能。
s3_reduce_purge($image->path);
cron作业
为了避免你的本地服务器因为S3图像而满载,你应该在App\Console\Kernel.php中添加如下任务计划:
$schedule->command('s3reducer:purge')->weekly();
测试
$ composer test
注意
这只是显示频繁读取S3资产的请求。但是,对于操作媒体,你应该尝试在真实的S3存储上进行。对于有DevOps经验的开发者,我仍然建议使用nginx缓存以获得更好的性能。
许可证
MIT许可证(MIT)。有关更多信息,请参阅许可证文件。