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

Rad*_*u B 4 caching redis laravel

我是 Laravel 的新手。我已经对这个主题进行了研究,但我似乎找不到一个可以为我澄清问题的答案。

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

php artisan config:cache
php artisan route:cache
Run Code Online (Sandbox Code Playgroud)

1)即使Laravel有一些内置命令和功能可以自动处理一些缓存(不明白到底是哪些部分),我仍然必须在查询结果上手动使用Cache门面,对吧?

它不会自动执行此操作,如果我想更改某些内容或某些内容,我只需使用缓存外观,对吧?

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

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

2)使用Redis时(带有predis包)作为缓存驱动程序时,在某些情况下我是否需要使用Cache Facade,或Redis Facade,或两者都使用?或者我可以简单地在 Laravel 和服务器(Forge 上的 Digital Ocean Droplet)中启用 Redis,而不执行任何其他操作?

我在 Laravel 文档中看到过类似的内容,使用 Cache 门面:

Cache::store('redis')->put('bar', 'baz', 600);
Run Code Online (Sandbox Code Playgroud)

我还看过一个使用 Redis 门面的教程:

use Illuminate\Support\Facades\Redis; 

Route::get('/', function () { 
     $visits = Redis::incr('visits'); 
     return $visits; 
});
Run Code Online (Sandbox Code Playgroud)

我不知道该怎么做才是正确的。

Tsa*_*oga 6

常见的:

它们都是缓存

它们都是为了减少时间成本

差异网:


配置和路线:

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

php artisan config:cache
php artisan route:cache
Run Code Online (Sandbox Code Playgroud)

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

小路:

它们始终存储在bootstrap/cache/

跑步

php artisan config:clear
php artisan route:clear
Run Code Online (Sandbox Code Playgroud)

只清除.txt文件中的目录和文件bootstrap/cache/

它们是静态的。所以只有当你改变它们时它们才会改变。

贝尼菲特

如果您更改它们,则需要手动clear更改cache它们。

在您缓存这些路由和配置之后。

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


文件系统缓存和Redis缓存:

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

但是,它们使用不同的驱动程序来存储数据,这意味着您存储缓存数据的位置

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

redisReids PATH:数据按键值存储。

你什么时候使用它们?

当您发现有很多请求此代码获取数据时。而且这些数据变化并没有那么快。

您可以使用缓存来存储它们,然后下次再请求此 api 时。它只是从缓存中获取数据。像下面这样:

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

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

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

和这个:

use Illuminate\Support\Facades\Redis; 

Route::get('/', function () { 
     $visits = Redis::incr('visits'); 
     return $visits; 
});
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

哪个更好?

我认为redisfilesystem.

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

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

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

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

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