缓存
配置
Laravel 提供了一个统一的 API 用于各种缓存系统。缓存配置位于 app/config/cache.php
。在此文件中,您可以指定希望在整个应用程序中默认使用的缓存驱动。Laravel 支持流行的缓存后端,如 Memcached 和 Redis。
缓存配置文件还包含各种其他选项,这些选项在文件中有文档说明,因此请务必仔细阅读这些选项。默认情况下,Laravel 配置为使用 file
缓存驱动,该驱动将序列化的缓存对象存储在文件系统中。对于较大的应用程序,建议使用内存缓存,如 Memcached 或 APC。
缓存使用
将项目存储在缓存中
Cache::put('key', 'value', $minutes);
使用 Carbon 对象设置过期时间
$expiresAt = Carbon::now()->addMinutes(10);
Cache::put('key', 'value', $expiresAt);
如果不存在则将项目存储在缓存中
Cache::add('key', 'value', $minutes);
add
方法将返回 true
,如果项目实际上被 添加 到缓存中。否则,该方法将返回 false
。
检查缓存中是否存在
if (Cache::has('key'))
{
//
}
从缓存中检索项目
$value = Cache::get('key');
检索项目或返回默认值
$value = Cache::get('key', 'default');
$value = Cache::get('key', function() { return 'default'; });
将项目永久存储在缓存中
Cache::forever('key', 'value');
有时您可能希望从缓存中检索项目,但如果请求的项目不存在,则存储一个默认值。您可以使用 Cache::remember
方法做到这一点:
$value = Cache::remember('users', $minutes, function()
{
return DB::table('users')->get();
});
您还可以结合使用 remember
和 forever
方法:
$value = Cache::rememberForever('users', function()
{
return DB::table('users')->get();
});
请注意,所有存储在缓存中的项目都是序列化的,因此您可以自由存储任何类型的数据。
从缓存中提取项目
如果您需要从缓存中检索项目并删除它,可以使用 pull
方法:
$value = Cache::pull('key');
从缓存中移除项目
Cache::forget('key');
增量与减量
除 file
和 database
驱动外,所有驱动都支持 increment
和 decrement
操作:
增加值
Cache::increment('key');
Cache::increment('key', $amount);
减少值
Cache::decrement('key');
Cache::decrement('key', $amount);
缓存标签
使用 file
或 database
缓存驱动时不支持缓存标签。此外,当使用多个标签与存储“永久”的缓存时,使用如 memcached
这样的驱动性能最佳,因为它会自动清除过期记录。
访问带标签的缓存
缓存标签允许您将相关项目标记在缓存中,然后通过给定名称刷新所有带标签的缓存。要访问带标签的缓存,请使用 tags
方法。
您可以通过传递有序的标签名称列表作为参数,或作为有序的标签名称数组来存储带标签的缓存:
Cache::tags('people', 'authors')->put('John', $john, $minutes);
Cache::tags(array('people', 'artists'))->put('Anne', $anne, $minutes);
您可以将任何缓存存储方法与标签结合使用,包括 remember
、forever
和 rememberForever
。您还可以从带标签的缓存中访问缓存的项目,以及使用其他缓存方法,如 increment
和 decrement
。
访问带标签的缓存中的项目
要访问带标签的缓存,请传递用于保存它的相同有序标签列表。
$anne = Cache::tags('people', 'artists')->get('Anne');
$john = Cache::tags(array('people', 'authors'))->get('John');
您可以刷新所有带有名称或名称列表的项目。例如,这条语句将删除所有带有 people
、authors
或两者的标签的缓存。因此,“Anne”和“John”都会从缓存中删除:
Cache::tags('people', 'authors')->flush();
相反,这条语句将仅删除带有 authors
标签的缓存,因此“John”将被删除,但“Anne”不会。
Cache::tags('authors')->flush();
数据库缓存
使用 database
缓存驱动时,您需要设置一个表来包含缓存项目。以下是该表的示例 Schema
声明:
Schema::create('cache', function($table)
{
$table->string('key')->unique();
$table->text('value');
$table->integer('expiration');
});