教程 > laravel 教程 > 阅读:194

laravel 缓存——迹忆客-ag捕鱼王app官网

配置

laravel为各种缓存后端提供了一个富有表现力的统一api。缓存配置位于config/cache.php。在此文件中,我们可以指定希望在整个应用程序中默认使用哪个缓存驱动程序。laravel默认支持流行的缓存后端,例如memcachedredis

缓存配置文件还包含其他各种选项,这些选项记录在文件中,因此请务必仔细阅读这些选项。默认情况下,laravel配置为使用file缓存驱动程序,该驱动程序将序列化的缓存对象存储在文件系统中。对于较大的应用程序,建议您使用功能更强大的驱动程序,例如memcached或redis。您甚至可以为同一驱动程序配置多个缓存配置。

驱动程序先决条件

数据库

使用database缓存驱动程序时,您将需要设置一个表以包含缓存项。在下面示例中创建了一个schema:

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

memcache

使用memcached驱动程序需要安装memcached pecl软件包。您可以在config/cache.php配置文件中列出所有的memcached服务器:

'memcached' => [
    [
        'host' => '127.0.0.1',
        'port' => 11211,
        'weight' => 100
    ],
],

您也可以将host选项设置为unix套接字路径。如果这样做,则应将port选项设置为0:

'memcached' => [
    [
        'host' => '/var/run/memcached/memcached.sock',
        'port' => 0,
        'weight' => 100
    ],
],

redis

在laravel中使用redis缓存之前,您将需要通过pecl安装phpredis php扩展或通过composer安装predis/predis软件包(〜1.0 )。

有关配置redis的更多信息,请参阅其。


使用缓存

获取缓存实例

illuminate\contracts\cache\factoryilluminate\contracts\cache\repository 接口提供了访问laravel缓存的服务。factory接口提供对为您的应用程序定义的所有缓存驱动程序的访问。repository接口是由我们在cache配置文件中指定的应用程序的默认高速缓存驱动器的实现。

但是,也可以使用cache facade,这是我们在本文档中将使用的facade 。该cache facade提供了对laravel缓存访问的快速便捷的方法:

访问多个缓存存储

可以通过使用cache facade的store方法访问各种缓存存储。传递给store方法的key应对应在cache配置文件的配置数组中列出的存储之一:

$value = cache::store('file')->get('foo');
cache::store('redis')->put('bar', 'baz', 600); // 10 minutes

从缓存中检索数据

cache facade的get方法用于从缓存中检索项目。如果该项目在缓存中不存在,将返回null。可以将第二个参数传递给get方法,以指定您希望在项目不存在时返回的默认值:

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

您甚至可以传递一个closure作为默认值。如果指定的项目在缓存中不存在,则返回closure中返回的结果。传递闭包可让我们延迟从数据库或其他外部服务中检索默认值:

$value = cache::get('key', function () {
    return db::table(...)->get();
});

检查项目是否存在

has方法可以用于确定在高速缓存中是否存在项目。如果值为null将返回false:

if (cache::has('key')) {
    //
}

递增/递减值

incrementdecrement方法可被用于增加或减小缓存中的整数的值。这两种方法的第二个参数都是可选的,表示增加或减少项目值的数量:

cache::increment('key');
cache::increment('key', $amount);
cache::decrement('key');
cache::decrement('key', $amount);

检索并存储

有时,我们可能希望从缓存中检索项目,但是如果所请求的项目不存在,则还可能存储默认值。例如,我们希望从缓存中检索所有用户,如果不存在,则从数据库中检索它们并将它们添加到缓存中。您可以使用以下cache::remember方法执行此操作:

$value = cache::remember('users', $seconds, function () {
    return db::table('users')->get();
});

如果该项目在缓存中不存在,则将执行传递给remember方法的closure,并将其返回的结果放入缓存中。

您可以使用rememberforever方法从缓存中检索项目或将其永久存储:

$value = cache::rememberforever('users', function () {
    return db::table('users')->get();
});

检索并删除

如果需要从缓存中检索项目然后删除该项目,则可以使用pull方法。与get方法类似,如果该项目在缓存中不存在,则将返回null:

$value = cache::pull('key');

将项目存储在缓存中

可以使用cache facade 中的put方法将项目存储在缓存中:

cache::put('key', 'value', $seconds);

如果没有将存储时间传递给该put方法,则将无限期存储该项目:

cache::put('key', 'value');

除了传递秒数(而不是整数)之外,还可以传递一个datetime实例,该实例代表缓存项的到期时间:

cache::put('key', 'value', now()->addminutes(10));

如果不存在则存储

如果缓存存储中尚不存在指定的数据,则add方法会将其添加到缓存中。如果该项目实际上已添加到缓存中,则该方法将返回true。否则,该方法将返回false:

cache::add('key', 'value', $seconds);

永久存储

forever方法可以用于将项目永久地存储在高速缓存中。由于这些项目不会过期,因此必须使用forget方法将其从缓存中手动删除:

cache::forever('key', 'value');

如果使用的是memcached驱动程序,则当缓存达到其大小限制时,“永久”存储的项目可能会被删除。

从缓存中删除项目

可以使用forget方法从缓存中删除项目:

cache::forget('key');

还可以通过提供零或负的ttl来删除项目:

cache::put('key', 'value', 0);
cache::put('key', 'value', -5);

可以使用以下flush方法清除整个缓存:

cache::flush();

缓存帮助函数

除了使用cache facade 或缓存接口外,还可以使用全局cache帮助函数通过缓存检索和存储数据。当cache只有单个字符串参数时,它将返回给定键的值:

$value = cache('key');

如果我们提供键/值对的数组以及该函数的过期时间,它会将值存储在缓存中,该值在缓存中的过期时间就是我们指定的:

cache(['key' => 'value'], $seconds);
cache(['key' => 'value'], now()->addminutes(10));

如果cache不带任何参数,它将返回实现illuminate\contracts\cache\factory接口的类的实例,从而允许您调用其他缓存方法:

cache()->remember('users', $seconds, function () {
    return db::table('users')->get();
});

添加自定义缓存驱动程序

编写驱动程序

要创建我们的自定义缓存驱动程序,我们首先需要实现illuminate\contracts\cache\store接口。因此,mongodb缓存实现如下所示:

我们只需要使用mongodb连接来实现所有这些方法。有关如何实现上述每种方法的示例,请查看illuminate\cache\memcachedstore框架源代码中的。一旦我们的实现完成,我们就可以完成我们的自定义驱动程序注册。

cache::extend('mongo', function ($app) {
    return cache::repository(new mongostore);
});

注册驱动程序

要向laravel注册自定义缓存驱动程序,我们将使用cache facade上的extend方法。可以在app\providers\appserviceprovider的boot方法中调用cache::extend,或者您可以创建自己的service provider程序来注册扩展-只需不要忘记在config/app.php程序数组中注册provider:

传递给该extend方法的第一个参数是驱动程序的名称。这将与config/cache.php配置文件中的dirver选项相对应。第二个参数是一个closure,应该返回一个illuminate\cache\repository实例。向closure传递一个$app实例,该实例是service container的实例。

注册扩展名后,将config/cache.php配置文件的driver选项更新为新的扩展名。

查看笔记

扫码一下
查看教程更方便
网站地图