amelia/rememberable

Laravel 5 的查询缓存

v3.0.0-beta1 2016-09-05 12:35 UTC

This package is auto-updated.

Last update: 2024-09-08 14:00:50 UTC


README

Build Status

Rememberable 是 Laravel 5.2+ 的一个 Eloquent 特性,它为您的模型添加了透明的查询缓存。

它通过简单地记住使用的 SQL 查询并存储结果来实现。如果在缓存持续存在的情况下尝试相同的查询,它将从存储中检索,而不是再次击中您的数据库。

要求

目前,您必须使用 Redis 作为您的缓存实现。

计划在未来更改此设置,欢迎提出 pull request。

支持 PHP 5.6+。

注意:此包将导致您在模型上执行增量/减量操作后触发 saved 事件。对于大多数人来说,这应该不会引起任何关注,但要禁用它,请设置 protected static $interceptable = false

安装

使用 Composer 安装,就像安装其他任何东西一样。

composer require amelia/rememberable

要开始使用 Eloquent,最简单的方法是创建一个抽象的 App\Model,您可以从该模型扩展应用程序模型。在这个基础模型中,您可以导入 rememberable 特性,这将扩展相同的缓存功能到您从模型构建的任何查询。

<?php

namespace App;

use Amelia\Rememberable\Rememberable;
use Illuminate\Database\Eloquent\Model as Eloquent;

abstract class Model extends Eloquent
{
    use Rememberable;
    
    /**
     * Remember _all_ queries on this model
     *
     * @var bool
     */
    protected static $rememberable = true;
}

现在,只需确保使用新的 App\Model 而不是 Eloquent 来创建应用程序模型。

或者,您可以直接将特性应用于每个希望使用 remember() 的模型。

使用方法

所有查询都会自动记住。

在更新或删除时,任何包含更改模型的查询都会从缓存中删除。

这意味着在几乎所有情况下,您只需将基本模型设置为记住查询,就可以忽略它。

刷新

如果您希望手动刷新查询缓存,可以发出一个 Model::flush() 命令。

flush() 接受缓存标签参数;应用于每个查询的标签是模型的类名、模型的表名和 'rememberable'

因此,要刷新所有查询(例如,在部署期间,如果您不刷新整个缓存),在任何使用 rememberable 的模型上发出 ::flush('rememberable')

手动使用

就像在 watson/rememberable 中一样,如果您没有在使用的模型上将 $rememberable 设置为 true,您可以在特定的查询上使用 remember(int $minutes)

// Remember the number of users for an hour.
// remembers "select count(*) from users"
$users = User::remember(60)->count();

致谢

此包遵循 MIT 许可证

它是 watson/rememberable 的直接分支,添加了许多新特性。