Larvel的缓存系统【超详解】

一、简介

在应用中,一些查询数据或处理任务的操作会在某段时间里短时间内大量进行,或是一个操作花费好几秒钟。当出现这种情况时,我们通常会将检索到的数据缓存起来,从而为后面请求同一数据的请求迅速返回结果。这些缓存数据通常会储存在极快的存储系统中,Laravel 提供了一个统一且简单易用的缓存系统。它支持多种缓存驱动,包括文件系统、数据库、Redis、Memcached 等。
Laravel 为各种缓存后端提供了富有表现力且统一的 API,以便你利用它们极快的查询数据来加快你的应用。

二、配置缓存(使用缓存时的必备条件)

如何查看项目使用的是哪一种缓存?
缓存配置文件位于 config/cache.php。在这个文件中,你可以指定应用默认使用哪个缓存驱动。Laravel 支持的缓存后端包括 Memcached、Redis、DynamoDB,以及现成的关系型数据库。此外,还支持基于文件的缓存驱动,以及方便自动化测试的缓存驱动 array 和 null 。

(1)数据库缓存

当使用 database 缓存驱动程序时,您需要设置一个表来包含缓存项。您将在下表中找到一个示例 Schema 声明:

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

(2)Memcached

使用 Memcached 驱动需要安装【Memcached PECL 包】(https://pecl.php.net/package/memcached)。您可以在 config/cache.php 配置文件中列出所有 Memcached 服务器。 该文件已经包含一个 memcached.servers 条目以帮助您入门:

'memcached' => [
    'servers' => [
        [
            'host' => env('MEMCACHED_HOST', '127.0.0.1'),
            'port' => env('MEMCACHED_PORT', 11211),
            'weight' => 100,
        ],
    ],
],

(3)Redis缓存

在将 Redis 缓存与 Laravel 一起使用之前,您需要通过 PECL 安装 PhpRedis PHP 扩展或通过 Composer 安装 predis/predis 包(~1.0)。Laravel Sail 已经包含了这个扩展。另外,Laravel 官方部署平台如 Laravel Forge 和 Laravel Vapor 默认安装了 PhpRedis 扩展。

(4)DynamoDB

在使用 DynamoDB 缓存驱动程序之前,您必须创建一个 DynamoDB 表来存储所有缓存的数据。通常,此表应命名为「缓存」。但是,您应该根据应用程序的 cache 配置文件中的 stores.dynamodb.table 配置值来命名表。

该表还应该有一个字符串分区键,其名称对应于应用程序的 cache 配置文件中的 stores.dynamodb.attributes.key 配置项的值。 默认情况下,分区键应命名为 key。

三、缓存的使用*

(1)从缓存中获取值

根据键值查找

$value = Cache::get('key');//根据键值查找

如果不存在使用默认的值

$value = Cache::get('key');//根据键值查找

如果不存在,也可以使用闭包,返回结果

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

(2)从缓存检索是否存在(用于判断)

has 方法可用于确定缓存中是否存在项目。如果项目存在但其值为 null,此方法也将返回 false

if (Cache::has('key')) {
		//逻辑代码
}

(3)递增/递减

increment 和 decrement 方法可用于调整缓存中整数项的值。这两种方法都接受一个可选的第二个参数,指示增加或减少项目值的数量:

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

(4)检索和存储

Cache:remember检索,如果不存在,执行闭包存储,并指定缓存的时间

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

Cache::rememberForever如果不存在,执行闭包存储,并永久缓存

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

(5)检索和删除

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

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

(6)仅单纯的存储缓存

存储缓存,指定key、value和缓存时间(秒)

Cache::put('key', 'value', $seconds = 10);

不指定时间则永久缓存

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

除了将秒数作为整数传递之外,您还可以传递一个表示缓存项所需过期时间的 DateTime 实例:

Cache::put('key', 'value', now()->addMinutes(10));

(7)不存在则存储

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

(8)永久存储

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

(9)从缓存中删除项目

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

Cache::forget('key');

通过提供零或负数的过期秒数来删除项目

Cache::put('key', 'value', 0);

Cache::put('key', 'value', -5);

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

Cache::flush();

(10)cache()助手函数*

可以使用全局 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();
});

三、结语

在 Laravel 的世界里,缓存系统犹如一把性能优化的利器。通过灵活多样的配置选项,无论是选择数据库、Memcached、Redis 还是其他缓存后端,都能依据项目的独特需求与运行环境精准适配。而其丰富全面的使用方法,从数据的获取、存储、递增递减,到复杂的检索与删除操作,为开发者编织了一张严密且高效的缓存处理网络。这不仅极大地提升了应用程序的数据访问速度,减少了资源的重复消耗,更在高并发与大数据量的挑战面前,赋予了应用稳健运行与快速响应的能力。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值