Laravel 中的缓存怎么用?哪个驱动速度最快?
在字面的理解中,缓存可以使事情变得更快。如果我问你 4 x 5 的计算结果,那么你会直接告诉我答案是 20 。你的大脑已经多次执行了此计算,甚至不需要再次执行。试想一下,如果你必须绘制四条重复五次的线条来进行计算,并像童年时代第一次计算时那样进行数线条。那么这将是一个非常耗时的过程(依据处理过程和时间而言)。
Laravel 为各种缓存机制提供了 API ,缓存配置文件位于 laravel 项目中的config/cache.php 。 Laravel 支持非常成熟、著名的缓存后端,例如Memcached,Redis。配置文件就像下面这样:
使用缓存
我们可以通过两种方式访问 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);
}
现在,让我们看一下第一,第二,第三和第四次点击中的响应时间。
第一次需要较长的时间,因为还没有缓存。所以第一次得先去查询,然后将结果缓存。后面的几次查询,都直接走的缓存,响应时间就要短得多。另外,在数据量较大的情况下,推荐使用 Redis 作为缓存机制。
原子锁
原子锁是指同一个资源同一时刻只能被一个进程/任务所使用,当两个任务/进程同时对一个资源进行访问的时候,需要顺序执行。
Cache::lock('key',10);
缓存助手函数
我们可以通过 facade 访问缓存。除此之外,还可以通过缓存的全局辅助函数访问缓存。
cache(['key' => 'value'], $seconds);
祝您阅读愉快!
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。
如果我问你 4 x 5 的计算结果,那么你会直接告诉我答案是 20 。你的大脑已经多次执行了此计算,甚至不需要再次执行。试想一下,如果你必须绘制四条重复五次的线条来进行计算,并像童年时代第一次计算时那样进行数线条。那么这将是一个非常耗时的过程(依据处理过程和时间而言)。
还好我们有乘法口诀
缓存时间好像从5.8开始就变成了以秒为单位了吧