缓存
配置
Laravel 为各种缓存系统提供了统一的 API。缓存配置位于 config/cache.php
。在此文件中,您可以指定希望在整个应用程序中默认使用哪个缓存驱动。Laravel 开箱即支持流行的缓存后端,如 Memcached 和 Redis。
缓存配置文件还包含其他各种选项,这些选项在文件中有详细说明,因此请务必阅读这些选项。默认情况下,Laravel 配置为使用 file
缓存驱动,该驱动将序列化的缓存对象存储在文件系统中。对于较大的应用程序,建议使用内存缓存,如 Memcached 或 APC。您甚至可以为同一驱动配置多个缓存配置。
在使用 Redis 缓存与 Laravel 之前,您需要通过 Composer 安装 predis/predis
包 (~1.0)。
缓存使用
在缓存中存储一个项目
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');
访问特定的缓存存储
使用多个缓存存储时,您可以通过 store
方法访问它们:
$value = Cache::store('foo')->get('key');
增量和减量
除 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(['people', 'artists'])->put('Anne', $anne, $minutes);
您可以将任何缓存存储方法与标签结合使用,包括 remember
、forever
和 rememberForever
。您还可以从带标签的缓存中访问缓存项目,以及使用其他缓存方法,如 increment
和 decrement
。
访问带标签缓存中的项目
要访问带标签的缓存,请传递用于保存它的相同有序标签列表。
$anne = Cache::tags('people', 'artists')->get('Anne');
$john = Cache::tags(['people', 'authors'])->get('John');
您可以清除所有带有名称或名称列表的标签的项目。例如,此语句将删除所有带有 people
、authors
或两者标签的缓存。因此,“Anne”和“John”都将从缓存中删除:
Cache::tags('people', 'authors')->flush();
相反,此语句将仅删除带有 authors
标签的缓存,因此“John”将被删除,但“Anne”不会。
Cache::tags('authors')->flush();
缓存事件
要在每个缓存操作上执行代码,您可以监听缓存触发的事件:
Event::listen('cache.hit', function($key, $value) {
//
});
Event::listen('cache.missed', function($key) {
//
});
Event::listen('cache.write', function($key, $value, $minutes) {
//
});
Event::listen('cache.delete', function($key) {
//
});
数据库缓存
使用 database
缓存驱动时,您需要设置一个表来包含缓存项目。您将在下面找到一个表的 Schema
声明示例:
Schema::create('cache', function($table)
{
$table->string('key')->unique();
$table->text('value');
$table->integer('expiration');
});
Memcached 缓存
使用 Memcached 缓存需要安装 Memcached PECL 包。
默认配置基于 Memcached::addServer 使用 TCP/IP:
'memcached' => array(
array('host' => '127.0.0.1', 'port' => 11211, 'weight' => 100),
),
您还可以将 host
选项设置为 UNIX 套接字路径。如果这样做,port
选项应设置为 0
:
'memcached' => array(
array('host' => '/var/run/memcached/memcached.sock', 'port' => 0, 'weight' => 100),
),
Redis 缓存
请参阅 Redis 配置