Skip to content

缓存

配置

Laravel 提供了一个统一的 API 用于各种缓存系统。缓存配置位于 app/config/cache.php。在此文件中,您可以指定希望在整个应用程序中默认使用的缓存驱动。Laravel 支持流行的缓存后端,如 MemcachedRedis

缓存配置文件还包含各种其他选项,这些选项在文件中有文档说明,因此请务必仔细阅读这些选项。默认情况下,Laravel 配置为使用 file 缓存驱动,该驱动将序列化的缓存对象存储在文件系统中。对于较大的应用程序,建议使用内存缓存,如 Memcached 或 APC。

缓存使用

将项目存储在缓存中

php
Cache::put('key', 'value', $minutes);

使用 Carbon 对象设置过期时间

php
$expiresAt = Carbon::now()->addMinutes(10);

Cache::put('key', 'value', $expiresAt);

如果不存在则将项目存储在缓存中

php
Cache::add('key', 'value', $minutes);

add 方法将返回 true,如果项目实际上被 添加 到缓存中。否则,该方法将返回 false

检查缓存中是否存在

php
if (Cache::has('key'))
{
	//
}

从缓存中检索项目

php
$value = Cache::get('key');

检索项目或返回默认值

php
$value = Cache::get('key', 'default');

$value = Cache::get('key', function() { return 'default'; });

将项目永久存储在缓存中

php
Cache::forever('key', 'value');

有时您可能希望从缓存中检索项目,但如果请求的项目不存在,则存储一个默认值。您可以使用 Cache::remember 方法做到这一点:

php
$value = Cache::remember('users', $minutes, function()
{
	return DB::table('users')->get();
});

您还可以结合使用 rememberforever 方法:

php
$value = Cache::rememberForever('users', function()
{
	return DB::table('users')->get();
});

请注意,所有存储在缓存中的项目都是序列化的,因此您可以自由存储任何类型的数据。

从缓存中提取项目

如果您需要从缓存中检索项目并删除它,可以使用 pull 方法:

php
$value = Cache::pull('key');

从缓存中移除项目

php
Cache::forget('key');

增量与减量

filedatabase 驱动外,所有驱动都支持 incrementdecrement 操作:

增加值

php
Cache::increment('key');

Cache::increment('key', $amount);

减少值

php
Cache::decrement('key');

Cache::decrement('key', $amount);

缓存标签

lightbulb

使用 filedatabase 缓存驱动时不支持缓存标签。此外,当使用多个标签与存储“永久”的缓存时,使用如 memcached 这样的驱动性能最佳,因为它会自动清除过期记录。

访问带标签的缓存

缓存标签允许您将相关项目标记在缓存中,然后通过给定名称刷新所有带标签的缓存。要访问带标签的缓存,请使用 tags 方法。

您可以通过传递有序的标签名称列表作为参数,或作为有序的标签名称数组来存储带标签的缓存:

php
Cache::tags('people', 'authors')->put('John', $john, $minutes);

Cache::tags(array('people', 'artists'))->put('Anne', $anne, $minutes);

您可以将任何缓存存储方法与标签结合使用,包括 rememberforeverrememberForever。您还可以从带标签的缓存中访问缓存的项目,以及使用其他缓存方法,如 incrementdecrement

访问带标签的缓存中的项目

要访问带标签的缓存,请传递用于保存它的相同有序标签列表。

php
$anne = Cache::tags('people', 'artists')->get('Anne');

$john = Cache::tags(array('people', 'authors'))->get('John');

您可以刷新所有带有名称或名称列表的项目。例如,这条语句将删除所有带有 peopleauthors 或两者的标签的缓存。因此,“Anne”和“John”都会从缓存中删除:

php
Cache::tags('people', 'authors')->flush();

相反,这条语句将仅删除带有 authors 标签的缓存,因此“John”将被删除,但“Anne”不会。

php
Cache::tags('authors')->flush();

数据库缓存

使用 database 缓存驱动时,您需要设置一个表来包含缓存项目。以下是该表的示例 Schema 声明:

php
Schema::create('cache', function($table)
{
	$table->string('key')->unique();
	$table->text('value');
	$table->integer('expiration');
});