Laravel 中的缓存怎么用?哪个驱动速度最快?

在字面的理解中,缓存可以使事情变得更快。如果我问你 4 x 5 的计算结果,那么你会直接告诉我答案是 20 。你的大脑已经多次执行了此计算,甚至不需要再次执行。试想一下,如果你必须绘制四条重复五次的线条来进行计算,并像童年时代第一次计算时那样进行数线条。那么这将是一个非常耗时的过程(依据处理过程和时间而言)。

Laravel 为各种缓存机制提供了 API ,缓存配置文件位于 laravel 项目中的config/cache.php 。 Laravel 支持非常成熟、著名的缓存后端,例如Memcached,Redis。配置文件就像下面这样:

Alt Text

使用缓存

我们可以通过两种方式访问 Laravel 缓存,即 Factory 和 Repository 。 Factory 提供了对定义的所有缓存驱动程序的访问。 Repository 是由缓存配置文件指定的默认缓存驱动程序的实现。 但最重要的是,我们可以使用按缓存 Facade 划分的缓存作为 Factory 和 Repository 的最佳实现,例如

Illuminate\Support\Facades\Cache

缓存方法

put():

方法有三个参数,分别是键、值、缓存时间(单位:分钟)

Cache::put('cachekey', 'I am the cache',10);

get():

方法有一个或两个参数,第一个参数为必须填写,即缓存的键。第二个参数为可选参数,如为获取到指定的值,则返回第二个参数。

Cache::get('cachekey); 
Cache::get('cachekey', 'Cache died, so heres aftercache data');

has():

返回一个布尔型值,用户判断指定键是否存在。

if(Cache::has('cachekey')){
     return true;
}

forever():

当你需要将缓存永久保存是,需要使用此参数。

Cache::forever( 'cachekey', 'I am in the forever cache data!' );

forget():

如果你之前使用了 forever() 方法,或要在缓存到期之前手动使缓存过期,那么用这个方法就没错啦。

Cache::forget('cachekey');

同样,数据库缓存和路由缓存也可以派上用场。

有和没有缓存的响应时间

一个简单的例子,访问存储了40个学生的 Students 模型。

在没有任何缓存的情况下,查询语句是这样的:

public function index() {
    $students = Students::all();
    return response()->json($students);
}

使用缓存后,又是这样的:

public function index() {
    $students = Cache::remember('students', 24*60, function() {
        return Students::all();
    });
    return response()->json($students);
}

现在,让我们看一下第一,第二,第三和第四次点击中的响应时间。

Alt Text

第一次需要较长的时间,因为还没有缓存。所以第一次得先去查询,然后将结果缓存。后面的几次查询,都直接走的缓存,响应时间就要短得多。另外,在数据量较大的情况下,推荐使用 Redis 作为缓存机制。

原子锁

原子锁是指同一个资源同一时刻只能被一个进程/任务所使用,当两个任务/进程同时对一个资源进行访问的时候,需要顺序执行。

Cache::lock('key',10);

缓存助手函数

我们可以通过 facade 访问缓存。除此之外,还可以通过缓存的全局辅助函数访问缓存。

cache(['key' => 'value'], $seconds);

祝您阅读愉快!

本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

原文地址:https://dev.to/soneeka/laravel-caching-5...

译文地址:https://learnku.com/laravel/t/41705

本文为协同翻译文章,如您发现瑕疵请点击「改进」按钮提交优化建议
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 2
AloneUtopia

如果我问你 4 x 5 的计算结果,那么你会直接告诉我答案是 20 。你的大脑已经多次执行了此计算,甚至不需要再次执行。试想一下,如果你必须绘制四条重复五次的线条来进行计算,并像童年时代第一次计算时那样进行数线条。那么这将是一个非常耗时的过程(依据处理过程和时间而言)。

还好我们有乘法口诀 :joy:

4年前 评论
zxdstyle 4年前
Passer 4年前
24K大白羊 4年前

缓存时间好像从5.8开始就变成了以秒为单位了吧

4年前 评论
24K大白羊 4年前
kiti (作者) 4年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!