当前位置: 首页 > 面试题库 >

了解Laravel缓存:缓存外观和Redis

唐俊英
2023-03-14
问题内容

我是Laravel的新手。我已经对该主题进行了研究,但似乎找不到找到可以解决问题的答案。

我知道Laravel的默认缓存驱动程序设置为 file ,可以更改。它还有一些手工缓存命令,例如:

php artisan config:cache
php artisan route:cache

1) 即使Laravel具有一些自动处理某些缓存的内置命令和功能(无法确切了解哪些部分),我仍然必须在查询结果上手动使用Cache
Facade,对吗?

它不会自动执行操作,仅在我想更改某些内容时才需要使用Cache门面,对吗?

这是一个教程中的随机示例:

$posts = Cache::remember('index.posts', 30, function()
{return Post::with('comments', 'tags', 'author', 'seo')->whereHidden(0)->get();});

2) 当使用Redis(带有 predis
软件包)作为缓存驱动程序时,在某些情况下,我需要使用Cache外观还是Redis外观,或者两者都使用?还是可以仅在Laravel和服务器(Forge上的Digital
Ocean Droplet)中启用Redis,而不做其他事情?

我已经在Laravel文档中使用Cache门面看到了类似的内容:

Cache::store('redis')->put('bar', 'baz', 600);

我也看过使用Redis门面的教程:

use Illuminate\Support\Facades\Redis;

Route::get('/', function () { 
     $visits = Redis::incr('visits'); 
     return $visits; 
});

我不知道该怎么做。


问题答案:

它们都是 缓存

它们全部用于 减少时间成本

差异网:

配置和路线:

它属于 application 。我们称之为 应用程序缓存

php artisan config:cache
php artisan route:cache

这两个命令用于缓存路由和配置。

路径:

它们总是存储在 bootstrap/cache/

跑步

php artisan config:clear
php artisan route:clear

仅清除中的目录和文件bootstrap/cache/

它们是 静态的 。因此,仅在您更改它们时才更改它们。

贝尼菲特

如果你改变它们,你需要clearcache手动他们。

在您完成这些路由和配置之后。

Laravel 不需要再次从文件读取配置和路由, 这花费了IO时间。

文件系统缓存和Redis缓存:

文件系统缓存和Redis缓存也都是缓存。

但是,它们使用 不同的驱动程序 来存储数据,这意味着 您可以在其中存储缓存数据

文件系统路径:如果您正在使用文件系统驱动程序。它们存储在storage/framework/cache/

Reids PATH:数据redis按键值存储在其中。

您什么时候使用它们?

当您发现此代码有很多请求来获取数据时。这些数据并没有这么快地改变。

您可以使用缓存来存储它们,然后在下次对该API发出另一个请求时使用。它只是从缓存中获取数据。如下所示:

$posts = Cache::remember('index.posts', 30, function()
{return Post::with('comments', 'tags', 'author', 'seo')->whereHidden(0)->get();});

第一个请求从数据库中获取帖子的数据,然后将这些数据存储在30秒后过期的缓存(Reids或Filesystem)中。

下一个请求仅通过缓存获取帖子的数据。他们不需要再次在数据库中搜索。

还有这个:

use Illuminate\Support\Facades\Redis;

Route::get('/', function () { 
     $visits = Redis::incr('visits'); 
     return $visits; 
});

意味着当人们请求localhost:8000/,用户的访问次数增加了redis(不需要存储在数据库中,这花费了更多的时间),下次,当请求搜索访问数时,可以redis很快找到它。

PS:这里使用Redis Facade,然后将数据存储在中redis

如果您将redis用作缓存驱动程序,那么Cache::remember()也会将数据存储在redis中。

但是,使用Redis Facade,可以使用许多Redis方法。

哪个更好?

我认为redis比还好filesystem

  1. 因为redis将数据存储在内存中,而文件系统存储在磁盘中。从内存读取数据比从磁盘读取数据

  2. *在Redis中 *操作 数据比文件系统 更容易 。例如,Redis支持清除特定标签的所有缓存,但是文件系统无法[因为文件系统通过加密密钥的名称存储缓存数据]。

  3. 对于 分布式 服务器,文件系统缓存不是一个好主意。降低缓存命中率。

老实说,还有其他驱动程序可以选择mongodb

顺便说一句,我的英语不是很好,希望你能理解。



 类似资料:
  • 我在laravel中使用自己的用户角色和权限实现如何缓存用户登录时的所有权限和角色,以及在添加新记录时刷新缓存。我的表是users、roles、permissions、permission\u role、permission\u user、role\u user。这是我的桌子结构 我已经在上创建了提供程序,并将此代码添加到引导方法 它工作正常,但每次都在运行查询,这会减慢我的应用程序的速度,有没有

  • 我需要一些帮助来理解为什么在Eureka注册的服务会想要彼此通信,尽管没有实际运行。例如,我在尤里卡注册了服务A和服务B。如果我搞垮了服务B,那么即使服务A没有运行,它仍然会尝试与服务B进行30秒到3分钟的通信。这样做的目的是什么?有什么办法可以绕过它吗?谢谢你!

  • 我很抱歉,如果这已经涵盖,但我做了广泛的搜索,没有找到答案。 首先,我使用刀片。当我在本地更新视图时,页面会正确更新和显示。但是,当我将文件上传到我的托管服务器时,我看不到这些更改。我已经等了24小时了,什么都没有。 起初我以为是我的提供者从服务器缓存,但我禁用了该功能。。当我从服务器上的app/storage/framework/views中删除文件时,新视图将正确显示。所以,这显然是一个拉威尔

  • 当你使用本地(在内存中)缓存时,服务器可以缓存一些信息并快速地检索它,但是其他服务器不能访问这个缓存数据,他们需要到数据库中查询同样的信息。 如果你喜欢使用分布式缓存让其他服务器访问缓存的数据,由于它有一些序列化/反序列化和网络延迟开销,则需要注意:在某些情况下,它可能会降低性能。 缓存需要处理的另一个问题:缓存失效。 There are only two hard things in Compu

  • Serenity 提供一些缓存抽象和实用功能让你更容易地使用本地缓存。 术语 本地(local) 的意思是指在本地内存中缓存项目(因此没有涉及到序列化)。 当你的应用程序在网站群(web farm) 中部署时,本地缓存可能还不够或者有时合适。我们将在 分布式缓存 章节中讨论该场景。

  • 本文向大家介绍如何解决 Redis 缓存穿透和缓存雪崩问题?相关面试题,主要包含被问及如何解决 Redis 缓存穿透和缓存雪崩问题?时的应答技巧和注意事项,需要的朋友参考一下 缓存雪崩: 由于缓存层承载着大量请求,有效地 保护了存储层,但是如果缓存层由于某些原因不能提供服务,比如 Redis 节点挂掉了,热点 key 全部失效了,在这些情况下,所有的请求都会直接请求到数据库,可能会造成数据库宕机的