martianatwork/laravel-query-cache

v1.0 2018-05-24 05:23 UTC

This package is auto-updated.

Last update: 2024-09-29 04:20:26 UTC


README

Build Status

Packagist Packagist Packagist

包描述:一个用于缓存Eloquent查询的包

安装

通过composer安装

composer require martianatwork/laravel-query-cache

用法

基础

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

<?php
namespace App;

use martianatwork\LaravelQueryCache\LaravelQueryCache;
use Illuminate\Database\Eloquent\Model as Eloquent;

abstract class Model extends Eloquent
{
    use Rememberable;
}

现在,只需确保您的应用程序模型从新的App\Model而不是Eloquent开始。

<?php
namespace App;

use App\Model;

class Post extends Model
{
    //
}

只需在您的模型中使用以下代码即可缓存整个模型

<?php

namespace App;

use App\Model;

class TestWallet extends Model
{
    protected $rememberFor = 60;
    protected $rememberCacheTag = 'Test';
    protected $clearOnChange = true;

}

上面的代码将缓存给定模型的所有查询。

protected $rememberFor = 60;

将结果缓存60分钟。

protected $rememberCacheTag = 'Test';

将为缓存数据添加一个标签,稍后将用于清除缓存。

protected $clearOnChange = true;

将在模型的更新、创建、删除事件上清除缓存。

深入研究

如果您不想缓存整个模型,则只需使用Model::remember()方法。

使用remember方法非常简单。只需传递您想要在缓存中存储该查询结果的分钟数,并且在此时间范围内,如果再次调用相同的查询,则将从缓存中获取结果,而不是再次从数据库中获取。

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

缓存前缀

如果您想要为每个查询添加唯一的缓存键前缀(例如,如果您的缓存不支持标签),则可以在查询中添加prefix('前缀')。

// Remember the number of users for an hour and prefix the key with 'users'
User::remember(60)->prefix('users')->count();

或者,您可以将模型中的$rememberCachePrefix属性添加到模型中,以始终使用该缓存前缀。

缓存驱动器

如果您想使用自定义缓存驱动器(在config/cache.php中定义),可以在查询中添加cacheDriver('cacheDriver')。

// Remember the number of users for an hour using redis as cache driver
User::remember(60)->cacheDriver('redis')->count();

或者,您可以将模型中的$rememberCacheDriver属性添加到模型中,以始终使用该缓存驱动器。

模型宽缓存标签

您可以通过设置$rememberCacheTag属性,并使用唯一字符串来设置模型的查询缓存标签。

protected $rememberCacheTag = 'MyTag';

关系

验证通过按查询缓存查询起作用。这意味着当您执行预加载时,除非明确指定,否则这些额外的查询不会缓存。您可以通过使用回调函数来做到这一点。

$users = User::where("id", ">", "1")
    ->with(['posts' => function ($q) { $q->remember(10); }])
    ->remember(10)
    ->take(5)
    ->get();

始终启用

您可以通过设置$rememberFor属性来选择性地缓存模型的查询,该属性表示您想要缓存结果的分钟数。请谨慎使用此功能,因为它可能会导致您不熟悉其工作原理时在应用程序中出现意外的行为和陈旧的数据。

缓存刷新

基于包的架构,无法删除单个查询的缓存。但如果您使用缓存标签标记了任何查询,则可以清除该标签的缓存。

User::flushCache('user_queries');

如果您使用了$rememberCacheTag属性,则可以使用不带参数的方法,并清除由$rememberCacheTag设置的标签的缓存。

User::flushCache();

在您的包中使用

<?php

namespace Me\MyPackage\Models;

use Illuminate\Database\Eloquent\Model;
use martianatwork\LaravelQueryCache\LaravelQueryCache;

class MyModel extends Model
{
    use LaravelQueryCache;
    protected $rememberFor = 60;
    protected $rememberCacheTag = 'Currency';
    protected $clearOnChange = true;
    protected $fillable = ['name', 'symbol', 'conversion_rate'];

}

安全

如果您发现任何安全问题,请发邮件,而不是使用问题跟踪器。

致谢

本软件包是在melihovv/laravel-package-generator的帮助下启动的。