maherio / graceful-cache
Laravel缓存仓库的包装器,允许优雅地缓存。
1.0.0
2014-10-27 18:32 UTC
Requires
- php: >=5.3.0
- illuminate/cache: >=4.0
Requires (Dev)
- mockery/mockery: *@dev
- phpunit/phpunit: 3.*
This package is not auto-updated.
Last update: 2024-09-24 01:31:52 UTC
README
进一步优化缓存层的方法
此包通过不允许大量请求同时击中数据库(或其他数据源)来简单优化性能。
Graceful Caching试图解决的问题
当缓存值过期时,请求会直接发送到数据存储。然而,如果在流量高峰期间发生缓存清除,将会有比预期更多的请求通过。这可能从略微延迟的响应时间,到违反API的速率限制,甚至可能使数据库崩溃。
解决方案
我们不允许所有请求都回退到数据库,而是会检测到缓存值即将过期,并延长其生命周期,同时从源获取更新的值。
示例工作流程
- 没有缓存的值。请求1到来,我们从数据库中获取结果,将其保存到缓存中,并返回结果。
- 来自请求1的缓存值。N-1个请求立即接收缓存的值。
- 来自请求1的缓存值。请求N到来,看到缓存的值即将过期,所以我们将其写入并延长过期时间。之后,我们在幕后与数据库通信,获取更新的值。
- 来自请求1的缓存值,由请求N延长。当请求N与数据库通信时,所有其他请求仍然看到缓存的值。
- 来自请求1的缓存值,由请求N延长。请求N从数据库获取值,并更新缓存。
- 来自请求N的缓存值。
正如你所见,始终有一个有效的缓存值。因此,实际上击中数据库(或API或其他任何你想要隐藏在缓存后面的层)的请求要少得多。
所需设置
在composer.json文件的require键中添加以下内容
"maherio/graceful-cache": "1.0.*"
运行Composer更新命令
$ composer update
在你的config/app.php中,将'GracefulCache\ServiceProvider'添加到$providers数组的末尾
'providers' => array( 'Illuminate\Foundation\Providers\ArtisanServiceProvider', 'Illuminate\Auth\AuthServiceProvider', ... 'GracefulCache\ServiceProvider', ),