maherio/graceful-cache

Laravel缓存仓库的包装器,允许优雅地缓存。

1.0.0 2014-10-27 18:32 UTC

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',

),