creativelittledots/rememberable

此包已被废弃,不再维护。没有建议的替代包。

Laravel 5 的查询缓存

2.0.8 2018-02-12 12:10 UTC

This package is not auto-updated.

Last update: 2020-07-23 14:41:18 UTC


README

Total Downloads Latest Stable Version Latest Unstable Version License

Rememberable 是 Laravel 5.0+ 的 Eloquent 特性,它恢复了 Laravel 4.2 中的 remember() 查询功能。这使得缓存查询结果变得非常简单。

// Get a the first user's posts and remember them for a day.
User::first()->remember(1440)->posts()->get();

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

安装

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

composer require creativelittledots/rememberable

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

<?php
namespace App;

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

abstract class Model extends Eloquent
{
    use Rememberable;
}

现在,只需确保您的应用程序模型来自这个新的 App\Model,而不是 Eloquent。

<?php
namespace App;

class Post extends Model
{
    //
}

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

使用方法

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

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

缓存标签

如果您想对某些查询进行标记,可以在查询中添加 cacheTags('tag_name')。请注意,不是所有的缓存驱动程序都支持缓存标签。

// Remember the number of users for an hour and tag it with 'user_queries'
User::remember(60)->cacheTags('user_queries')->count();

缓存前缀

如果您想为每个查询添加唯一的缓存键前缀(例如,如果您的缓存不支持标记),可以在查询中添加 prefix('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 属性设置为唯一字符串来为模型的查询设置缓存标签,该字符串应用于标记查询。

关系

验证通过基于查询的缓存查询来实现。这意味着当您执行预加载时,除非明确指定,否则不会缓存这些额外的查询。您可以通过使用回调函数来执行此操作。

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

始终启用

您可以选择缓存模型的所有查询,通过设置$rememberFor属性为希望缓存的分钟数来实现。在使用此功能时请谨慎,因为如果您不熟悉其工作原理,可能会导致意外的行为和应用程序中的数据过时。

缓存刷新

您可以通过简单使用以下方法来刷新单个查询:

User::flushCache();

这适用于所有查询

User::where('active', 1)->flushCache();

基于该包的架构,您可以使用缓存标签删除单个查询和任何标记的查询的缓存,您能够刷新特定标签的缓存。

User::flushCache('user_queries');

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

User::flushCache();